Сценарий
Прямо сейчас у нас есть только один узел, на котором запущена целая система. Мы хотим сделать различие между «frontend» узлами и одним «backend» узлом.Как правильно развернуть с кластером Akka
- «Frontend» узлы (N узлов): Поддерживает постоянную связь с клиентами через соединение WebSocket
- узел «Backend» (1 узел): обрабатывает все запросы, поступающие образуют все фронтэнда узлы запросов к базы данных и обработки необходимой логики домена.
Это различие необходимо каким-либо причинам:
- Не достигают limit of 70-100k persistent connections per frontend node
- Избегайте отсоединение клиентов при развертывании изменений влияет только на бэкенд
Выполненная работа
Мы связали актеров, живущих на внешнем узле, с теми, которые l ive на бэкэнд. Мы сделали так, создавая экземпляр базового узла ActorRef
s из внешнего интерфейса, используя akka.cluster.singleton.ClusterSingletonProxy
и ClusterSingletonManager
, фактически создавая их в бэкэнд.
Вопрос
Как мы делаем развернуть с учетом кластерного узла уведомления Даунинг Akka?
Насколько я понял по the Akka Cluster documentation about downing и some comments on the akka mailing list, рекомендуемый подход при работе с этим процессом было бы что-то вроде:
- Скачать дистрибутив AKKA из http://akka.io/downloads/
- Скопируйте и вставьте
akka-cluster
Баш сценарий вместе сjmxsh-R5.jar
в папкеresources/bin/
(например) - Включите эту папку в распределенный пакет (я добавил следующие строки на
build.sbt
):mappings in Universal ++= (baseDirectory.value/"resources"/"bin" * "*" get) map (bin => bin -> ("bin/" + bin.getName))
- При развертывании, установите узел будет развернут как вниз вручную вызова Баш скрипт, как:
- Execute
bin/akka-cluster %node_to_be_deployed:port% down
- развернуть новую версию кода
- Execute
bin/akka-cluster %deployed_node:port% join
- Execute
Сомнения:
- Это шаг за шагом процедура правильная?
- Если узел развертывания будет иметь тот же IP-порт и порт после развертывания, необходимо ли сделать
down
иjoin
? - Мы планируем установить один интерфейс и внутренние узлы в качестве семенных. Таким образом, весь кластер может быть восстановлен при развертывании только для интерфейсных узлов или только для внутреннего. Правильно ли это?
Спасибо!
Hi @Bennie. Спасибо за ваш ответ. Как я понимаю, процесс очистки происходит, когда узел удален, а также [Документация кластера Akka] (http://doc.akka.io/docs/akka/current/common/cluster.html#Membership_Lifecycle) Я понимаю это как следующий шаг (вверх -> недоступен -> вниз -> удален). Мой вопрос в том, как отметить узел как вниз (вверх -> недоступен -> вниз). Я играл с [ConstructR & Consul] (https://github.com/Tecsisa/constructr-consul), но он не имеет дело с нижним шагом (только с перечислением семенных узлов при присоединении к новому члену). –