MMORPG服务器维护


14

似乎大多数mmorpg游戏都有一些定期的服务器维护,有些每天,每周一次。他们实际要做的是什么,为什么有必要呢?

如果您从这样一个项目开始,该如何避免呢?

Answers:


17

我怀疑他们正在部署其代码的最新版本,这要求他们重新启动应用程序(并希望在重新启用访问权限之前运行一些测试)。从这个角度来看,更多的是StackOverflow问题,而更少的ServerFault问题。

我认为可以创建一个热补丁系统,但是它一定会非常复杂。据我了解,MMO服务器“应用程序”由几个不同的组件组成-

  • 登录服务器 -处理身份验证,并充当游戏服务器之间的“集线器”。客户端进入游戏后,它们将不再与登录服务器进行交互。在这样的系统中,您可以应用补丁程序并重新启动登录服务器,而不会干扰游戏玩法(尽管您会在一段时间内无法登录)。

  • 游戏服务器 -分为逻辑独立单元(“世界”等)的机器集群。假设每个游戏集群都使用某种内部通信协议来使状态彼此对应;您可能必须同时修补每个群集。一种可行的方法是修补热故障转移。然后,您需要能够

    1. 向客户端发送信号以连接到热故障转移并与旧群集断开连接。
    2. 在所有客户端传输的同时,保持状态在故障转移和过时的应用程序服务器之间同步。
  • 数据库服务器 -某种持久性数据存储,例如RDBMS。希望您不会经常更改数据存储。大概每个游戏服务器/群集都有一个独立的数据存储。您可能可以在热故障切换时使用相同的技巧(并告诉游戏服务器断开连接,等待旧数据库和故障切换数据库同步,然后重新连接到故障切换),但是这对我来说似乎很冒险。

上述所有情况都给已经很复杂的系统增加了难以置信的复杂性,并在很多地方出现了代码故障可能导致数据丢失或损坏的情况。

另一种解决方案是使用一种专为100%正常运行时间而设计的语言,并具有对运行代码进行热修补的内置功能。Erlang是一个不错的选择(热修补示例),并且Java具有类似的功能


12

没有其他人实际运行过这样的东西吗?嗯

桥接代码和系统有多个原因。首先,请记住,大多数当前的“大型” MMO引擎是在几年前进行编程的,尽管从那时起图形和技术已进行了升级,但它们仍然取决于其中许多系统在2000年左右的编写方式。例如,Eve-Online仍然可以在一个巨大的Microsoft SQL Server实例上运行,这就是为什么他们总是试图通过升级硬件从中获得更多收益。

自从《魔兽世界》和《 EVE》开始以来,改进的一个例子是在分布式键/值数据库中完成的工作,例如Google的MapReduce(以及它的开源实现,Hadoop),超快速的肯定响应处理队列服务(Amazon SQS),以及其他“云”技术。

我在EVE方面拥有最丰富的经验(我更像是激光专家而不是战斧专家),因此其中一些示例更面向EVE。

就系统原因而言:

  • 物理节点始终失败。当节点发生故障时,通常会使用多种方法将其活动迁移到其他地方。但是,该节点需要尽快恢复服务。对于EVE,它们同时使用无堆栈处理语言和虚拟服务器。我不确定暴雪的架构是什么样的。
  • 需要检查数据库一致性,需要刷新日志,并且需要重建索引和数据缓存。在只有一个“活动”数据库实例的EVE之类的系统中,这一点尤其重要。
  • 操作系统修补程序需要在它们可以重新引导节点而不必将太多活动迁移到其他位置时应用。迁移会占用大量网络资源,否则这些资源会专用于联机处理。
  • 基于RDBMS的MMO在数据锁定和引用完整性方面存在巨大问题。停机时间用于清除活动日志中的过时锁定和完整性中断。
  • 大多数游戏在重度使用区域(即美国东海岸和西海岸)中实现了静态或半静态(请参见下面的缓存摘要数据)信息的地理位置数据缓存。这些缓存将在停机期间手动更新。

就软件原因而言:

  • 游戏在运行时会使用大量的OLTP-在线事务处理-对数据库的读/写类型。但是,有时您想要一个摘要报告...例如在过去三年的磨碎中您杀死了多少只特定的野兽。最好通过OLAP报告(即在线分析处理)来处理,该报告包含基于巨型数据集中许多行的摘要信息。实际上,游戏实现的系统使用OLAP来构建缓存以限制需要读取的查询数量-即,它们在特定日期建立总数,然后当您问问题时,它们只是读取行OLTP存储中的数据,总结了自特定日期以来的时间段。合并两者,您实际上可以量化您的生活变得多么毫无价值。
  • 前面提到的热补丁,我认为这是软件问题,但是软件开发人员却将其视为系统问题。;)
  • 补充物品的存储-在平安夜,小行星带每晚都会刷新,某些复合物也会被回收。可以在一定程度上在线上完成此操作,但是某些算法过于复杂,需要在离线模式下完成,因为它们在总结前一天的经济活动时会短暂地使数据库瘫痪。

MMO运营商面临的问题是闭环和开环的经济运行-如果您不相信我,请阅读一些有关游戏经济性的学术论文以及一些诸如Ultima Online等较旧游戏的研究,经济相对原始。需要进行分析以补充开环并识别作弊和其他不利的经济活动,需要离线进行数据快照,而快照有时只能在数据库完全锁定时进行。

值得一提的是,夏娃的维护工作是在英格兰主要数据中心所在的正午时进行的。


3

我怀疑暴雪(整个工作都是在星期二早上发布问题)报价的总时间是整个集群的维护时间。并非每个服务器都需要那么长时间来执行工作。

尽管可以更快地恢复单个服务器,但这将私下呼唤那些在时间表中较早落入国界的玩家。这样一来,他们会压低一切,直到完成所有工作。由于有数百个领域需要处理,因此他们可能并行执行许多工作,但是在将一切恢复在线之前仍会序列化最终检查。如果您要进行硬件升级,则可能会在尽可能多的数据中心中对其进行序列化。

至于他们为什么执行维护,其中一些可能只是性能重启。如果不需要重新启动会很棒,但是这样做的成本与不重新启动的影响可能会导致他们选择此处。

当您查看为什么他们无法将流程聚类并执行滚动维护时,很少有人了解WoW基础架构,这表明多台机器为每个领域提供服务(即,一台为世界服务,一台为实例和袭击提供服务,一台为战场提供服务)等),它们不使用状态共享的双活程序设置。没有共享实时状态,仅通过数据库共享持久数据。

最后,为如此庞大的订户群提供有状态在线服务的机制挑战了我们在谈论网站或其他传统的基于Internet的服务时可能拥护的一些最佳实践。


实际上,大多数挑战的确围绕着中央维护节点数据库进行。那是权威记录。所有其他似乎可以管理状态的事物(服务器,客户端以及它们之间的任何缓存机制)实际上只是关于什么数据进入数据库的谈判者。延迟是数据库确认链上已记录内容所花费的时间。
卡特凯兹

1

EvE Online中最近出现的一些延长停机时间是关于安装新硬件(例如更快的SAN)的。从技术上讲,可以通过在新驱动器上创建一个新文件组然后清空主文件组来移动大量数据,但由于I / O持续不变,这将导致性能下降的时间延长。因此,他们选择分离1.1TB数据库并一次性移动它。

该问题的答案还取决于特定的应用。例如,在不中断游戏过程的情况下,不能热交换处理特定星级系统的服务器,因此停机时间可用于将功能更强大的服务器重新分配到潜在的热点中。此外,还计算了星形系统的所有权计算(主权)。这取决于数十种不同的变量,所有这些变量都可以根据玩家的动作而改变。不用说,这样做会导致过多的锁定和/或其他并发问题。但是解决这些问题最好留给stackoverflow


尽管通过虚拟化,将重负载的服务器迁移到具有更多可用资源的硬件上应该很有可能能够实时运行并自动运行……尤其是在大多数动作延迟以毫秒为单位(有时超过一百毫秒)的游戏中。但这可能是复杂且昂贵的^^
Oskar Duveborn

Oskar,请记住,EVE和WoW背后的核心技术是在2002年左右编写的,当时这些技术还没有真正成熟。
卡特凯兹

0

大概是您无法通过集群/负载平衡处理的事情,例如主要的数据库架构更改。



0

MMORPG游戏还将硬件的简单升级(或硬件替换)作为“服务器维护”来呈现。如此琐碎,我们常常会忘记它。


0

我已经在Erlang中实现了MMO体系结构,该体系结构支持热代码升级和分发。例如,一台“ GamePlay服务器”可以在任意数量的计算机上运行,​​如果其中一台需要硬件升级,则其对象可以(实时)转移到另一台计算机上。这样可以在不停机的情况下升级软件硬件。

您可以在http://www.next-gen.cc上查看我的网站。


0

我被认为是维护窗口还允许常规硬件更换,以确保组件不会发生故障。


通常不会。他们将在硬件上运行一些预测指标,但除非系统显示出故障迹象(例如RPM下降或SMART显示较高的写入错误计数),否则它们通常不主动替换系统中的所有风扇或其他“消耗性”位。
2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.