4

假设我有一个应用程序,即使在优化之后也能保证压倒一台服务器。有没有一种技术可以让 Web 应用程序在保持其状态的同时拆分到多个服务器上?

以多人在线游戏为例。通常在 World of Warcraft 中有多个服务器,每个服务器都有自己的游戏状态。我正在寻找的是允许这个游戏状态在多个服务器之间共享的东西。

编辑:平台并不重要,因为这是针对 Web 应用程序的,因此后端并不重要。但是,Rails 和 Java 是可能的。

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

4

4 回答 4

2

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

Project Darkstar在可用性和复杂性方面做出了令人钦佩的尝试,但发现(不出所料)它没有扩展。

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

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

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

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

于 2010-06-28T10:50:18.540 回答
1

看看Hazelcast。它是用于 Java 的开源、高度可扩展的数据分发平台。Hazelcast 提供分布式地图,将在集群成员之间共享。您可以轻松地将数据存储在其中。它超级超级好用。只需将 hazelcast.jar 添加到您的类路径中。无需安装任何服务器。

于 2010-06-17T13:41:02.963 回答
0

我使用Microsoft HPC,但不用于游戏。很容易设置和使用。

于 2010-06-15T13:36:44.093 回答
0

你没有提到你的平台。对于 Java,有Terracotta

于 2010-06-15T13:37:06.387 回答