Erlang кластеры

Я пытаюсь реализовать кластер, используя Эрланга в качестве клея, который держит все это вместе. Мне нравится идея, что он создает полностью связанный граф узлов, но при чтении различных статей в Интернете кажется, что это не так.t хорошо масштабируется (максимум 50 - 100 узлов). Разработчики OTP наложили это ограничение нарочно? Я знаю, что вы можете настроить узлы, чтобы иметь только явные соединения, а также иметь скрытые узлы и т. Д. Но, похоже, стандартная установка по умолчанию не являетсят очень масштабируемый.

Итак, к вопросам:

Если у вас было 5 узлов (A, B, C, D, E), то у всех были явные соединения, такие как A-B-C-D-E. Позволяет ли Erlang / OTP A напрямую говорить с E, или A должен передавать сообщения от B до D, чтобы добраться до E, и, таким образом, 'причина полностью связного графа? Опять же, это имеет смысл, но это не такхорошо масштабируется от того, что явидел.

Если вы хотите попробовать масштабируемую и отказоустойчивую систему, каковы ваши варианты? Кажется, будто ты можешьt создать полностью связанный граф, потому что у вас слишком много узлов, следующая лучшая вещь - это создать какое-то дерево. Но это неЭто кажется очень отказоустойчивым, потому что, если умирает корень или любой родительский узел дочерних узлов, вы потеряете значительную часть вашего кластера.

Рассматривая руководителей и работников, все примеры, которые яВидно, применить это к процессам на одном узле. Может ли он применяться к кластеру узлов, чтобы помочь реализовать отказоустойчивость?

Могут ли узлы быть частью нескольких кластеров?

Спасибо за вашу помощь, если есть недавний веб-сайт или блог (примерно 1 год), который яя пропустил, яЯ был бы счастлив посмотреть на них. Но я'Я очень хорошо изучил интернет.

 Tilman03 нояб. 2012 г., 22:03
Вы смотрели в CloudI:cloudi.org
 Tilman03 нояб. 2012 г., 22:00
Связанный вопрос:stackoverflow.com/questions/5044574/…?

Ответы на вопрос(5)

Уже есть несколько хороших ответов, поэтому яЯ пытаюсь быть простым.

1) нет, еслиA а такжеE не связаны напрямую,A не могу говорить сE, Протокол распространения работает по прямому TCP-соединению - маршрутизация не включена.

2) Я думаю, что древовидная структура достаточно хороша - компромиссы всегда существуют.

3) Естьнет нетсупервизор для узлов, ноerlang:monitor_node твой друг.

4) Да. Узел может общаться с узлами из разныхкластеры, В локальном узле используйтеerlang:set_cookie(OtherNode, OtherCookie) получить доступ к удаленному узлу с другим файлом cookie.

Решение Вопроса

Да, вы можете отправлять сообщения процессу на любом удаленном узле в кластере, например, используя его идентификатор процесса (pid). Это называется прозрачностью местоположения. И да, он хорошо масштабируется (см. Riak, CouchDB, RabbitMQ и т. Д.).

Обратите внимание, что один узел может выполнять сотни тысяч процессов. Erlang оказался очень масштабируемым и создан для отказоустойчивости. Есть и другие подходы, чтобы построить больше, например, SOA-подход CloudI (см. Комментарии). Вы также можете создавать кластеры, которые используютскрытые узлы если ты действительнодействительно нужно.

На уровне узлов вы бы выбрали другой подход, например, создать идентичные узлы, которые легко заменить, если они выйдут из строя и работа будет перенята оставшимися узлами. Посмотрите, как Риак справляется с этим (посмотрите наriak_core и проверьте сообщение в блогеПредставляем Riak Core).

Узлы могут выходить и входить в кластер, но не могут быть частью нескольких кластеров одновременно. Подключенные узлы совместно используют один файл cookie кластера, который используется для идентификации подключенных узлов. Вы можете установить cookie во время работы виртуальной машины (см.Распределенный Эрланг).

Читатьhttp://learnyousomeerlang.com/ для большего блага.

 Tilman04 нояб. 2012 г., 20:16
Почему понизить? Прокомментируйте, пожалуйста.

Протокол распространения обеспечивает надежность, а не масштабируемость. Что вы хотите сделать, это сгруппировать кластер в более мелкие области, а затем использовать соединения, которые не распространяются в Erlang, а, скажем, в сеансах TCP. Вы можете запустить 5 групп по 10 машин в каждой. Это означает, что 10 машин имеют равномерное распределение Pid: вы можете вызвать pid на другом компьютере. Но распространение в другой группе означает, что вы можететак легко обращаться к группе.

Ты вообще хочешь какой нибудьотражение маршрута " как в BGP.

1) да. они разговаривают друг с другом

2) 3) и 4) Вообще говоря, при построении масштабируемой и отказоустойчивой системы вы захотите или, более того, должны разделить рабочую нагрузку на разные ».регионы» или же "кластеры», В модели супервизор / работник предусмотрена топология. Что вам нужно, так это несколько процессов, координирующих работу между кластерами, и все работники в одном кластере будут общаться друг с другом, чтобы сбалансировать внутри группы.

Как вы можете видеть, с этой топологиейограничение» на самом деле это не ограничение, если вы аккуратно и сбалансировано делите свои задачи. Лично я считаю, что древовидную структуру для процессов супервизора нельзя избежать в крупномасштабных системах, и это практика, которую я делаю ».м следую. Причины могут быть разными, но они сводятся к масштабируемости, отказоустойчивости по мере реализации политики возврата, необходимости обслуживания и переносимости кластеров.

Итак, в заключение,

2) используйте древовидную топологию для своих руководителей. пусть работники открыто соединяются друг с другом и общаются в рамках своего домена с руководителями.

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

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

1) Я думаю, что вам нужно прямое соединение между узлами для связи между процессами. Это, однако, означает, что вы нене нужны постоянные соединения между всеми узлами, если два никогда не будут общаться (скажем, если онитолько рабочие, а не координаторы).

2) Вы можете создать не полностью связанный граф узлов эрланга. Документацию сложно найти, и она сопровождается проблемами - вы отключаетеglobal система, которая обрабатывает глобальные имена в кластере, поэтому вы должны делать все с помощью локально зарегистрированных имен или локально зарегистрированных имен на удаленных узлах. Или просто используйте Pids, так как они тоже работают. Чтобы запустить узел erlang, как это, используйтеerl ... -connect_all false ..., Я надеюсь, ты знаешь, что тыдо, как я не могне доверяю себе, чтобы сделать это.

Оказывается также, что не полностью связный граф узлов Эрланга является актуальной темой исследований.РЕЛИЗ ПРОЕКТ в настоящее время работает именно над этим, и придумал концепцию S-групп, которые по сути являются полностью связными группами. Однако узлы могут быть членами более чем одной S-группы, а узлы в отдельных s-группах неОн должен быть полностью подключен, но может устанавливать соединения, которые им необходимы по требованию для прямой связи между узлами. Это'Стоит найти их презентации, потому что исследование действительно интересно.

Стоит отметить, что несколько человек обнаружили, что в полностью подключенном кластере можно получить до 150-200 узлов. У вас действительно есть вариант использования для большего количества узлов? Несомненно, 150-200 невероятно мощных компьютеров будут делать большинство вещей, которые вы можете на них бросить, если у вас нет нелепого проекта.

3) Пока можешьзапускать процессы на другом узле, используяgen_server:start_link/3,4Вы, конечно, можете очень легко вызывать серверы на чужом узле. Кажется, онимы упустили возможность запуска серверов на сторонних узлах, ноВероятно, на то есть веские причины, такие как нелепое количество ошибок.

4) Попробуйте посмотреть на скрытые узлы и не полностью подключенный кластер. Они должны позволять вам группировать узлы по своему усмотрению.

TL; DR: масштабировать сложно, пустьс покупками.

Ваш ответ на вопрос