Здравствуйте, so5team, Вы писали:
S>Допустим, приходит (N+1) клиент, дергается реализованная в NIF-е функция, там вызывается nif_alloc_resource и оказывается, что очередные 128 байт для этого клиента выделить не удается. Вместо того, чтобы вернуть NULL из nif_alloc_resource и какой-нибудь тупл {err,code} из NIF-функции, дабы потом в Erlang-овом коде просто убить созданный для (N+1) клиента процесс, грохают всю VM.
Возможно, мне сложно выйти за рамки собственного опыта, но я не вижу смысла в этом искусственном жизнеобеспечении. Проблему надо решать значительно раньше — через лимиты и балансировку нагрузки, а не ждать пока VM сожрет весь своп и начнет непредсказуемо срубать приложение по частям (при описанном выше предложении).
Решение завершать работу виртуальной машины — осознанное, а не потому что по другому не смогли.
_>>А на практике, если вы не забыли про erlang:system_monitor а vm упала с out of memory,
S>На практике Erlang хорошо тормозит и падает даже у тех, кто знает про system_monitor.
Во-первых, в описанном случае как помогло бы не срубать vm при out of memory? Отложило бы падение еще на секунду?
Во-вторых, system_monitor и лимиты (на число запросов в одной сессии — см. комментарии) в этом случае должны были помочь (но их не было), так что падение можно было предотвратить. Да, клиент бы свой плейлист не получил, но и только.
S>Собственно, об этом и было сказано по ветке выше: как только из-за родных тормозов Erlang-а в приложении оказывается достаточное количество кода, достоинства Erlang-а испаряются и Erlang превращается в такой же клеевой динамически-типизированный язык, как Python/Ruby/Lua и еще куча других.
Спору нет, Эрланг язык нишевый, но ниша эта широка. Нативный код — это математика, обработка текста, большие мутабельные массивы данных, интеграция с нативным api. Для кого-то это много, для кого-то небольшой процент от задачи. Использовать Эрланг как клеевый язык смысла, конечно, нет. (Я не спорю — соглашаюсь).
S>Так что, если кого-то устраивает Erlang, то почему просто не использовать его и не делится success stories?
Мы пишем игровые сервера на Эрланге, приходилось интегрировать bullet3d (порядка 500 динамических миров на сервер, шедулер справляется), box2d, самописные тайловые и воксельные движки, но это 5-10% задач, большая часть времени все равно уходит на игровую логику, так что достоинствами Эрланга наслаждаемся в полный рост. (Под достоинствами Эрланга я имею в виду скорее архитектурную модель и волшебную вм, сам язык слишком уж консервативен, но иммутабельность и возможности метапрограммирования — две особенно важные для нас фичи, которые позволяют с этим мириться).