开发日志:暗空行动赛季的匹配错误

2018年9月4日,新赛季“暗空行动”正式部署上线。本赛季更新改进了整体配对流程,旨在使初始游戏服务器选择过程更加顺畅。上线后,我们注意到与测试服务器阶段相比,生成的匹配错误数量有所增加。主要表现在北美的玩家无法使用配对系统加入比赛。
您将在下面找到所发生事件的摘要,以及我们采取的修复步骤。
匹配过程
任何在线游戏模式选择“多人游戏”按钮,都会发起两个步骤。
首先,游戏联系我们的配对服务,寻找最佳匹配。此步骤取决于游戏模式,您的排名和当前玩家人数,通常平均为10-60秒(匹配崩溃不会影响此过程)。
其次,客户端尝试连接到游戏服务器,这是匹配崩溃发生的时间点。
我们的游戏服务器的连接是在客户端和服务器之间交换UDP(用户数据报协议)消息。从高层次视角来看,它们看起来像这样:

客户端与服务器协商通信通道,等待一帧(约16ms),然后开始在该通道上发送信息(Hello)。
问题的发现
根据我们对这个问题的调查,发现这是一个先前就存在的服务器问题:如果在很短的时间内第四条消息(hello)在第三条消息(ack)前发送到游戏服务器,连接就会由于错误而断开,并且无法恢复。这就会导致错误代码6-0x00001000(连接超时)。
在大部分情况下,如果消息在特定顺序下被发出,他们将会以同样的顺序被接收。消息的顺序重置的几率就像这个错误本身一样少见,但是这个问题由于会在正常情况下—例如,由于玩家的错误设置的防火墙而导致无法正常建立连接——也会发生所以值得注意。换句话说,有一点那样的小问题不是什么大事,也是预料之中,但是大量的问题就是不正常的了。受限于测试服的规模,能提供的错误的样本太少,导致我们没能很迅速的找到这个问题的存在。
匹配崩溃问题的发展
在暗空行动中我们添加的一项优化就是玩家无需等待,立刻在很短的时间段内向服务器发送第三条和第四条讯息,顺序不变。对于大多数网络运营商来说这没有什么影响,但对于有些运营商,两条讯息间隔过短,导致在大部分情况下被打乱顺序,导致此类问题对于用这些运营商服务的玩家几乎是必然的问题。这是该运营商提供的低延迟服务导致的。简单地说,延迟越低,就越有可能遇到这个错误。
另外,如果小队内至少有一名队员无法加入游戏,服务器连接错误的问题会发生在所有玩家身上(2-0x0000D012)。这原先是为了保持小队在匹配过程中的完整性,然而过多玩家受到这个错误的影响,触发了一个连锁反应,任何加入曾受这个错误影响的玩家的小队的玩家也同样会受影响。
一旦我们发现并确认了这个问题,我们就能对游戏服务器进行修复,以保证接下来再也不会出现这个问题。
部署修复的详细过程
我们最初的几天都用在基于我们对当前情况的了解,尝试复现这一错误上。不幸的是,这些努力并不成功。无论尝试了多少种延迟、波动、丢包的不同情况,我们都不能完全确定成功找到了这一错误的根源。把时间和资源花在尝试“解决”并非错误根源的问题上只会损害玩家和我们的利益,并且进一步延续错误的存在。
幸运的是,很多玩家向我们伸出了援手。我们和一些错误高发的玩家进行了紧密合作,多亏了他们的慷慨和合作,我们在调查上迈出了一大步。在Debug的第二阶段,我们确信已经找到了问题的根源,可以马上开始真正进行修复。周日晚上之前我们最终确定了修复内容,并且在志愿测试的玩家在周一运行了最终Debug,确认问题不再存在之后,我们确定已经找到了解决方案。修复立刻被安排在下一个工作日部署,也就是周二。
下一步
我们在查明错误根源中遇到的最大的问题是这一错误是与一次大赛季更新共同发布的。这使我们不可能回档,因为这意味着回档整个赛季。
之后,我们正在准备改进更新发布环节,使其允许我们将新内容——尤其是新赛季内容——与低一级的且不会影响到玩家的改动分开发布。这样如果再有相似的问题出现,我们就能够在必要时刻回档。
我们想在这里再一次感谢那些挤出时间帮助我们为整个《彩虹六号:围攻》社区解决问题的玩家。你们是最棒的!
还有,我们正在努力解决全平台玩家的游戏崩溃问题。我们将在补丁3.1解决这些问题中的大部分。
来源:
https://rainbow6.ubisoft.com/siege/en-us/news/152-335044-16/matchmaking-degradation-following-operation-grim-sky
编译:
R6s.cn译制组