精細速率限制的術語
公平使用
XBOX 認為,無論使用者正在玩什麼遊戲 (或應用程式),每位使用者都應該擁有相同的高品質體驗。 精細速率限制 (FGRL) 解決了下列案例: 開發人員 A 剛發行了一款遵循所有 XBOX 服務最佳做法、確保服務最佳使用的遊戲,而開發人員 B 也剛發行了一款遊戲,但這款遊戲有一個未知的錯誤。 此錯誤導致遊戲和每位使用者大量傳送線上狀態要求,使服務承受沉重的負載。 服務變慢並最終停止,破壞了開發人員 A 之使用者的體驗,即使造成問題的是開發人員 B 的錯誤。 如果實作了 FGRL,服務就能停止接收來自行為異常之遊戲的要求,讓它能為開發人員 A 的遊戲提供其應得的公平資源份額。遊戲和使用者細微度
選擇遊戲和使用者作為索引鍵,是為了確保公平使用 XBOX 資源。 只追蹤使用者會造成使用者體驗受制於每個遊戲之整合的情況。 例如,大多數遊戲都已在使用 People 服務,因此就此範例而言,假設在 People 服務上設定了精細速率限制,允許 5 分鐘內不超過 100 個要求。 如果使用者玩的遊戲在 1 分鐘內提出 100 個要求,就會超過限制,使用者將無法再對 People 服務提出任何要求;想像一下,在同一期間內,使用者接著返回主畫面並按一下其好友清單:由於使用者已經超過限制,該好友清單呼叫會失敗,直到 5 分鐘的間隔過去為止,即使主畫面並不是讓使用者處於受限狀態的原因。 另一方面,只根據遊戲進行限制也會產生同樣不公平的結果。 為每個遊戲設定限制會忽略遊戲的熱門程度,而要求只會以先到先服務的方式處理,直到達到限制為止。 使用者和遊戲的配對可確保任何遊戲使用的資源都不會超過根據作用中使用者數目而言適當的資源,同時也為每位使用者提供一致的資源份額。
- 如果要求低於限制,則會正常處理。
- 如果發現要求已達到或超過限制,服務會捨棄該要求,並改為傳回 429 回應。
高載和持續限制
傳統上,速率限制包含每個端點一個在指定期間內追蹤的限制。 此期間代表追蹤實體要求計數的時間長度。 期間結束時,實體的計數會重設為 0,以重新開始追蹤。 這種方法適用於大多數 API;不過,對於呼叫 XBOX 服務的遊戲和應用程式而言,這種方法的復原能力不足。 上述解決方案假設人們以一致、穩定、可預測的方式進行呼叫。 在 XBOX 服務的情況下,根據服務和提出要求的遊戲,呼叫模式會有很大的差異。 在此情況下只選擇一個限制,將需要在呼叫模式範圍的兩端都做出妥協。 XBOX 服務解決方案使用兩個期間和限制。 較短的期間稱為高載期間,而較長的期間則稱為持續期間。 FGRL 的高載期間一律為 15 秒,而持續期間一律為 300 秒 (5 分鐘)。 因此,在 5 分鐘的持續期間內,有 20 個高載期間。 高載和持續限制會同時追蹤,因此會同時計算要求。 高載和持續限制都設定在服務上,這表示每個服務都有自己的高載和持續計數。 為了協助您了解這兩個限制如何一起運作,下表顯示使用者在玩某個遊戲時,該遊戲對已實作 FGRL 的服務提出多個要求的情況。 在此案例中,高載限制為 15 秒內 30 個要求,而持續限制為 5 分鐘內 100 個要求。
此表格顯示,在前 15 秒內,使用者提出 35 個要求而觸發了高載限制。
那 5 個額外的要求會遭到捨棄,並傳送 5 個 429 回應。
這 5 個要求雖然遭到節流,但仍會計入持續限制。
一旦觸發任一限制,就不會讓任何要求通過,如兩個限制在第 45 秒時都被觸發,以及在第 285 秒時只提出 4 個要求的情況所示。
HTTP 429 回應物件
當相關的使用者和遊戲計數達到或超過高載或持續限制時,服務將不會處理該要求,而是傳回 HTTP 429 回應。使用 XSAPI 時,這相當於 HRESULT 0x801901AD。 HTTP 429 代碼代表「要求過多」,並會隨附包含「在 X 秒後重試」值的標頭。 FGRL 429 回應物件包含 “retry after” 標頭,指定呼叫實體在重試之前應等待的時間長度。 使用 XSAPI 的開發人員不必擔心,因為 XSAPI 會遵守並處理 Retry-After 標頭。 實際的回應會包含下列欄位:已實作的限制
下列服務已實作 FGRL 限制,且自 2016 年 5 月起已強制執行這些限制。 這些限制在所有沙箱和遊戲中都相同。 任何透過 XBOX 開發人員平台或 Partner Center 發佈,且在 2016 年 5 月之前出貨的遊戲,都會被視為舊版,因此予以豁免。
上表代表目前選定進行 FGRL 的服務清單。
此清單並非最終版本,因為可以新增新的服務和現有的服務。
當即將新增某個服務時,將會更新此表格並發出公告。
表格中的限制可能會變更。
隨著服務的變更和演進,限制也會隨之變更;不過,您會收到通知,且會進行必要的舊版豁免。
服務對應和速率限制對遊戲的影響
**注意:**最新的 API 對應會定期更新,您可以在 Live Trace Analyzer API 對應下找到。
