Size: a a a

2019 December 17

VP

Vladimir Potapev in pro.elixir
Źmićer Rubinštejn
Я ж говорю - интернет это монолит эрланга
BTW Десятое правило Гринспена гласит: "Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang."
источник

VS

Vladimir Sekisov in pro.elixir
V
А бездисковые ноды можно поднимать?
можно, для этого даже tftp
присутствует в OTP
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Źmićer Rubinštejn
Ну тык магии нету, естественно. Если в микросервисах у тебя не обновился ДНС - тоже получишь server not responding
Правда в логгере например, у тебя ничего не упадет, просто потеряется сообщение
источник

ŹR

Źmićer Rubinštejn in pro.elixir
iex(1)> a = spawn fn -> :ok end
#PID<0.106.0>
iex(2)> GenServer.cast(a, "test")
:ok
iex(3)> a
#PID<0.106.0>
iex(4)> Process.alive?(a)
false
источник

V

V in pro.elixir
Vladimir Potapev
BTW Десятое правило Гринспена гласит: "Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang."
Это одиннадцатое. Десятое - про Common Lisp.
источник

VP

Vladimir Potapev in pro.elixir
Yuri S.
я думаю, что пока человек сам не окунется в мир эрланга и его экосистему, можно бесконечно спорить
после ruby и rails, elixir с phoenix позволяет избавиться от кучи зависимостей в виде benastalkd и memcached, позволяет хранить состояния и быстро их получать, многопоточность из коробки, использует все ядра из коробки, все в одном приложении, не надо запускать 50 сервисов, релизы, не содержащие исходный код, возможность обновить код и при этом у пользователей не разорвутся коннекты с вебсокетами
Это объясняют каждый раз разными словами, когда сюда заходит новый человек, который просит других убедить его в том, что ему нужно учить Erlang/Elixir. Уже сотню раз такое наблюдаю, наверное.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А вот если хочешь получить ответ - то да, будешь страдать. Но скорее всего ты просто сам упадешь вслед
iex(5)> GenServer.call(a, "test")
** (exit) exited in: GenServer.call(#PID<0.106.0>, "test", 5000)
   ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
   (elixir) lib/gen_server.ex:1009: GenServer.call/3
источник

VS

Vladimir Sekisov in pro.elixir
Логичный Лесник
Но в целом подход супервихоров, как способ обработки падения кажется неплохим, но тут прикол в том, что другие части приложения могут не узнать о падении и о том, что чё-то под супервизором рестартануло.
стандартное поведение:
- им пофиг
- они обращаются к упавшим
 процессам, тоже падают
 и так супервизорами перезапускается все дерево
зависимых сервисов
источник

V

V in pro.elixir
Źmićer Rubinštejn
Тогда получишь exception в лицо
И как быть в таких ситуациях?
источник

ЛЛ

Логичный Лесник in pro.elixir
Źmićer Rubinštejn
А вот если хочешь получить ответ - то да, будешь страдать. Но скорее всего ты просто сам упадешь вслед
iex(5)> GenServer.call(a, "test")
** (exit) exited in: GenServer.call(#PID<0.106.0>, "test", 5000)
   ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
   (elixir) lib/gen_server.ex:1009: GenServer.call/3
Ну ведь тогда всё так или иначе будет сводиться к рестарту более значительной части приложения.
источник

AP

Andrey Pavlov in pro.elixir
Логичный Лесник
Но в целом подход супервихоров, как способ обработки падения кажется неплохим, но тут прикол в том, что другие части приложения могут не узнать о падении и о том, что чё-то под супервизором рестартануло.
Именно поэтому супервизоры не только инструмент для рестарта, но и механизм для выстраивания зависимостей между компонентами
источник

V

V in pro.elixir
Имею ввиду, как быть с риском неконсистентных данных? В руби если упал один объект - падает всё приложение, это тупой но надёжный способ обеспечить целостность данных. А в эрланге процессы продолжают работать, и может быть дата коррапшн в базе, не?
источник

ЛЛ

Логичный Лесник in pro.elixir
Vladimir Potapev
Это объясняют каждый раз разными словами, когда сюда заходит новый человек, который просит других убедить его в том, что ему нужно учить Erlang/Elixir. Уже сотню раз такое наблюдаю, наверное.
Ну так любой технологии не помешает критика и переосмысления. Я не говорю, что Го - идеальные языки, там минусов точно не меньше, чем в эликсире/эрланге. Просто я понимаю, зачем мне нужен Го и в каких задачах он хорош.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
V
Имею ввиду, как быть с риском неконсистентных данных? В руби если упал один объект - падает всё приложение, это тупой но надёжный способ обеспечить целостность данных. А в эрланге процессы продолжают работать, и может быть дата коррапшн в базе, не?
Ну а микросервисной архитектури если один из микросервисов не доступен, у тебя есть некониситентность данных?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Почему две одинаковые вещи не могут сложиться в одну картинку - я понять не могу...
источник

VS

Vladimir Sekisov in pro.elixir
V
Имею ввиду, как быть с риском неконсистентных данных? В руби если упал один объект - падает всё приложение, это тупой но надёжный способ обеспечить целостность данных. А в эрланге процессы продолжают работать, и может быть дата коррапшн в базе, не?
храните критические данные в mnesia или ets,
привяжите ets к контроллеру
application, если он все же грохнется, то грохнется и нода
источник

V

V in pro.elixir
Źmićer Rubinštejn
Ну а микросервисной архитектури если один из микросервисов не доступен, у тебя есть некониситентность данных?
Речь про внутри микросервиса.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Вот я и говорю - не складывается картинка
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я ща нарисую
источник

ŹR

Źmićer Rubinštejn in pro.elixir
источник