Сценарий
Сейчас у нас есть только один узел, на котором работает вся система. Мы хотим провести различие между «интерфейсными» узлами и одним «внутренним» узлом.
- Узлы "Frontend" (N узлов): поддерживает постоянное соединение с клиентами через соединение WebSocket.
- Узел «Backend» (1 узел): обрабатывает все запросы, поступающие от всех узлов внешнего интерфейса, которые запрашивают базу данных и обрабатывают необходимую логику домена.
Это различие необходимо по нескольким причинам:
- Не достигайте предела в 70–100 тыс. Постоянных подключений на узел внешнего интерфейса.
- Избегайте отключения клиентов при развертывании изменений, затрагивающих только серверную часть
Работа сделана
Мы соединили актеров, живущих на внешнем узле, с актерами, живущими на внутреннем интерфейсе. Мы сделали это, создав экземпляры серверного узла ActorRef
s из внешнего интерфейса, используя akka.cluster.singleton.ClusterSingletonProxy
и ClusterSingletonManager
, а на самом деле создав их экземпляры в серверном интерфейсе.
Вопрос
Как мы выполняем развертывание с учетом уведомления о сбое узла кластера Akka?
Насколько я понял с помощью документацию по кластеру Akka о сбое и некоторые комментарии к списку рассылки akka, рекомендуемый подход при работе с этим процессом будет примерно таким:
- Загрузите дистрибутив akka со страницы http://akka.io/downloads/.
- Скопируйте и вставьте сценарий
akka-cluster
bash вместе сjmxsh-R5.jar
в папкуresources/bin/
(например) - Включите эту папку в распространяемый пакет (я добавил следующие строки в
build.sbt
):mappings in Universal ++= (baseDirectory.value / "resources" / "bin" * "*" get) map (bin => bin -> ("bin/" + bin.getName))
- While deploying, set the node to be deployed as down manually calling the bash script like:
- Execute
bin/akka-cluster %node_to_be_deployed:port% down
- Разверните новую версию кода
- Выполнить
bin/akka-cluster %deployed_node:port% join
- Execute
Сомнения:
- Правильна ли эта пошаговая процедура?
- Если развертываемый узел будет иметь тот же IP-адрес и порт после развертывания, нужно ли делать
down
иjoin
? - Мы планируем установить один интерфейсный и серверный узлы в качестве начальных. Таким образом, весь кластер можно было реконструировать, выполняя развертывание только на интерфейсных узлах или только на серверных. Это правильно?
Спасибо!