@proelixir

Страница 299 из 1045
abc
27.01.2017
08:23:51
есть 3 приложения на Elixir, которые тянут данные с определенных источников. Будем называть их провайдерами, и пусть они будут обозначены P1, P2 и P3. Сейчас эти провайдеры пишут сообщения в MQ. Далее эти сообщения разбирает некий collector, преобразует в общий формат и кладет обратно в MQ. Назовем этот сервис C1. Далее крутятся еще 3 сервиса, которые забирают сообщения из MQ от C1 обрабатывают их и отправляют во внешний мир. Меня смущает использование MQ для коммуникаций. Как мне кажется для OTP приложений это лишнее ? Но MQ дает какие-то гарантии что сообщение будет доставлено и обработано. В OTP же можно передавать сообщения между процессами, по модели Акторов. Как всегда принимаем в расчет что любой из сервисов может упасть в какой то момент. Конечно этим займется Supervisor. Но волнует то что если сервис упал на обработке сообщения, то оно как правило пропадает из mailbox и сервис дальше обрабатывает следующее. В идеальной ситуации стоит записать куда-то что на таком то сообщении сервис упал, попробовать еще 3 раза и если все плохо, взять следующее. Если идти Erlang-way то тут мы можем использовать вместо MQ свою реализацию на ETS/DETS ? или Mnesia ? Или это все параноя и MQ в этой архитектуре не лишний ?

Ранее мне советовали использовать gen_stage тут но идея back propagation никак не ложится на сервисы P1,P2,P3

Alexander
27.01.2017
08:28:00
mq не дает гарантий, там же доставку надо подтверждать, по сути на ets тоже самое можно и просто вешать флаг что процессится и удалять после процессинга

abc
27.01.2017
08:28:31
в общем я подтверждение тут и имел в виду да

Google
Alexander
27.01.2017
08:29:16
мы на рубях просто подобное городили и просто вынимали из редиса перекладывая в процессинг и супервайзер перекладывает обратно если чайлд накрылся

abc
27.01.2017
08:29:24
с другой стороны ETS оно же в памяти и она может закончится. чаще синкать в DETS ?

у меня был подобный сервис на ноде и редисе, но редис для MQ слишком прост. да и упасть он может не успев сделать синк на диск

Alexander
27.01.2017
08:30:25
если хочется железобетонных гарантий, то надо не инмемори использовать, но тогда можно забыть о скоростном процессинге

abc
27.01.2017
08:31:00
да вот тут как раз и получается что надо как то строить баланс

Alexander
27.01.2017
08:31:04
и опять же у меня на основной работе в итоге так и сделали

т.к нужны прямо железобетонные гарантии

abc
27.01.2017
08:31:41
в базе хранить все стали ?

Alexander
27.01.2017
08:31:47
да

там такого говна накрутили

но в итоге более менее нормальная скорость и гарантии

abc
27.01.2017
08:32:12
у меня этот кейс в голове крутился изначально,

но всегда было чувство что делаю что-то не так

Google
Alexander
27.01.2017
08:32:29
у нас просто работа с данными соц.обеспечения если там чего не выполнится, все - секир башка

даже спец чувак на зарплате следит за очередями

abc
27.01.2017
08:33:15
т.е. по сути очередь в СУБД сделали да ? с логгином событий

Alexander
27.01.2017
08:33:22
да

только брокер из говна и палок

т.к база лочится

abc
27.01.2017
08:33:47
с другой стороны это очень удобно, можно обратно прокрутить какой то промежуток времени

на том же тесте

Alexander
27.01.2017
08:34:37
просто нужна была очень хитрая логика воркфлоу, когда задачи зависят от задач по условям и прочему

готовых решений нет

а придумать - с первого раза явно говно получится

раза с 3 получилось что сейчас бегает

abc
27.01.2017
08:35:05
да иногда все же стоит применять железобетонные решения проверенные временем, а не хипстерские варианты )

в общем убедил. будем писать в базу

Alexander
27.01.2017
08:36:00
у нас там сотни две джобок протерялись, еще на старом решении, а мужик менеджера ножом пырнул в офисе

abc
27.01.2017
08:36:14
хера себе у вас там

Alexander
27.01.2017
08:36:18
т.к он пришел за пособием а ему оно не начислилось

abc
27.01.2017
08:36:32
вот это и ошибка программиста ценою жизни

Alexander
27.01.2017
08:36:35
ну просто у него оплата жилья и вообще еду на это покупает

abc
27.01.2017
08:36:44
почти как софт для боингов писать

Google
Alexander
27.01.2017
08:36:48
мы потом сделали тревожную кнопку

abc
27.01.2017
08:37:09
хотя чему удивляться если сейчас уже кардиостимуляторы взламывают

идешь такой, а у тебя сердце хакнули. и чтобы не сдохнуть перечисли 1000 битков

Alexander
27.01.2017
08:37:33
вот такую штуку запилили

нас кстати в целях "знакомства с пользователями" мы ходили в офисы местного собеса

ад

но отпали многие вопросы

abc
27.01.2017
08:45:06
я раньше принимал участие в создании первых тогда еще веб-приложений для больничек. там где еще половина UI была на ActiveX для Internet Explorer only. ходил по больничкам, общался. ад. там люди валерьянкой с утра закидываются и сидят на антидепрессантах.

Alexander
27.01.2017
08:46:03
наши клиенты похоже этими "антидепресантами" торгуют )) Я как зашел, как в универе себя почувствовал, так травой запахло откуда-то

Vladimir
27.01.2017
08:47:17
есть 3 приложения на Elixir, которые тянут данные с определенных источников. Будем называть их провайдерами, и пусть они будут обозначены P1, P2 и P3. Сейчас эти провайдеры пишут сообщения в MQ. Далее эти сообщения разбирает некий collector, преобразует в общий формат и кладет обратно в MQ. Назовем этот сервис C1. Далее крутятся еще 3 сервиса, которые забирают сообщения из MQ от C1 обрабатывают их и отправляют во внешний мир. Меня смущает использование MQ для коммуникаций. Как мне кажется для OTP приложений это лишнее ? Но MQ дает какие-то гарантии что сообщение будет доставлено и обработано. В OTP же можно передавать сообщения между процессами, по модели Акторов. Как всегда принимаем в расчет что любой из сервисов может упасть в какой то момент. Конечно этим займется Supervisor. Но волнует то что если сервис упал на обработке сообщения, то оно как правило пропадает из mailbox и сервис дальше обрабатывает следующее. В идеальной ситуации стоит записать куда-то что на таком то сообщении сервис упал, попробовать еще 3 раза и если все плохо, взять следующее. Если идти Erlang-way то тут мы можем использовать вместо MQ свою реализацию на ETS/DETS ? или Mnesia ? Или это все параноя и MQ в этой архитектуре не лишний ?
Перекладывать из очереди в очередь... MQ не очень про это, как мне кажется. Для подобных вещей лично я взял бы http://storm.apache.org/ . А bolt для шторма с нужной логикой написал бы на Clojure.

Там есть гарантированная доставка, и throughput просто охеренный.

abc
27.01.2017
08:48:37
у нас не настролько там все биг-биг чтобы штормы с джавами туда тащить. ну правда) MQ хорошо для общения между микросервисами. изначально так и планировалось, пока не решили что Elixir будет достаточно для всего

Vladimir
27.01.2017
08:48:50
акей)

abc
27.01.2017
08:49:38
там выбор то был небольшой: NodeJS or Python/AsyncIO or Elixir/OTP

Vladimir
27.01.2017
08:49:44
шторму джава не нужна ни разу. шторм сам по себе на Clojure написан)

ааа, ну тогда без вариантов. Всё лучше нодыджээс.

Rumata
27.01.2017
08:50:44
Дык что с докером

abc
27.01.2017
08:50:46
ну Clojure то ранается на JVM же

Rumata
27.01.2017
08:50:51
Если отп не подходит

Что тогда делать и как ?

Google
Vladimir
27.01.2017
08:51:01
JVM, но не Java.

abc
27.01.2017
08:51:13
точнее тогда JRE но не JDK )

Vladimir
27.01.2017
08:51:34
ну JDK это JRE + библиотечки.

я к тому, что Clojure на JVM себя ведёт намного приятнее, чем Java.

abc
27.01.2017
08:52:05
а в JRE разве есть javac ?

Vladimir
27.01.2017
08:52:30
емнип нет.

я утрирую)

не хочу перечислять, что есть в JDK, но нет в JRE

abc
27.01.2017
08:53:06
а по поводу докера, запустить можно конечно

Admin
ERROR: S client not available

abc
27.01.2017
08:53:16
у меня пока оно в дебаг режиме крутится

Rumata
27.01.2017
08:53:28
Ну что тогда

Если не доуер

abc
27.01.2017
08:53:41
+ примитивный service discovery через consul + registrator

если не докер то голый сервак, очевидно же

хероку вроде OTP не научился ранать, хотя и врядли будет

Vladimir
27.01.2017
08:55:10
если не докер, то да, голое приложение. собирать релиз и запускать.

abc
27.01.2017
08:55:19
мне с докером еще не совсем понятно как там с эрланговскими нодами быть. вот захотел я ноду подцепить, поднял контейнер еще один, первому сообщил его адресок. все ли будет так гладко. не тестил

Vladimir
27.01.2017
08:55:55
с epmd могут быть проблемы теоретически)

abc
27.01.2017
08:56:11
ну и не стоит забывать что докер накладывает небольшое лэтенси на сеть. на WebRTC это было очень заметно)

Google
Vladimir
27.01.2017
08:56:55
А вот это хорошее замечание, про WebRTC

запишу щас в книжечку

Alexander
27.01.2017
08:57:17
почитал про storm - неплохо, думаю надо попробовать

abc
27.01.2017
08:57:28
ну это у нас coturn в контейнере бежал и без него

это для TURN/STUN

Vladimir
27.01.2017
08:58:06
я понял. :)

abc
27.01.2017
08:58:32
в итоге поставили пару голых серверов чисто с coturn и вроде окей

Vladimir
27.01.2017
08:58:57
просто если у нас надумают поднимать турн-сервера в докерах, надо будет их поотговаривать

у нас турн-серверов будет сильно больше.

abc
27.01.2017
08:59:26
ну это было кстати в 2016) может сейчас в докере сетка быстрее стала я не знаю. надо тестить

выгоднее просто через тот же АПИ того же digital ocean поднимать новые TURN сервера голые по требованию и сообщать айпи клиентам.

Vladimir
27.01.2017
09:03:30
почитал про storm - неплохо, думаю надо попробовать
Шторм хорош как раз на числогрызках, вычислительных задачах, для которых на Эрланге пришлось бы поднимать map-reduce, типа старого discoproject.org, и думать как быстро делать вычисления, на каком языке. А Storm - all-in-1.

Clojure охеренный язык как раз для потоковой обработки данных, в т.ч. вычислений.

Связки Erlang+Clojure как правило более чем достаточно для всех задач.

Vladimir
27.01.2017
09:07:06
Там много чего, да. А иммутабельность самым положительным образом влияет на работу JVM GC, кардинально уменьшая кол-во сборок мусора per time.

anton
27.01.2017
09:18:40
в шторме кложи кот наплакал

емнип вся кложа что там есть, это только ради дсл

Vladimir
27.01.2017
09:19:55
переписали, что-ли... раньше больше было.

Страница 299 из 1045