Какие проекты являются хорошими примерами простого масштабирования веб-серверов erlang на несколько машин

Существуют ли какие-либо проекты с открытым исходным кодом или учебные пособия, которые являются примерами наилучшей практики при масштабировании erlang-проектов на несколько узлов?

Например, я хочу изучить проект, в котором я запускаю сервер на одном компьютере, и я могу масштабировать веб-приложение, просто подключив больше узлов и используя net_adm:ping для подключения других компьютеров. Как можно ближе к этому. Я знаю, что книга Мэннинга Эрланга немного исследует эту тему.

1 ответ

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

Механизмы, которые предоставляет Erlang, следующие:

Известные проекты, которые используют инструменты и механизмы Erlang/OTP, чтобы сделать их продукт масштабируемым, - это Riak, RabbitMQ, Ejabberd, CouchDB и некоторые другие. Давайте поговорим о Riak и RabbitMQ.

Riak:

Riak за высокую доступность базы данных NoSQL была реализована на основе Amazon Dynamo Paper, которая представляет собой кластер узлов в кольцевой топологии. Узлы для того, чтобы быть терпимыми к разделу, доступными и в конечном итоге согласованными, используют стиль репликации и разделения, и это требует большого количества межузлового взаимодействия. Riak использует механизм распределения Erlang для большинства межузловых коммуникаций по протоколу сплетен. Riak использует Erlang Port Mapper Daemon для преобразования идентификаторов узлов в порт TCP на данном компьютере.

RabbitMQ

RabbitMQ - это брокер сообщений, который для обеспечения надежности сообщений и масштабирования нагрузки и пропускной способности использует репликацию. Таким образом, очереди могут быть зеркально отражены на нескольких узлах. Каждая зеркальная очередь состоит из одного главного и одного или нескольких подчиненных. RabbitMQ использует инструменты и механизмы распространения, которые предоставляет Erlang/OTP, например, он хранит сообщения в Mnesia и использует его функции для репликации данных.


Если вы ищете простое руководство по использованию базового механизма распределения Erlang, я предлагаю использовать этот пинг-понг между двумя узлами.

Другие вопросы по тегам