MMORPG服务器维护

Zit*_*rax 14 maintenance

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

如果你从这样一个项目开始,你能做些什么来避免这种情况?

har*_*ark 17

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

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

  • 登录服务器——处理身份验证并充当游戏服务器之间的“枢纽”。一旦客户端进入游戏,他们就不再与登录服务器交互。在这样的系统中,您可以应用补丁并重新启动登录服务器而不会干扰游戏(尽管您将有一段时间无法登录)。

  • 游戏服务器——机器集群分组为逻辑独立单元(“世界”等)。假设每个游戏集群使用某种内部通信协议来相互对应状态;您可能需要一次性修补每个集群。一种可能的方法是修补热故障转移。然后你需要能够

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

上述所有情况都为已经很复杂的系统增加了难以置信的复杂性,并引入了许多代码失败可能导致数据丢失或损坏的地方。

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


Kar*_*zke 12

没有其他人有过实际运行这样的东西的经验吗?呵呵。

桥接代码和系统的原因有很多。首先,请记住,当前大多数“大型”MMO 引擎都是在几年前编写的,尽管此后图形和技术有所升级,但仍然依赖于许多这些系统在 2000 年左右编写的方式。例如,Eve-Online 仍然在一个巨大的 Microsoft SQL Server 实例上运行,这就是为什么他们总是试图通过升级硬件来从中提取更多。

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

我对 EVE 的经验最丰富(我更喜欢激光而不是战斧),所以其中一些示例更面向 EVE。

就系统原因而言:

  • 物理节点在一致的基础上失败。当一个节点出现故障时,它的活动通常会使用多种方式迁​​移到别处。但是,节点需要尽快重新投入使用。在 EVE 的案例中,他们同时使用无堆栈处理语言和虚拟服务器;我不确定暴雪的架构是什么样的。
  • 需要检查数据库一致性,需要刷新日志,需要重建索引和数据缓存。这在像 EVE 这样只有一个“实时”数据库实例的系统中尤其重要。
  • 操作系统补丁需要在它们可以重新启动节点而不必将太多活动迁移到其他地方时应用。迁移占用了大量原本可以专用于在线处理的网络资源。
  • 基于 RDBMS 的 MMO 在数据锁定和参照完整性方面存在巨大问题。停机时间用于清除活动日志中的陈旧锁和完整性破坏。
  • 大多数游戏都在大量使用区域(即美国东海岸与西海岸)中为静态或半静态(请参阅下面的缓存摘要数据)信息实施地理定位的数据缓存。这些缓存在停机期间手动更新。

就软件原因而言:

  • 游戏在操作时,会使用大量 OLTP - 即在线事务处理 - 对数据库的读/写类型。然而,有时您想要一份总结报告……比如在过去的 3 年里,您杀死了多少特定的野兽。这最好由 OLAP 报告处理——即在线分析处理——它包含基于巨大数据集中大量行的摘要信息。实际上,游戏实现的系统使用 OLAP 构建缓存以限制需要读取的查询数量——即,它们构建截至某个日期的总数,然后当您提出问题时,它们只读取行来自 OLTP 存储,汇总自特定日期以来的时间段。将两者合并,您实际上可以量化您的生活变得多么无价值。
  • 前面提到的热修补,我认为是软件问题,但软件开发人员认为是系统问题。;)
  • 补充物品储存——在夏娃,小行星带每晚都会更新,某些复合物也会被回收。这可以在一定程度上在线完成,但一些算法太复杂,需要在离线模式下完成,因为它们在总结前一天的经济活动时会短暂地使数据库陷入困境。

运行一个既有闭环又有开环的经济体是 MMO 运营商面临的一个问题——如果你不相信我,请阅读一些关于游戏经济的学术论文和一些对像 Ultima Online 这样的老游戏的研究有相对原始的经济。为补充开环和识别作弊和其他负面经济活动而需要进行的分析需要通过数据快照离线进行,有时只能在数据库完全锁定时进行。

如果您注意到,Eve 的维护发生在英格兰的中午,主要数据中心就在那里。