理解 PlayFab 限流
PlayFab 使用固定窗口速率限制算法。 对 PlayFab 发出的每个 API 请求都会被转换为一个“键”。此键的值取决于 API 请求标头和请求正文的内容。每次 API 调用都会使其对应键的计数递增。 如果某个特定键在设定的时间段内发出的 API 请求超过允许数量(速率限制),使用该键的任何后续请求都会被限流。PlayFab 如何确定特定 API 请求的键
游戏范围 API 速率限制
键是游戏 ID。命名空间范围 API 速率限制
键是命名空间 ID。按实体的 API 速率限制
- 对于未经身份验证/匿名的 API(例如
LoginWith[Platform]API),键是客户端的 IP 地址。 - 对于经过身份验证的 API:键取决于请求标头和请求正文(它们用于确定 API 的调用实体和目标实体)。
- API 的调用实体是与
X-Authorization令牌关联的实体。 - API 的目标实体在请求正文中定义,并因 API 而异。若要确定哪个实体是目标,请查看该特定 API 的请求正文。例如,GetUserData API 支持在其请求正文中使用 PlayFabId 指定不同的实体。
- 如果 API 的正文中未指定目标实体,则键是该调用实体的实体 ID。
- 如果 API 的正文中指定了目标实体:
- 如果调用实体是 MasterPlayerAccount、TitlePlayerAccount 或 Character 实体类型(例如,该 API 使用与这些实体类型之一关联的
X-Authorization令牌进行了身份验证),则键是调用实体的 ID。 - 如果调用实体不是上述任何实体类型,则键变为目标实体的 ID。
- 如果调用实体是 MasterPlayerAccount、TitlePlayerAccount 或 Character 实体类型(例如,该 API 使用与这些实体类型之一关联的
- API 的调用实体是与
- IP 地址为 23.192.228.80 的客户端调用
Client/LoginWith[Platform]API。该 API 请求的键是 23.192.228.80。 - 客户端调用
Client/LinkCustomID并提供一个X-Authorization令牌,该令牌对应于主玩家账户 ID 408C36ADC841C0CD。该 API 的请求正文中未提及其他实体 ID。该 API 请求的键为 408C36ADC841C0CD。 - 客户端调用
Client/GetUserPublisherData并提供一个X-Authorization令牌,该令牌对应于主玩家账户 ID D5491A06D715E817。在请求正文中,客户端提供了主玩家账户 25254A5AC4AEBA55 的值(例如,请求正文包含 PlayFabId:25254A5AC4AEBA55)。该 API 请求的键为 D5491A06D715E817,因为此处的调用实体是主玩家账户。 - 客户端调用
Client/GetUserPublisherData并提供一个X-Authorization令牌,该令牌对应于游戏 ID 123。在请求正文中,客户端提供了主玩家账户 25254A5AC4AEBA55 的值(例如,请求正文包含 PlayFabId:25254A5AC4AEBA55)。该 API 请求的键为 25254A5AC4AEBA55,因为此处的调用实体是一个游戏。
目标实体限流的优势
目标实体限流是一种基于所针对实体类型对特定操作施加限制的机制。这些限制有助于维持系统稳定并防止滥用,为用户带来:- 一致的每玩家限制:游戏规模扩大不会影响单个玩家的限制,使游戏能够扩展其玩家群体,而无需担心基于玩家数量的容量限制。
- 统一的玩家限流:无论游戏中活跃用户数量多少,玩家都会体验到相同的限流限制,使开发者即使在用户群较小的情况下也能及早发现限流问题。
- 服务稳定性:限流可防止单个玩家的流量压垮或对 PlayFab 服务或多个游戏共享的特定数据平面分区造成负面影响。
