细化速率限制

本文概述 Xbox 服务细化速率限制 (FGRL)。 除了概述何谓速率限制以外,本文还帮助您确定是否受到了限制,以及在受到限制时可以选择使用哪些工具和资源。

细化速率限制旨在倡导在不同的游戏中公平使用共享的 Xbox 资源。 该解决方案与大多数传统的限制系统一样,通过一项服务来使实体在给定时间段内提出一定数量的请求。

达到服务规定的限制的实体随后将会进入拒绝状态,其中来自实体的所有传入请求都将被转移。 仅当给定的时间段到期(这会导致实体关联计数重置)时,实体才能够退出此状态。

细化速率限制使用与上述机制相同的核心机制,然而与跟踪一个实体不同,FGRL 将跟踪用户和游戏的组合,并且会将关联计数与两项不同的限制而不是一项限制进行比较。 对每项服务实施 FGRL 双重限制意味着 GameClips 的请求计数不会影响“状态”的请求计数。

以下部分将更详细地介绍用户和游戏配对、双重限制以及 HTTP 429 限制响应对象。

细化速率限制的术语

术语 定义
FGRL 细化速率限制
XSAPI Xbox 服务应用程序编程接口
CU 内容更新
突增 表示在短时间内收到大量请求
持续 表示在一段时间内持续收到大量调用
用户 + 游戏 表示将用户和游戏配对成一个实体
XSTA Xbox 服务跟踪分析器工具,用于确定你的游戏当前是否受到速率限制

公平使用

Xbox 坚信无论每个用户在玩什么游戏(或应用),他/她都应该拥有始终如一的高品质体验。 细化细率限制 (FGRL) 解决了以下情形:

开发者 A 刚刚发布了一款遵循所有 Xbox 服务最佳做法的游戏,可确保以最佳方式使用服务,而开发者 B 刚刚也发布了一款包含未知 bug 的游戏。 此 bug 导致游戏和每个用户向“状态”发送垃圾邮件,从而导致服务不堪重负。 尽管这是开发者 B 的 bug 所导致的问题,但仍会使服务速度降低并最终停止,中断开发者 A 的用户体验。

如果实现了 FGRL,该服务就能够停止接收来自行为不当游戏的请求,从而允许服务为开发者 A 的游戏提供其合理的资源分配。

游戏和用户粒度

所选的游戏和用户对于确保公平使用 Xbox 资源至关重要。

仅跟踪用户将创建一个场景,其中用户体验将受制于每个游戏的集成情况。 例如,大部分游戏都在使用人脉服务,对于此示例,假设已针对人脉服务设置细化速率限制,它允许在 5 分钟内提出不超过 100 次请求。

如果用户要玩在 1 分钟内提出 100 次请求的游戏,那么这会超出限制,用户将无法再向人脉服务提出任何请求;假设在同一时段内,用户随后返回到主屏幕并单击其好友列表:由于用户已经超出了限制,好友列表调用将失败,直到 5 分钟间隔过去为止,即使主屏幕不负责将用户置于受限状态,也会出现这种情况。

仅基于游戏的限制也会产生同样不公平的结果。 为每个游戏设置限制将会忽略游戏的热门程度,并且将按照“先到先得”的原则处理请求,直到达到限制为止。

用户和游戏的配对可确保每个游戏使用的资源不超过为大量活跃用户指定的相应资源量,同时还会为每个用户提供一致的资源份额。

速率限制请求和响应流程图

上图显示了有关如何处理请求的高级视图。 首先生成请求,所需的服务随后会接收该请求。 在收到请求后,系统将进行检查,以查看用户和游戏对该服务进行访问的总次数。

  • 如果请求未超出限制,则系统将按照正常方式进行处理。
  • 如果发现该请求已达到或超出限制,则服务将删除它,并改为返回 429 响应代码。

该响应将指明必须经过多长时间才能处理用户和游戏请求。

突增和持续限制

通常,速率限制包含对每个端点的一个限制,系统将在给定时段内对其进行跟踪。 此时段表示对实体请求计数进行跟踪的时间。 当该时段结束时,实体计数将重置为 0 以重新开始跟踪。

这种方法适用于大多数 API,但是对于调用 Xbox 服务的游戏和应用来说,这种方法不够灵活。 上述解决方案假设相关人员以一致、稳定且可预测的方式进行调用。 在 Xbox 服务案例中,根据服务和提出请求的游戏,调用模式截然不同。

在这种情况下,仅选择一项限制将要求在调用模式范围的两端进行取舍。 Xbox 服务解决方案使用两个时段和限制。 较小的时段称为“突增”时段,而较大、较长的时段则称为“持续”时段。

FGRL 的突增时段始终为 15 秒,而持续时段始终为 300 秒(5 分钟)。 因此在 5 分钟的持续时段内有 20 个突增时段。

系统将同时跟踪突增和持续限制,并同时跟踪计数请求。 为服务设置突增和持续限制意味着每项服务都拥有自己的突增和持续计数。

为了帮助您了解这两项限制如何协同工作,下表显示了正在玩游戏的用户,该游戏将对已实施 FGRL 的服务提出大量请求。 在此案例中,突增限制为在 15 秒内提出 30 次请求,而持续限制则为在 5 分钟内提出 100 次请求。

时间范围(秒) 每个突发周期的请求数 每个持续时段的请求数 在 15 秒间隔内限制的 # 请求数 哪种限制? (突增、持续或两者)
0-15 35 35 5 突增
15-30 28 63 0 不适用
30-45 21 84 0 不适用
45-60 36 120 20 二者
60-75 24 144 24 持续
285-300 4 148 持续

该表显示在前 15 秒内用户通过提出 35 次请求触发了突增限制。 系统将删除这 5 次额外的请求,并发送 5 次 429 响应代码。

尽管这 5 次请求受到限制,但它们仍将计入持续限制。 一旦触发任一限制(如下所示,在 45 秒处触发了两种限制并且在 285 秒处仅提出 4 次请求时再次触发),系统将不允许请求通过。

HTTP 429 响应对象

当关联的用户和游戏计数达到或高于突增或持续限制时,服务将不会处理请求,而是返回 HTTP 429 响应代码。 HTTP 429 代码代表“请求过多”,并且伴随一个包含“X 秒后重试”值的标头。

FGRL 429 响应对象包含“重试间隔”标头,它指定了调用实体在重试之前应等待的时间。 使用 XSAPI 的开发者不必担心,因为 XSAPI 会优先处理该重试间隔标头。

实际响应将包含以下字段:

字段名称 值类型 示例 定义
版本 整型 "version":1
currentRequests 整型 "currentRequests":13 已发送的请求总数
maxRequests 整型 "maxRequests":10 允许的请求总数
periodInSeconds 整型 "periodInSeconds":15 时间窗口
类型 字符串 "type":"burst" 节流限制类型

已实施的限制

下面的服务已实施 FGRL 限制,这些限制从 2016 年 5 月 开始执行。 这些限制在所有沙盒和作品中都是一样的。

通过 Xbox 开发者平台或合作伙伴中心发布并于 2016 年 5 月之前交付的所有作品都将被视为旧版作品,因此将免受限制。

名称 突增限制(每位用户每个作品 15 秒) 持续限制(每位用户每个作品 300 秒) 认证限制(10 倍于持续限制,每位用户每个作品 300 秒)
统计数据读取 100 300 3000
档案 10 30 300
MPSD 30 300 3000
搜索句柄 (MPSD) 读取 1,写入 1 读取 20,写入 20 读取 20,写入 20
MPA 最近互动玩家 3 50 50
MPA 邀请 7 50 50
MPA 活动 创建/删除 10,读取/查询 20 创建/删除 100,读取/查询 200 创建/删除 100,读取/查询 200
状态 读取 10,写入 3 读取 100,写入 30 读取 1000,写入 300
好友动态 10 30 300
排行榜 30 100 1000
成就 100 300 3000
Smart Match 10 100 1000
用户发布 100 300 3000
统计数据写入 100 300 3000
隐私 10 30 300
俱乐部 10 30 300
身份验证(仅适用于 S2S) 15 50 500

上表显示了为 FGRL 选择的当前服务列表。 由于可以添加新服务和现有服务,此列表并非最终列表。 如果即将添加服务,该表将更新,并且会进行公告。

表中的限制可能会发生更改。 随着服务的更改和改进,限制也会随之改变,我们将会通知您并进行必要的旧版豁免。

服务映射和速率限制的作品效果

名称 服务终结点 FGRL 对游戏的可能影响
统计数据读取 userstats.xboxlive.com 无法更新或检索成就或排行榜条目。
档案 profile.xboxlive.com 玩家的数据未更新或显示错误。
MPSD sessiondirectory.xboxlive.com 无法正确完成加入/邀请操作,无法正确创建或更新会话,这些可能导致作品失败。
MPA multiplayeractivity.xboxlive.com 加入/邀请操作无法正确完成,最近互动玩家信息将无法正常工作。
状态 presence.xboxlive.com 玩家在游戏中的状态不准确。
好友动态 social.xboxlive.com 影响所有好友写入(例如添加好友,收藏好友等),并且可能会影响好友读取(例如获取我的好友列表)。 建议开发者调用 peoplehub 进行读取,而不是访问 social.xboxlive.com。
排行榜 leaderboards.xboxlive.com 无法填充/更新排行榜的游戏内 UX。
成就 achievements.xboxlive.com 无法更新已解锁的游戏内成就 UX。
Smart Match momatch.xboxlive.com 无法成功设置匹配。
用户发布 userposts.xboxlive.com 无法显示用户发布内容。
统计数据写入 statswrite.xboxlive.com 无法更新成就或排行榜条目。
隐私 privacy.xboxlive.com 隐私功能失败可能导致阻止所有调用方访问。
俱乐部 Clubhub.xboxlive.com 玩家可能无法查看其游戏内俱乐部。
身份验证(仅适用于 S2S) title.mgt.xboxlive.com 服务到服务呼叫身份验证将失败。

注意:最新 API 映射将会定期更新,请参考 Live 跟踪分析器 API 映射

常见问题

如何确定我已受到限制以及可以采取哪些步骤?

请参阅调用 Xbox 服务的最佳实践,其中包含用于改进调用模式的步骤,并且介绍了如何使用 XSAPI 断言、XSAPI 社交和多人游戏管理器来通知你节流问题并减少这些节流问题。

另一种方法是记录 Xbox 服务调用跟踪,然后使用 Xbox 服务跟踪分析器工具分析该跟踪。 要记录跟踪,您可以使用 Fiddler 记录 .SAZ 文件,或使用 XSAPI 内置跟踪日志记录功能。

若要在 XSAPI 中打开和使用跟踪,请参阅审查服务调用的跟踪分析器。 获得跟踪之后,Xbox 服务跟踪分析器工具将在检测到节流调用时发出警告。

限制是否会发生更改?

设计意图是已发布的限制不会随时间推移而更改。 但是,如果有必要,则可能会让一些限制变得更严格;在这种情况下,已发布到 RETAIL 的游戏将免受更新的限制。

是否会限制更多服务?

是的,将为更多服务和新服务创建限制。 如同首次发布 FGRL 一样,您将会收到通知,并且需要采取适当的预防措施。

这些更改将在何时生效?

速率限制已于 2016 年 5 月起生效。 从 2018 年 4 月起,超出指定持续限制 10 倍(或更高)的作品将无法通过 Xbox 验证过程。

如果无法遵守限制,该怎么办?

请参阅调用 Xbox 服务的最佳实践,确保按照以下步骤操作。 此外,如果在社交服务上受到速率限制,请考虑使用社交管理器

如果在执行这些步骤后仍无法保持在限度之下,请与您的开发者客户经理 (AM)联系。

注意:在 2018 年 4 月之后,将不允许达到或超过指定限制的游戏通过证书。 例如,如果将持续限制设置为上表中指定的 300 秒内 300 次调用,300 秒内超过 3000 次调用的作品将验证失败。 有关包括测试用例在内的详细信息,请参阅 XR-132 服务访问限制

我的现有作品将如何?

2018 年 4 月之前处于 RETAIL 状态的所有作品将被视为旧版作品,免受限制。

内容更新呢?

对于旧版或免受限制的游戏,内容更新也享有豁免权,但我们强烈建议您利用相关工具和资源来对游戏的服务集成方面进行优化。

在进行内容更新之前,我的游戏能否免除限制?

请与您的开发者客户经理联系。