Связь внутри кластеров Erlang

В Erlang кластер подключенных машин имеет некоторые мягкие ограничения на то, сколько машин вы можете иметь, не страдая от отправки слишком большого количества сообщений для правильной работы протокола сплетен.

В этом вопросе есть похожие утверждения. Я также видел некоторые тесты Riak, работающие нормально с 200 узлами (не могу найти ссылку, но я думаю, что это был тест Basho).

Я понимаю, что кластер узлов из 200 Erlang способен выдерживать ДЕЙСТВИТЕЛЬНО большие нагрузки. Меня просто интересуют альтернативы, станет ли этот предел узким местом.

Кажется, что ответ на более крупный масштаб (который был бы огромным) состоит в том, чтобы изолировать вашу систему в меньших изолированных кластерах, что очень похоже на подход с использованием микросервисов.

У меня вопрос: какой способ общения рекомендуется использовать?

Я не хочу создавать службу REST из-за ненужного веса маршлинга / демаршилинга JSON, рукопожатий HTTPS и других операций, связанных с протоколом (балансировщики нагрузки и т. Д.).

BERT-RPC казался наиболее подходящим, но его разработка кажется устаревшей. NkCluster, похоже, реализовал нечто подобное, но есть ли способ сделать это с помощью Erlang / Elixir / Joxa / LFE ?


person Olinasc    schedule 01.10.2015    source источник
comment
Это интересный вопрос, но я подозреваю, что стандартной практики нет, потому что любая проблема, работающая в таком масштабе, была бы настолько уникальной, что потребовала бы собственной специальной разработки.   -  person Fred the Magic Wonder Dog    schedule 01.10.2015


Ответы (1)


Возможно, вам нужно установить узлы как hidden (http://www.erlang.org/doc/reference_manual/distributed.html#id87289), если вы пытаетесь иметь большое количество подключенных узлов, которые могут связываться друг с другом через явные соединения, но не хотите, чтобы они были видны в противном случае из-за распространения.

Это позволяет узлам подключаться, но не распространяться по протоколу сплетен, поэтому узел A знает о подключенном скрытом узле nodeB, но nodeA не сообщает nodeC о nodeB, когда они обмениваются информацией о топологии сети.

person Proctor    schedule 06.10.2015
comment
Таким образом, вы предлагаете создать один большой кластер, верно? Внутренний кластер не поможет со скрытыми узлами, или я не вижу, как соединить их вместе с высокой доступностью и масштабируемостью. - person Olinasc; 07.10.2015