【顺网云】

【暗黑破坏神2:复活】抱歉服务器宕机回滚。开发团队发布问题公告

游戏资讯 2021-10-16 19:26:31 33

10月15日(周五),团队通过北美官网论坛发布了《暗黑破坏神2:复活》中服务器关闭回滚原因及处理方法的开发团队笔记。
首先,他解释说,服务器宕机的原因是流量比刚启动后要大得多,并且全局数据库的处理超负荷。

此后多次尝试,但全局数据库一直报错,我们采取了移除有问题代码等措施,为进一步解决,我们向暗黑破坏神2:复活团队寻求帮助以及其他暴雪团队和第三方合作伙伴的进一步解决方案。他说改进正在进行中。

此外,对于有问题的进度丢失,即物品回滚问题,他表示,“对于丢失重要进度或贵重物品的玩家,我们深表歉意。”

开发团队表示,他们正在与《暗黑破坏神 2:复活》和暴雪合作,寻找基本解决方案,例如限制游戏创建和参与、添加登录队列以及将游戏的重要功能分解为更小的服务。

以下为公告翻译原文( 翻译过程中可能存在意译或误译):

大家好

自从《暗黑破坏神 2 重生》推出以来,我们一直在遇到各种服务器问题,我们希望对导致这些问题的原因以及迄今为止我们为解决这些问题所做的工作保持透明。我们还想告诉您我们将如何进行。


服务器中断不是由单一问题引起的。当它们出现时,我们正在解决每个问题,进行缓解和长期架构更改。

一些玩家会失去角色进展,这将仅限于几分钟的服务器崩溃。这不是一个完美的答案,我们一直在努力解决这个问题。

在我们团队和帮助我们的暴雪其他成员的帮助下,我们正在努力为每个人提供出色的体验。

在这里,我想在工程细节中稍微介绍一下。总的来说,我们希望它可以帮助您了解发生这些中断的原因、采取了哪些步骤来修复每个实例,以及如何调查潜在问题。


服务器问题 在我们讨论这个问题之前,我认为值得一提的是我们的服务器数据库是如何工作的。

首先,有一个全球数据库,所有角色信息和进度都来自单一来源。可以想象,单个数据库是一项艰巨的任务,它无法独自处理所有事情。

因此,为了减轻全局数据库的负载和延迟,北美、欧洲和亚洲的个别数据库也存储字符信息和进度。

大多数游戏活动都记录在本地数据库中以提高速度,并且角色被“锁定”以保持其完整性。全局数据库有备份以应对重大故障。

考虑到这一点,为了解释发生了什么,我们将重点关注从 10 月 9 日星期六(北美)到现在的服务器停机时间。

太平洋时间周六早上,由于流量激增,全球服务器突然中断。这是我们的服务器以前从未经历过的门槛,而且比启动时还要高。

我们前一天发布的用于游戏创建的性能增强更新加剧了这种情况。这两个因素的组合使全局数据库过载并导致超时。

我们决定回滚前一天发布的更新,希望在周日减少服务器负载后,我们可以腾出时间深入挖掘根本原因。

但是当星期天到来时,结果发现星期六完成的工作还不够。我们可以看到更多的流量增长,这导致了另一次中断。

游戏服务器观察到数据库连接中断,并立即尝试重复重新连接。这意味着数据库忙于处理游戏服务器的持久连接尝试流,无法跟上我们正在处理的工作。

在此期间,我们认为我们可以改进数据库事件日志的设置,这对于从数据库错误情况恢复到正常状态至关重要。

周日的停电是一把双刃剑,我周六所做的工作让我能够创建一个基本脚本,用于如何快速从问题中恢复,这很好。

然而,在重新上线后,玩家活跃度迅速达到顶峰,在不到 10 分钟的时间内创建了数量惊人的游戏并再次崩溃。这不好。

因此,我们不得不在备份全局数据库中部署许多修复程序,包括设置和代码改进。这一直持续到太平洋时间 10 月 11 日星期一。

当我切换到全局数据库时,备份数据库继续错误地运行备份过程,再次导致崩溃。这意味着应该从服务器接收服务请求的数据库大部分时间都在尝试从另一个数据库复制。

在此期间,我们发现了其他问题并发现了其他改进。

我们发现一个未被使用但正在重载的查询,我们能够将其从数据库中完全删除。我们还能够通过优化玩家加入游戏时的资格检查来减少负载。

并且还有额外的性能改进。我也相信数据库重新连接风暴已经修复,因为这个问题在周二没有发生。

然后在周二,大量玩家单独冲入一台服务器,导致玩家高峰再次出现,导致我们数据库工程师目前正在处理的数据库性能受到影响。

当我们的团队专注于服务器问题的重要部分时,暴雪的其他工程师联系我们进行小修,我们也求助于第三方合作伙伴。

为什么会这样

为了忠于原版游戏,我们留下了很多遗留代码。特别是一项传统服务正在努力跟上现代玩家的行为。

此服务是对原始服务的升级,涵盖了游戏功能的重要部分。它处理创建/加入游戏、更新/读取/过滤游戏列表、检查游戏服务器状态、从数据库读取字符等。

重要的是,该服务是单例的,这意味着我们只能运行它的一个实例,从而确保每个玩家始终拥有最新的正确游戏列表。

我们将现代技术应用于这项服务并以多种方式对其进行了优化,但正如我之前所说,许多问题源于游戏创作。

我之前提到了“现代玩家行为”,因为这是一个值得思考的有趣话题。

早在 2001 年,互联网上关于如何“正确”玩暗黑破坏神 2 的内容并不多(用于体验的 vaalons,用于物品/古代下水道/等的 findleskins)。

但是,新玩家可以找到令人惊叹的内容创建者,他们教您如何以不同的方式玩游戏,其中大多数快速创建、加载和销毁游戏,从而导致数据库负载繁重。

当然,我们期望玩家努力在新服务器上创造新角色并获得物品,但我们低估了我们从beta测试中获得的结果。

此外,总的来说,我们过于频繁地将其存储在全局数据库中。您不必像我们那样经常这样做。

字符应该存放在本地数据库中,只有在需要锁定字符时才存放在全局数据库中。这是我们正在实施的措施之一。

现在我们正在编写代码来彻底改变我们这样做的方式。因此,您几乎不会将其存储在全局数据库中,并且您将能够显着减少服务器上的负载。但是,由于这是一次架构重新设计,因此构建、测试和实施需要时间。

进度丢失的注意事项

一些玩家遇到的进度丢失是当角色被锁定在本地和全局数据库时发生的问题。当您被分配到特定区域时,您将角色锁定在全局数据库中。(比如你在美区玩,角色被锁定在美区,大部分动作在美区数据库中完成。)

问题是因为数据库出错导致服务器宕机. ,也没有办法导入到全局数据库中。

当时,我认为你有两个选择。通过释放对未保存更改的全局数据库的锁,它会在全局数据库中被覆盖,并且会丢失一些进度。

或者完全关闭游戏并在不可预测的时间运行脚本以将本地数据写入全局数据库。

当时我们选择了前者。我们认为让人们继续玩游戏比长时间关闭游戏以恢复数据更重要。

对于丢失重要进度或贵重物品的玩家,我们深表歉意。作为玩家,我们知道回滚的痛苦,我们也深深感受到。

展望未来,我们正在寻找恢复不会导致大量数据丢失的字符的方法。这意味着如果服务器崩溃,您的损失将仅限于几分钟。

这比以前好,但在我们看来,它还不够好。

如何处理

- 速率限制

正在限制创建和加入游戏的任务数量,你们中的许多人可能已经注意到这一点。

例如,Findleskin Run 允许您在进入和离开游戏后 20 秒内创建一个新房间。在这种情况下,会发生速率限制,并输出一条错误消息,指出与服务器的通信出现问题。

在这种情况下,此消息并不表示服务器已关闭,它只是表示已进行速率限制以暂时减少数据库的负载以继续游戏。

这只是暂时的缓解措施,而不是长期解决方案。

- 创建登录队列

上周末我们遇到了几个问题,同样的问题没有重复。由于玩家基础重新激活、添加多个平台以及其他缩放问题,小问题继续出现。

要快速诊断和修复这些问题,您需要同时“放牧”大量玩家,停止并登录。为了解决这个问题,您将运行在魔兽世界中遇到的类似登录队列。

这将使人口保持在当时的安全水平,因此我们可以监控系统在哪里紧张并在游戏完全崩溃之前解决任何问题。

每次解决此负担时,您都可以增加人口上限。登录队列已在后端部分实现(现在看起来像客户端身份验证失败),并将在未来几天内完全部署到 PC,控制台也将稍后推出。

- 将重要功能分解为更小的服务

这项工作的部分工作正在进行中,可以在半天之内完成(有些已经在本周完成)。更大的项目,如新的微服务(例如,仅用于向玩家提供游戏列表的 GameList 服务)正在开发中。如果关键功能中断,我们可以扩展游戏管理服务以减少负载量。

我们致力于实时管理事件、诊断问题和部署修复程序,这是暗黑破坏神 2:复活团队和暴雪正在进行的一项工作。

这场比赛对我们来说意义重大。团队中的许多人都是暗黑破坏神 2 的终身玩家。自 2000 年成立以来,我一直在玩,有些人也加入了 mod 社区。

我们保证我们将继续作为开发人员、玩家和社区成员工作,直到游戏体验感觉良好为止。
 

即点即玩 即可体验