Коллеги, хочу начать обсуждение темы Distributed Erlang.
Скажу честно, что пока не сильно изучал вопрос. И хочу этой темой получить быстрый обзор, собрать мнение людей, возможные ссылки на дополнительную информацию по теме.
И так, с одной стороны все знаю, что Erlang имеет встроенную возможность построения распределенных решений.
И в теории все выглядит красиво и гладко: прозрачная адресация процессов между узлами Erlang VM, развитый набор rpc, линковка и мониторинг удаленных процессов и т.д.
Но на практике мы имеем следующие:
* Не рекомендуется сильно использовать для приложений кластерный интерконнект - лучше через внешние сокеты нагрузку пускать;
* В случае большой загруженности интерконнета, могут происходить потери hartbeat пакетов, что приводит к потере узлов в кластере;
* Ограничение масштабируемости и производительности канала между узлами Erlang (одно TCP/IP соединение);
* Отсутствие резервирования путей (ну кроме, как bonding или аналогичное);
* У меня есть ощущение, что сама сущность TCP/IP не очень подходит для обмена асинхронными сообщениями, особенно когда есть несколько разных типов сообщений (служебные heartbeat-ы, и данные приложения);
В общем, тут напрашиваются альтернативы текущей схеме соединения, основанной на TCP/IP.
Которые позволят решить текущие проблемы и привнесет еще что-то (уменьшение латентности и т.п.).
Хочется использовать встроенные распределенные механизмы Erlang/OTP без оглядки на проблемы, описанные выше.
Вот например есть технология TICP (
http://tipc.sourceforge.net), вышла, кстати из недр Ericsson. Очень логично она смотрится в качестве альтернативы TCP/IP.
В общем, есть кому чего сказать по этому поводу? Может кто знает, ведутся ли где-либо работы в данном направлении?
Или, на самом деле, этот Distributed Erlang никому особо и не нужен? И это только еще одна маркетинговая фишка Erlang/OTP?