【发布时间】:2016-11-07 17:03:28
【问题描述】:
场景
现在我们只有一个节点运行整个系统。我们想要区分“前端”节点和单个“后端”节点。
- “前端”节点(N 个节点):通过 WebSocket 连接与客户端保持持久连接
- “后端”节点(1 个节点):处理来自查询数据库的所有前端节点的所有请求,并处理所需的域逻辑。
由于某些原因需要这种区分:
- 不要联系limit of 70-100k persistent connections per frontend node
- 避免在部署仅影响后端的更改时断开客户端的连接
工作完成
我们已将前端节点上的参与者与后端节点上的参与者连接起来。我们已经使用akka.cluster.singleton.ClusterSingletonProxy 和ClusterSingletonManager 从前端实例化后端节点ActorRefs,同时在后端真正实例化它们。
问题
考虑到 Akka 集群节点宕机通知,我们如何进行部署?
据 the Akka Cluster documentation about downing 和 some comments on the akka mailing list 了解,处理该过程时推荐的方法如下:
- 从http://akka.io/downloads/下载akka发行版
- 将
akka-clusterbash 脚本与jmxsh-R5.jar一起复制并粘贴到resources/bin/文件夹中(例如) - 在分发包中包含该文件夹(我在
build.sbt中添加了以下行):mappings in Universal ++= (baseDirectory.value / "resources" / "bin" * "*" get) map (bin => bin -> ("bin/" + bin.getName)) - 在部署时,将要部署的节点设置为关闭,手动调用 bash 脚本,如:
- 执行
bin/akka-cluster %node_to_be_deployed:port% down - 部署新的代码版本
- 执行
bin/akka-cluster %deployed_node:port% join
- 执行
疑问:
- 此分步程序正确吗?
- 如果要部署的节点在部署后IP和端口完全相同,是否需要设置
down和join? - 我们计划设置一个前端和后端节点作为种子节点。这样,可以在仅部署前端节点或仅部署到后端节点的同时重建所有集群。对吗?
谢谢!
【问题讨论】:
标签: scala deployment akka akka-cluster