我是Akka的新手。但是我从事Web项目已有几年了。
以前,我们使用“ ngix + tomcat集群”计划,一旦tomcat服务器崩溃(物理上是机器崩溃),tomcat集群的其他成员将接管发往故障服务器的请求。我们由此实现了高可用性。
在我们的新Web项目中,我们计划使用akka来实现容错和可伸缩性。这是一台充当主角色的服务器,其工作是将请求消息从外部分发给子角色。子演员可以在本地或远程分发。一旦任何一位儿童演员失败,则由主演员将其修复。
我的问题是,一旦主演员失败(可能是机器崩溃),在这种情况下我应如何实现高可用性?如果机器崩溃(主角色所在的地方),我们必须手动重新启动机器。在此期间,服务必须停止一会儿。这对我们来说是无法接受的。
谁能告诉我,我该怎么解决这个问题?
最佳答案
我建议使用外部负载平衡器。例如,您可以将Akka群集节点的所有地址报告到Web应用程序的中间层(并在其中缓存一段时间),并从中间层向Akka后端进行负载平衡请求(例如,选择随机群集节点)每次)。
如果您的Akka后端需要为子演员重新分配某种单点资源,则可以尝试使用Cluster Singleton作为主演员。在这种情况下,所有群集节点都应将客户端请求发送到Cluster Singleton和Cluster Singleton,然后可以以某种特定方式在所有群集节点之间分配任务。