Создание приложений 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