使用 Amazon GameLift 服务器微调玩家延迟

作者: Brian Schuster |

如果你推出了一款在线多人游戏,你就会意识到很少有事情像论坛对延迟的抱怨那样令人沮丧(甚至是不可避免的)。将你可能影响的问题(服务器的距离或代码优化)与你无法控制的问题(硬件规模过小或玩家端的网络问题)区分开来通常很困难。

我们将介绍如何利用 Amazon GameLift 服务器提供的功能来衡量和改善游戏的延迟。Amazon GameLift Servers 用于在云端部署、运营和扩展专用的低成本服务器,用于基于会话的多人游戏。通过分析模拟玩家流量模式和不同的区域部署配置,我们将演示优化玩家游戏体验的实用解决方案。

游戏成功上线

游戏开发完成后,它终于发布了,并且正在快速增长:您的安装量超出了预期,并且您的并发用户 (CCU) 经常达到峰值,超过 30 万人。但是,一部分玩家一直在报告延迟和响应问题。你知道这可能是几种不同的原因中的任何一个,从玩家本地的互联网状况,到普遍的互联网问题,再到未优化的服务器代码。

你如何确定原因是否是你可以控制的?你需要做些什么来确保玩家获得尽可能好的体验?

第一步是确保测量玩家到游戏服务器位置的延迟。Amazon GameLift 服务器可以帮助使用 UDP ping 信标。Amazon GameLift 服务器的信标终端节点可在亚马逊云科技全球区域和本地区域使用。无论您的游戏服务器部署在何处,您都可以准确测量玩家到服务器的延迟。由于大多数延迟敏感游戏都使用 UDP 协议,因此 UDP ping 信标提供真实的延迟测量结果。

使用我们的优秀实践和示例代码时,实现非常简单。借助来自这些信标的准确延迟数据,您可以创建更公平的配对体验并减少玩家连接不佳的情况。如果玩家在游戏中以 30 毫秒的速度对某个区域进行 ping 操作,那将是令人沮丧的——准确的延迟测量是避免此类情况的关键。

请注意,衡量您当前未运营的位置的延迟可能很有用。这有助于确定潜在的额外位置,这些位置可能会改善玩家的延迟,提高玩家群的幸福感。

地区选择

为游戏会话选择优秀区域在服务器管理中至关重要,但需要仔细考虑权衡利弊。Amazon GameLift 服务器提供对 32 个区域和本地区域(这个数字还在继续增长)的访问,从而为更多玩家提供更低延迟的体验。但是,当将玩家定位到最快的位置时,在超出必要的地点进行操作可能会使配对池分崩离析,从而延长比赛时间。

例如,从单个区域变为十个均匀分布的区域可能意味着每个区域现在有 10% 的玩家需要搜索比赛。这可能会使人们难以满足所需的属性,例如首选的游戏模式、技能的均匀性,甚至难以让足够的玩家填写游戏。此外,将游戏会话分布在多个较少使用的位置上,而不是将其整合到附近的地点,可能会导致空闲服务器容量过多。

那么,你应该使用多少区域来运行游戏服务器呢?

为了演示其影响,让我们来模拟一款 5v5 300 K CCU 游戏的配对。玩家的位置和延迟测量结果可以模拟到每个潜在的服务器区域。应该组织比赛,尝试将玩家置于延迟较低的区域之一。

图 1 显示了在各种区域设置中进行各种延迟测量的玩家百分比。从 50 毫秒延迟的目标来看,我们发现一个区域会导致 30% 的玩家达到这个阈值,而三区域设置会导致 63% 的玩家达到这个阈值。需要注意的一件事是,玩家体验的改善显示回报在减少。虽然添加第九个区域会导致额外 5% 的玩家达到 50 毫秒(或更好)的延迟,但随着我们的进一步发展,改进微乎其微,这意味着玩家的改善幅度较小。

图 1:使用不同区域数设置的模拟 300 K 玩家游戏的延迟百分位数图表。1、2、3、4、5、7、9 和 12 个区域有百分比。

图 1:不同区域计数的延迟百分位数(大型游戏)。

需要注意的另一件事是,只有当你有足够的区域本地玩家来填满游戏时,添加第七或第八个区域才有用。这提供了你需要为游戏做出的决定。你愿意接受更长的等待时间让玩家提高游戏的响应能力吗?这是一个判断决定,需要根据各种因素做出,包括游戏的延迟敏感度和玩家人数。

相比之下,图 2 模拟了相同的设置,只有 3 K CCU 的数量要少得多。数据显示少量区域的延迟曲线相似,但添加更多区域无法达到与 300 K 设置中观察到的相同的延迟改善。这是因为玩家加入率不够快,无法填满这些游戏,你必须设法将这些玩家放到不太理想的区域。一个重要的观察结果是,在两次测试中可以达到相同的延迟,但在 3 K CCU 的情况下,需要等待多达 100 倍的时间才能填满那些较小的区域。

图 2:使用不同区域数设置的模拟 3K 玩家游戏的延迟百分位数图表。1、2、3、4、5、6、7 和 8 个区域有百分比。

图 2:不同区域计数的延迟百分位数(小型游戏)。

最后,问题是你应该选择哪些地区?

对于所讨论的示例,区域选择的顺序是基于对玩家模拟延迟数据的分析。在现实世界中,你通常需要从至少几个主要地理区域的服务器开始,然后根据对玩家延迟数据的分析(由 UDP Ping Beacons 测量)进行扩展。

根据十年来为我们的客户托管数百款游戏的经验,以下是一些一般性指导作为起点:

  • 三四个区域是一个很好的基础,适用于大多数游戏
  • 这些领域中的每一个领域都与对我们的客户有用的领域相吻合:
    • 北美(例如:us-east-2 或 us-west-2)
    • 欧洲(例如:eu-central-1 或 eu-west-2)
    • 亚太地区(例如:ap-northeast-1 或 ap-northeast-2)
  • 添加更多区域:
    • 如果数据显示延迟有所改善,这将有利于玩家的体验
    • 如果你的游戏人口足够大,可以避免碎片化问题

如图所示,庞大的玩家基础将让你认真考虑更多区域。你可以通过研究现有区域不在玩家最快的 N 个区域中出现的情况来评估这一点。这里 N 由游戏的延迟要求决定——延迟关键游戏的延迟要求越低,容忍度更高的游戏的延迟要求越高。例如,如果你在三个区域中发现 60% 的玩家没有将其中一个区域作为他们最快的两个或三个区域,那么你可能会做得更好。然后,您将优先扩展到这 60% 中最常见的地区。

请注意,即使游戏人口规模相同,也没有一个适合所有人的优秀答案。玩家人数较少的游戏(玩家对玩家)会发现在不太常见的地区填补游戏的速度更快,而南美的强劲地区知名度可能意味着那里的存在至关重要。

确定普遍存在的问题

通过使用 UDP ping 信标,您可以获得所有玩家的准确延迟测量结果,并能够使用这些数据在全球范围内合理和优秀地分配游戏服务器。这是一个不错的开端——只要有可能,你就可以将玩家安置在离他们最近的游戏服务器上,为他们提供获得积极体验的优秀机会。在不可能的情况下,你现在可以通过测量结果来确定玩家在游戏过程中何时可能遇到延迟问题。

但是,如果你不确定游戏缺点是由服务器端问题还是玩家端问题引起的情况呢?或者更不在你的控制范围内,如果有广泛的互联网问题影响你的游戏怎么办?如果从服务器的角度来看,一切看起来都很灵敏,但玩家的抱怨仍然存在,这可能会非常令人沮丧。

调查特定玩家延迟投诉的起点是了解他们在游戏会话区域的延迟测量结果。如果您使用的是 Amazon GameLift Servers 队列,则可以从展示位置编号和玩家 ID 开始,使用描述游戏会话放置 API 快速查找延迟。

以下是可以提取玩家延迟时间的 python 脚本,用于提交特定的放置请求:

#!/usr/bin/env python3
import boto3
import csv
import sys
from collections import defaultdict

client = boto3.client('gamelift')
placement_data = client.describe_game_session_placement(PlacementId=sys.argv[1])

players = defaultdict(dict)
regions = set()

for p in placement_data['GameSessionPlacement']['PlayerLatencies']:
    players[p['PlayerId']][p['RegionIdentifier']] = p['LatencyInMilliseconds']
    regions.add(p['RegionIdentifier'])

regions = sorted(regions)
writer = csv.writer(sys.stdout)
writer.writerow(['PlayerId'] + regions)
for pid, latencies in players.items():
    writer.writerow([pid] + [latencies.get(r, '') for r in regions])

运行此脚本将为您提供类似于以下内容的输出:

> python3 parse_latencies.py 4484032d-f3ca-4496-b663-31f842f0123d
PlayerId,ap-northeast-1,eu-central-1,eu-west-2,us-east-2,us-west-2
player-312,42.0,74.0,65.0,113.0,70.0
player-441,94.0,98.0,113.0,144.0,122.0

从输出中,您可以看到该游戏会话中每个玩家的延迟(以毫秒为单位)。首先要看的是主办游戏会话的地区。根据示例输出,ap-northeast-1 的平均延迟似乎最低。两位玩家的延迟之间存在相当大的差异——这个差异可能值得在配对中通过支持延迟平价来解决。你还可以看到,无论哪个区域托管游戏会话,player-441 都会获得相对较高的延迟体验。如果这是玩家抱怨的,那么你可以改善他们的体验的程度可能会受到限制。

要考虑的另一件事是,优秀选择区域是否是您当前未运行服务器的区域。如果你看到这种模式很常见,那么你很可能已经确定了区域扩张的绝佳候选者。最后,对于超出单个玩家或游戏会话范围的问题,您可以将玩家延迟数据输入分析解决方案以进行更深入的分析(我们建议使用亚马逊云科技游戏分析管道指南)。

Amazon GameLift 服务器可供你使用的另一种解决方案是 Amazon CloudWatch Internet Monitor。互联网监视器可以衡量广泛的互联网性能及其对游戏的影响。因此,Internet Monitor 可以识别更广泛的互联网中的问题,并建议其他或备用区域作为容量,这可能会显著改善玩家的延迟。虽然默认禁用互联网监控,但 Amazon GameLift Servers 能够与客户合作将其启用,并且可以建议改进游戏的地理覆盖范围。

图 3 中的示例显示了一些延迟建议,这些建议有可能改善客户延迟。它以第一字节时间 (TTFB) 来衡量延迟,并按总流量排序,因此您可以专注于影响最多玩家数量的变化。尽管可以稍微优化其他地点的流量,但来自佛罗里达州克雷斯特维尤地区的玩家有可能通过将这些玩家引导到 us-east-1 而不是 eu-central-1 来实现巨大改善(从 139 毫秒下降到 36 毫秒)。

图 3:来自不同位置的流量,以及为降低延迟而建议的服务器位置更改。有客户位置、总流量、设置建议、TTFB 更改(秒)和 TTFB 变化百分比等列。前三项建议为:1) 土耳其伊斯坦布尔伊斯坦布尔;285.62 MB;eu-central-1-> eu-south-1;48 ms-> 46 ms;-3% 延迟 2) 爱尔兰伦斯特都柏林;268.44 MB;eu-central-1-> eu-west-1;37 ms-> 13 ms;-65% 延迟 3) 沙特阿拉伯利雅得地区利雅得;264.8 MB;-central-1-> me-south -1;120 ms-> 78 ms;-55% 延迟全屏列表仍在继续。有一些带有绿色勾号的标记,表明它们已按原样进行了优化。这些复选标记显示在

图 3:互联网监控器延迟减少建议。

互联网监控器还可用于识别影响互联网广泛健康的问题。这对于解决不良的玩家体验和验证问题是否超出您的控制范围可能很有价值。图 4 是影响意大利客户的活跃问题的示例。如果你在这段时间有几位玩家抱怨游戏玩法,那么你将获得确认影响并将这些信息传达给玩家所需的信息。这种开放的沟通可以向玩家证明您可以有效地管理运营,并有助于建立长期忠诚度。

图 4:显示最近互联网中断位置的全球地图。意大利上空有一个圆圈显示它可用。地图右侧有一列写有受影响的城市网络。这表明总共有41个城市网络受到影响。针对特定地点的 ASN、事件类型或地点,有一个筛选互联网事件选项。它显示,位于意大利莱切的沃达丰意大利有限公司(ASN 30722)在过去的7个小时内出现了可用性问题。位于巴基斯坦巴哈瓦尔布尔的网络互联网服务私人有限公司(ASN 9541)过去曾遇到过可用性问题,持续7小时,持续9分钟。可以滚动浏览受影响的城市网络列表。

图 4:主要互联网中断的互联网监控器地图。

摘要

我们探讨了如何使用 Amazon GameLift 服务器有效地排除和解决游戏中的延迟问题。我们表明,UDP ping 信标对于测量所有亚马逊云科技全球区域和本地区域的玩家到服务器的延迟至关重要,可帮助您做出有关服务器布局和配对的数据驱动决策。

我们演示了您运营的区域数量如何影响玩家体验,随着您添加更多区域,回报会减少,以及这一决定需要如何与您的 CCU 和配对要求保持平衡。通过模拟,我们可视化了不同区域配置对大(300 K CCU)和较小(3 K CCU)玩家群体的影响。

我们还重点介绍了如何利用 Amazon CloudWatch 网络监控来识别普遍存在的互联网问题,并为您的玩家推荐优秀区域配置。这可以帮助您保持社区的透明度,并提供优秀的游戏体验。

下一步利用 UDP ping 信标,优化游戏的区域足迹和玩家体验。

联系亚马逊云科技代表,了解我们如何帮助优化您的游戏性能,并询问如何使用 Amazon GameLift 服务器加入 Internet Monitor。

进一步阅读

  • 更新的游戏分析管道
  • Amazon GameLift 服务器入门
  • Amazon GameLift Servers 服务地点


布莱恩·舒斯特

Brian Schuster

布莱恩·舒斯特是 Amazon GameLift 的亚马逊云科技首席工程师,负责制定该服务的技术方向。他专注于推动可用性和可扩展性领域的改进,以支持大型游戏最苛刻的要求。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。