假设我有一个应用程序,即使在优化之后也可以保证压倒一台服务器。是否有一种技术允许Web应用程序在保持其状态的同时分割在多个服务器上?
以多人在线游戏为例。通常在战争世界中,有多个服务器,每个服务器都有自己的游戏状态。我正在寻找的是允许这个游戏状态在多个服务器之间共享的东西。
编辑:平台并不重要,因为这是针对Web应用程序的,因此后端并不重要。但是,Rails和Java是可能的。
此外,魔兽世界只是一个例子,我只对这种技术感兴趣;大型游戏将是一个很好的应用程序。
答案 0 :(得分:2)
对于低延迟,高吞吐量的内存应用程序(如实时在线游戏)来说,实际上并没有什么,至少不是一块任意的中间件。
Project Darkstar在可用性和复杂性方面做了令人钦佩的尝试,但发现(不出所料)它没有扩展。
最终,这是一个困难的(虽然不是难以解决的)问题,因为没有解决方案接近于普遍适用。特别是在一方面需要对陈旧的游戏数据采取行动而另一方面需要不断交换共享数据之间,你可能需要进行权衡。缺乏正确性与复杂性的指数增长...挑选你的毒药。
值得注意的是 - 特别是如果您的应用程序域不是实时游戏 - 如果您正在处理陈旧数据,您通常不介意,只要它很快就变得正确。在这种情况下,像memcache这样的简单缓存系统非常棒。同样,如果你需要更多正确但不必担心吞吐量这么多,像Hazelcast(在另一个答案中提到)这样的东西可能会很棒,但对于大多数足以要求负载平衡的在线游戏“成千上万的操作/秒“只是不够好。
一些MMO技术试图通过在地理上划分应用程序来分发应用程序,这意味着根本没有太多共享状态,并且它要求这个方案在游戏世界和虚构中有意义。
另一种方法是按服务对其进行分区,并使用您最喜欢的现成RPC方法实现大多数服务。如果您的服务是独立的,这可以让您轻松扩展,但服务之间的任何依赖关系都会让您回到正方形。
答案 1 :(得分:1)
看看Hazelcast。它是Java的开源,高度可扩展的数据分发平台。 Hazelcast提供分布式地图,将在集群成员之间共享。您可以轻松地将数据存储在其中。它超级易于使用。只需将hazelcast.jar添加到您的类路径中即可。无需安装任何服务器。
答案 2 :(得分:0)
我使用Microsoft HPC,但不是用于游戏。很容易设置和使用。
答案 3 :(得分:0)
您没有提及您的平台。对于Java,有Terracotta