假设我有一个应用程序,即使在优化后也保证会压垮一台服务器。是否有一种技术允许将 Web 应用程序拆分到多个服务器上,同时保持其状态?

以多人在线游戏为例。通常,在《魔兽世界》中,有多个服务器,每个服务器都有自己的游戏状态。我正在寻找的是允许该游戏状态在多个服务器之间共享的东西。

编辑:平台并不重要,因为这是一个 Web 应用程序,因此后端并不重要。然而,Rails 和 Java 都是可能的。

另外,魔兽世界只是一个例子,我只是对这样的技术感兴趣;大型游戏将是一个很好的应用。

有帮助吗?

解决方案

对于像实时在线游戏这样的低延迟、高吞吐量内存应用程序来说,实际上没有任何东西,至少不是作为任意中间件。

暗星计划 在可用性和复杂性方面做出了令人钦佩的尝试,但发现(毫不奇怪)它无法扩展。

最终,这是一个困难(尽管不是棘手)的问题,没有接近普遍适用的解决方案。特别是,您可能需要在一方面需要对过时的游戏数据采取行动与另一方面需要不断交换共享数据之间进行权衡。缺乏正确性 vs 缺乏正确性复杂性呈指数级增长...选择你的毒药。

值得注意的是 - 特别是如果您的应用程序领域不是实时游戏 - 您通常不介意是否使用过时的数据,只要它很快就会变得正确即可。在这种情况下,像 memcache 这样的简单缓存系统就非常有用。同样,如果您需要更多的正确性但不必太担心吞吐量,像 Hazelcast(在另一个答案中提到)这样的东西可能会很棒,但对于大多数足够大的在线游戏来说需要负载平衡“数千个操作/秒”还不够好。

一些 MMO 技术尝试通过地理分区来分发应用程序,这意味着根本没有太多共享状态,并且需要这种方案在游戏世界和小说中有意义。

另一种方法是按服务对其进行分区,并使用您最喜欢的现成 RPC 方法来实现大多数服务。如果您的服务是独立的,这可以让您轻松扩展,但服务之间的任何依赖关系都会让您回到原点。

其他提示

看一看 Hazelcast 。它是开源的,针对Java高度可扩展的数据分发平台。 Hazelcast报价分布地图,这将集群成员之间共享。你可以很容易地存储在它的数据。这是超级超级好用。只需添加hazelcast.jar到类路径。无需安装任何服务器。

我使用微软HPC ,而不是游戏,虽然。很容易设置和使用。

您没有提到您的平台。对于Java有兵马俑

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top