Вебмашина на разных машинах

У меня есть сервер API REST webmachine, работающий на одной машине. в ожидании большего количества трафика, который эта машина не может обработать, мне нужно было бы расширить на другие узлы на других процессорах. Есть ли способ настроить это?

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

1 ответ

Решение

Это зависит от вашего варианта использования. Лучшим способом было бы наблюдать, где вы испытываете проблемы, и реагировать соответственно.

Вы можете рассматривать ваше приложение как три отдельных части. Первый - это интерфейс REST, второй - бизнес-логика (чуть позже), а третий - сами данные (ресурсы, давайте назовем их хранилищем данных, но это может быть просто еще один сервис).

Данные

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

Интерфейс

Если ваш сервер просто не может обработать достаточное количество запросов, просто поместите еще один рядом с ним. Вы можете направить запрос на отправку запроса обоим термам, и так как они будут использовать одно и то же хранилище данных, они останутся в "синхронизации".

REST, основанный на http, предполагает связь без сохранения состояния. Это означает, что любые два запроса (от одного пользователя или от двух разных) не разделяют ресурсы и могут обрабатываться различными приложениями (вам также не нужно ничего делить между экземплярами Webmachine).

Доменная логика

Теоретически у вас не должно быть ничего этого на вашем REST API-сервере, но все же давайте немного обсудим это.

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

Обходным путем было бы отделить REST от такой логики. Особенно это касается микро-сервисов, которые вы можете масштабировать независимо от самого Webmachine.

В Erlang вы можете представить отдельные приложения внутри Erlang VM. Их снова можно увеличить с использованием Distributed Erlangнемного больше в этой теме и с привлечением работников (например, poolboy. Я бы порекомендовал этот подход для начала, поскольку он наиболее прост в реализации и из-за асинхронной природы Erlang он может всегда легко переноситься на внешний микросервис.

PS. Системные ресурсы

Вы также должны проверить, может ли ваш ящик обрабатывать такой трафик. Одна из наиболее распространенных ошибок - не увеличение максимального количества файловых дескрипторов в вашей продукции. Но опять же, сначала вы должны наблюдать такие проблемы, а затем реагировать на них. Преждевременная оптимизация в большинстве случаев не окупается.

PS2 что и когда

Вы можете отслеживать наши приложения и системные ресурсы с помощью таких инструментов, как Exometer или больше из WombatOAM.

И вы можете (должны) провести стресс-тестирование своего приложения с помощью таких инструментов, как tsung или basho-bench.

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