Создание приложений Erlang для облака

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

Просмотрев руководство по дизайну OTP в Распределенные приложения и соответствующие главы (Distribunomicon и Распределенный OTP) в Узнайте, что у вас есть Erlang, кажется, что встроенный механизм распределенного приложения ориентирован на on- решения, где вы знали имена хостов и IP-адреса, и конфигурация кластера определяется заранее, тогда как в нашей планируемой настройке приложение должно динамически масштабироваться вверх и вниз, а IP-адреса узлов будут случайными.

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

Спасибо,

Ответ 1

Существует несколько возможных подходов:

  • В Erlang и OTP в действии представлен один из методов - использовать один или два централизованных узла с известными доменами или IP-адресами и подключить все остальные узлы к этому, чтобы обнаружить друг друга
  • Приложения, такие как https://github.com/heroku/redgrid/tree/logplex, требуют наличия централизованного redis node, где все узлы Erlang регистрируются сами и выполняют управление членством
  • Сторонние сервисы, такие как Zookeeper и еще что-то подобное
  • Независимо от того, что люди могут порекомендовать

Обратите внимание, что, если вам не понадобится защищать ваше общение, либо переключив протокол распространения, чтобы использовать SSL, либо с использованием групп безопасности AWS и еще чего ограничить доступ к вашей сети.

Ответ 2

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

У Erlware также есть приложение, которое поможет с этим: https://github.com/erlware/resource_discovery