我们正在为游戏开发一个Scala + Akka的服务器系统,该系统将为安卓、iPhone和Second Life中的客户提供服务。此服务器的某些部分需要高度可用,并在多台计算机上运行。如果其中一个服务器死了(比如说,硬件故障),系统需要继续运行。我想我希望客户有一个他们将尝试连接的机器的列表,类似于Cassandra的工作方式。
到目前为止,我在Akka中看到的多节点示例似乎都是围绕可伸缩性的思想,而不是高可用性(至少在硬件方面)。多节点示例似乎总是有一个单点故障。例如,有负载均衡器,但如果我需要重新启动其中一台具有负载均衡器的机器,我的系统将遭受一些停机时间。
对于Akka,有没有这种类型的硬件容错的例子?或者,你有什么好的方法来实现这一点吗?
到目前为止,我能想到的最好的答案是研究Erlang OTP文档,思考它们,并试图找出如何使用Akka中可用的构建块将我的系统组装在一起。
但是如果有关于如何在多台机器之间共享状态的资源、示例或想法,以便在其中一台机器宕机的情况下继续运行,我肯定会很感激,因为我担心我可能会在这里重新发明轮子。也许有一个多节点STM容器可以在多个节点之间自动保持共享状态同步?或者,这可能太容易了,以至于文档没有显示如何做到这一点的示例,或者可能我在研究和实验中还不够彻底。任何想法或想法都将受到感谢。
发布于 2010-09-13 02:13:31
HA和负载管理是可伸缩性的一个非常重要的方面,并作为AkkaSource商业产品的一部分提供。
发布于 2010-09-12 05:23:35
如果您已经在客户端中列出了多个潜在主机,那么这些主机可以有效地成为负载均衡器。
您可以提供一个主机建议服务,并向客户端推荐它们应该连接到哪台机器(基于当前负载或其他任何东西),然后客户端可以固定到该机器上,直到连接失败。
如果主机建议服务不在那里,那么客户端可以简单地从它的内部列表中选择一个随机的主机,尝试它们,直到它连接。
理想情况下,在第一次启动时,客户端将连接到主机建议服务,并且不仅会被定向到适当的主机,而且还会被定向到其他潜在主机的列表。该列表可以在每次客户端连接时定期更新。
如果主机建议服务在客户端第一次尝试时关闭(不太可能,但是...)然后,您可以在客户端安装中预先部署一个主机列表,以便它可以立即开始随机选择主机,如果也是这样的话。
确保您的主机列表是实际的主机名,而不是is,这会给您带来更大的灵活性(例如,您将“始终拥有”host1.example.com、host2.example.com……等,即使您移动基础设施和更改IP)。
https://stackoverflow.com/questions/3692680
复制相似问题