Answers:
我怀疑他们正在部署其代码的最新版本,这要求他们重新启动应用程序(并希望在重新启用访问权限之前运行一些测试)。从这个角度来看,更多的是StackOverflow问题,而更少的ServerFault问题。
我认为可以创建一个热补丁系统,但是它一定会非常复杂。据我了解,MMO服务器“应用程序”由几个不同的组件组成-
登录服务器 -处理身份验证,并充当游戏服务器之间的“集线器”。客户端进入游戏后,它们将不再与登录服务器进行交互。在这样的系统中,您可以应用补丁程序并重新启动登录服务器,而不会干扰游戏玩法(尽管您会在一段时间内无法登录)。
游戏服务器 -分为逻辑独立单元(“世界”等)的机器集群。假设每个游戏集群都使用某种内部通信协议来使状态彼此对应;您可能必须同时修补每个群集。一种可行的方法是修补热故障转移。然后,您需要能够
数据库服务器 -某种持久性数据存储,例如RDBMS。希望您不会经常更改数据存储。大概每个游戏服务器/群集都有一个独立的数据存储。您可能可以在热故障切换时使用相同的技巧(并告诉游戏服务器断开连接,等待旧数据库和故障切换数据库同步,然后重新连接到故障切换),但是这对我来说似乎很冒险。
上述所有情况都给已经很复杂的系统增加了难以置信的复杂性,并在很多地方出现了代码故障可能导致数据丢失或损坏的情况。
另一种解决方案是使用一种专为100%正常运行时间而设计的语言,并具有对运行代码进行热修补的内置功能。Erlang是一个不错的选择(热修补示例),并且Java具有类似的功能。
没有其他人实际运行过这样的东西吗?嗯
桥接代码和系统有多个原因。首先,请记住,大多数当前的“大型” MMO引擎是在几年前进行编程的,尽管从那时起图形和技术已进行了升级,但它们仍然取决于其中许多系统在2000年左右的编写方式。例如,Eve-Online仍然可以在一个巨大的Microsoft SQL Server实例上运行,这就是为什么他们总是试图通过升级硬件从中获得更多收益。
自从《魔兽世界》和《 EVE》开始以来,改进的一个例子是在分布式键/值数据库中完成的工作,例如Google的MapReduce(以及它的开源实现,Hadoop),超快速的肯定响应处理队列服务(Amazon SQS),以及其他“云”技术。
我在EVE方面拥有最丰富的经验(我更像是激光专家而不是战斧专家),因此其中一些示例更面向EVE。
就系统原因而言:
就软件原因而言:
MMO运营商面临的问题是闭环和开环的经济运行-如果您不相信我,请阅读一些有关游戏经济性的学术论文以及一些诸如Ultima Online等较旧游戏的研究,经济相对原始。需要进行分析以补充开环并识别作弊和其他不利的经济活动,需要离线进行数据快照,而快照有时只能在数据库完全锁定时进行。
值得一提的是,夏娃的维护工作是在英格兰主要数据中心所在的正午时进行的。
我怀疑暴雪(整个工作都是在星期二早上发布问题)报价的总时间是整个集群的维护时间。并非每个服务器都需要那么长时间来执行工作。
尽管可以更快地恢复单个服务器,但这将私下呼唤那些在时间表中较早落入国界的玩家。这样一来,他们会压低一切,直到完成所有工作。由于有数百个领域需要处理,因此他们可能并行执行许多工作,但是在将一切恢复在线之前仍会序列化最终检查。如果您要进行硬件升级,则可能会在尽可能多的数据中心中对其进行序列化。
至于他们为什么执行维护,其中一些可能只是性能重启。如果不需要重新启动会很棒,但是这样做的成本与不重新启动的影响可能会导致他们选择此处。
当您查看为什么他们无法将流程聚类并执行滚动维护时,很少有人了解WoW基础架构,这表明多台机器为每个领域提供服务(即,一台为世界服务,一台为实例和袭击提供服务,一台为战场提供服务)等),它们不使用状态共享的双活程序设置。没有共享实时状态,仅通过数据库共享持久数据。
最后,为如此庞大的订户群提供有状态在线服务的机制挑战了我们在谈论网站或其他传统的基于Internet的服务时可能拥护的一些最佳实践。
EvE Online中最近出现的一些延长停机时间是关于安装新硬件(例如更快的SAN)的。从技术上讲,可以通过在新驱动器上创建一个新文件组然后清空主文件组来移动大量数据,但由于I / O持续不变,这将导致性能下降的时间延长。因此,他们选择分离1.1TB数据库并一次性移动它。
该问题的答案还取决于特定的应用。例如,在不中断游戏过程的情况下,不能热交换处理特定星级系统的服务器,因此停机时间可用于将功能更强大的服务器重新分配到潜在的热点中。此外,还计算了星形系统的所有权计算(主权)。这取决于数十种不同的变量,所有这些变量都可以根据玩家的动作而改变。不用说,这样做会导致过多的锁定和/或其他并发问题。但是解决这些问题最好留给stackoverflow。
在最近的主题中,我应该多长时间重启一次Linux服务器,另一个要点是,验证在重启或任何(重大)配置更改后,一切都可以正常启动。
我已经在Erlang中实现了MMO体系结构,该体系结构支持热代码升级和分发。例如,一台“ GamePlay服务器”可以在任意数量的计算机上运行,如果其中一台需要硬件升级,则其对象可以(实时)转移到另一台计算机上。这样可以在不停机的情况下升级软件硬件。
您可以在http://www.next-gen.cc上查看我的网站。