Erlang Distribution - проблемы и альтернативные варианты

305 views
Skip to first unread message

Alexey Larin

unread,
Feb 28, 2013, 2:27:19 PM2/28/13
to erlang-...@googlegroups.com
Коллеги, хочу начать обсуждение темы 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?
   

Danil A. Zagoskin

unread,
Feb 28, 2013, 3:13:16 PM2/28/13
to erlang-...@googlegroups.com
Можно упомянуть, что beam умеет распределенность не только через TCP, но и через SCTP, который, благодаря канально-датаграммному устройству выглядит более подходящим транспортом.
Кроме того, для интерконнекта модные чуваки используют MPI.
А еще этот MPI, в частности, натягивается на Infiniband.

В итоге мое мнение таково: когда до эрланга доберутся особо серьезные корпорации, то они смогут прикрутить для интерконнекта MPI, что (в случае опенсорца) даст очень интересные возможности по применению Infiniband-сетей без низкоуровневого геморроя. Но ждать этого еще лет 5..10, а то и все 30 (зависит от того, как скоро лопнут от жадности и мнимой незаменимости энтерпрайзные программисты на плюсах и яве).
А пока использованию SCTP by default мешает, видимо, кроссплатформенность beam.


28 февраля 2013 г., 23:27 пользователь Alexey Larin <po4t...@pisem.net> написал:
--
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Новости: http://erlanger.ru
Чат: xmpp://erl...@conference.jabber.ru
Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
Правила, действующие в чате и рассылке: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
 
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
 
 

Alexey Larin

unread,
Feb 28, 2013, 3:30:11 PM2/28/13
to erlang-...@googlegroups.com, da...@st-olen.ru
Хм. Ничего подобного не попадалось.
Точнее были стары обсуждения о преимуществах SCTP перед TCP для этих целей.
Где можно посмотреть о настройке респределенности через SCTP?

Maxim Sokhatsky

unread,
Feb 28, 2013, 3:39:11 PM2/28/13
to erlang-...@googlegroups.com

controlling_process(Socket, Pid)


Date: Thu, 28 Feb 2013 12:30:11 -0800
From: po4t...@pisem.net
To: erlang-...@googlegroups.com
CC: da...@st-olen.ru
Subject: Re: Erlang Distribution - проблемы и альтернативные варианты

Alexey Larin

unread,
Feb 28, 2013, 3:45:40 PM2/28/13
to erlang-...@googlegroups.com
Ммм?
Что это значит? Про gen_sctp я в курсе и он вполне используется у нас в одном проекте. Но причем тут Erlang Distribution carrier?
И почему выделил именно controlling_process? 

Maxim Sokhatsky

unread,
Feb 28, 2013, 3:54:35 PM2/28/13
to erlang-...@googlegroups.com
Ну так это все что доступно, какие еще варианты ?
Надо свой EPMD писать, существующий только через TCP работает.

Макс Трескин, когда твой EPMD реплейсмент будет поддерживать SCTP ? :-)


Date: Thu, 28 Feb 2013 12:45:40 -0800
From: po4t...@pisem.net
To: erlang-...@googlegroups.com

Maxim Sokhatsky

unread,
Feb 28, 2013, 4:02:41 PM2/28/13
to erlang-...@googlegroups.com
В приниципе там не много, в erl_epmd.erl поменять
gen_tcp:send на get_sctp:send да и попытаться взлететь :)
Вон Макс за ночь EPMD написал на Го.


From: ma...@synrc.com
To: erlang-...@googlegroups.com
Subject: RE: Erlang Distribution - проблемы и альтернативные варианты
Date: Thu, 28 Feb 2013 22:54:35 +0200

Danil A. Zagoskin

unread,
Feb 28, 2013, 4:03:49 PM2/28/13
to erlang-...@googlegroups.com
Я попутал что-то. Нет дистрибуции через SCTP. Зато есть документ http://www.erlang.org/doc/apps/erts/alt_dist.html и несколько протоколов в коробке.
Так что если у кого руки чешутся, это полезный способ их испачкать, мне кажется.



1 марта 2013 г., 0:30 пользователь Alexey Larin <po4t...@pisem.net> написал:

Maxim Sokhatsky

unread,
Feb 28, 2013, 4:12:07 PM2/28/13
to erlang-...@googlegroups.com
Еще проще net_kernel:

protocol_childspecs() ->
    case init:get_argument(proto_dist) of
{ok, [Protos]} ->
   protocol_childspecs(Protos);
_ ->
   protocol_childspecs(["inet_tcp"]) % <- "inet_sctp" :-)
    end.



From: da...@st-olen.ru
Date: Fri, 1 Mar 2013 01:03:49 +0400

Subject: Re: Erlang Distribution - проблемы и альтернативные варианты

Danil A. Zagoskin

unread,
Feb 28, 2013, 4:54:36 PM2/28/13
to erlang-...@googlegroups.com
Да, я оттуда и узнал про эту возможность. Смотрите на protocol_childspecs/1 (она следующая), из нее явно видно, что ищется модуль Proto++"_dist".
При этом в стандартной поставке на _dist заканчиваются только inet_{tcp,tcp6,tls,uds}_dist.erl, причем uds лежит в examples.
Так что нет, для дистрибуции по SCTP таки надо написать много кода на сях, потому что there has to be an Erlang driver.


1 марта 2013 г., 1:12 пользователь Maxim Sokhatsky <ma...@synrc.com> написал:

Maxim Sokhatsky

unread,
Feb 28, 2013, 9:02:59 PM2/28/13
to erlang-...@googlegroups.com
Как включить SCTP для интерконнекта

Там уже есть inet_tcp, inet_tcp_dist. 
Так что я не зачем писать С, если у меня уже есть inet_sctp и
мне нужно написать всего лишь inet_sctp_dist. Поподробнее:

inet_tcp_dist/inet6_tcp_dist работают черезе inet, который
в свою очередь работает через prim_inet, которые уже подготовлен и
вкурсе того что бывают sctp сокеты эрланговые. Из prim_inet.erl:

protocol2drv(tcp)  -> "tcp_inet";
protocol2drv(udp)  -> "udp_inet";
protocol2drv(sctp) -> "sctp_inet".

сам inet.erl работает с этими модулями как с портами, даже у него есть

tcp_controlling_process(S, NewOwner) ->
udp_controlling_process(S, NewOwner) ->

Нехватает только sctp_controlling_process, но я так понимаю, что пофиг,
можно использовать udp_controlling_procees, потому что в gen_sctp можно встретить такой код:

controlling_process(S, Pid) when is_port(S), is_pid(Pid) ->
    inet:udp_controlling_process(S, Pid);

Все эти драйвера из prim_inet действительно идут в С код,
но этот С код уже написан inet_drv.c:

    add_driver_entry(&tcp_inet_driver_entry);
    add_driver_entry(&udp_inet_driver_entry);
    add_driver_entry(&sctp_inet_driver_entry);

Все, что остается, это написать inet_sctp_dist, включить при сборке 
эрланга HAVE_SCTP для inet_drv.c и вперед.

Для тех, кто занимался SCTP на практике, работы на ночь.


From: da...@st-olen.ru
Date: Fri, 1 Mar 2013 01:54:36 +0400

Evgeniy Khramtsov

unread,
Mar 1, 2013, 8:08:04 AM3/1/13
to erlang-...@googlegroups.com
Это не совсем так. Я пробовал, там куча ещё разных граблей вылазит. За пару дней не осилил и забил. Особенно вымораживало разруливание всяких мутексов и спинлоков.
-- 
Regards,
Evgeniy Khramtsov, ProcessOne.
xmpp:xr...@jabber.ru.

Maxim Sokhatsky

unread,
Mar 1, 2013, 8:10:45 AM3/1/13
to erlang-...@googlegroups.com
О каких мютексах и спинлоках идет речь, если в репозитории
уже лежит драйвера на С от Эриксона ?

Если мютексы и спинлоки проблема, тогда вообще
лучше ничего на С для эрланга не писать :-)


Date: Fri, 1 Mar 2013 23:08:04 +1000
From: xram...@gmail.com
To: erlang-...@googlegroups.com

Subject: Re: Erlang Distribution - проблемы и альтернативные варианты

Evgeniy Khramtsov

unread,
Mar 1, 2013, 8:14:32 AM3/1/13
to erlang-...@googlegroups.com
On 01.03.2013 23:10, Maxim Sokhatsky wrote:
О каких мютексах и спинлоках идет речь, если в репозитории
уже лежит драйвера на С от Эриксона ?

Если мютексы и спинлоки проблема, тогда вообще
лучше ничего на С для эрланга не писать :-)


Мне нравится этот лист. Все очень крутые прогеры.

Alex Scherbanov

unread,
Feb 28, 2013, 3:00:05 PM2/28/13
to erlang-...@googlegroups.com

On Feb 28, 2013, at 11:27 PM, Alexey Larin wrote:

> Коллеги, хочу начать обсуждение темы Distributed Erlang.
> Скажу честно, что пока не сильно изучал вопрос. И хочу этой темой получить быстрый обзор, собрать мнение людей, возможные ссылки на дополнительную информацию по теме.

Статья в тему
http://erlanger.ru/ru/page/2548/erlang-is-not-a-concurrent-functional-programming-language

Alexander Tchitchigin

unread,
Mar 1, 2013, 9:03:45 AM3/1/13
to erlang-...@googlegroups.com
Да Максим вообще очень крутой прогер, и в ЖЖ, например, тоже. :)


Disclaimer: Я на самом деле считаю Максима крутым прогером и не
пытаюсь его задеть. Да и никого вообще не пытаюсь. :)

2013/3/1 Evgeniy Khramtsov <xram...@gmail.com>:
> --
> --
> Страница рассылки: http://groups.google.com/group/erlang-russian
> Новости: http://erlanger.ru
> Чат: xmpp://erl...@conference.jabber.ru
> Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
> Правила, действующие в чате и рассылке:
> http://erlanger.ru/ru/erlang-at-conference-jabber-ru
>
> Написать письмо: erlang-...@googlegroups.com
> Отписаться: erlang-russia...@googlegroups.com
> ---
> Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее
> сообщения, отправьте электронное письмо на адрес
> erlang-russia...@googlegroups.com.
> Подробнее о функциях можно узнать на странице
> https://groups.google.com/groups/opt_out.
>
>



--
С уважением,
Александр.

Dmitrii Dimandt

unread,
Mar 1, 2013, 10:49:58 AM3/1/13
to erlang-...@googlegroups.com
Это, кстати, так и есть. В частности, среди пунктов, которые нужно реализовать, чтобы реализовать Erlang, Вирдинг называет толпу вещей, вязанных именно с обработкой ошибок и т.п. Жалко, эта презентация, имхо, не в открытом доступе. Конкурентность там, имхо, просто следствие :)

Alexey Larin

unread,
Mar 2, 2013, 9:37:59 AM3/2/13
to erlang-...@googlegroups.com
Коллеги,
Перечитал еще раз эту ссылку, пару раз перечитал ваш, Дмитрий, комментарий, и немного не понял, к чему это? И как это соотносится/отменяет ту тему, о которую я попытался поднять.

Dmitrii Dimandt

unread,
Mar 2, 2013, 10:42:06 AM3/2/13
to erlang-...@googlegroups.com
Это просто типа ремарок в сторону :)
Reply all
Reply to author
Forward
0 new messages