한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 Lag 白皮書 › L13 伺服器架構與維運

配對與區域分配錯誤 Wrong region assignment (matchmaking / GeoDNS)

原因 ID in-region-match · 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發), 基礎設施團隊(網路基礎設施), 外部(外部)

在含圖解與實驗的完整版中開啟卡片 →

沒被分到近的區域、卻被分到遠方區域的伺服器時,即使線路正常,也只有那位玩家的 ping 一直偏高。

為什麼 GeoIP 資料錯誤、VPN、以隊友平均 ping 分配整個隊伍、人數不足時擴大到遠方區域的規則、依 DNS 解析器(resolver)位置分配 → 於是 明明有近的區域,卻連到海外區域的伺服器 → 畫面上 在多個區域設有伺服器的遊戲中,只有我(或只有我們隊伍)ping 一直偏高,出現輸入延遲、拉回、技能被吃

症狀
輸入延遲, 拉回, 吃指令/回檔
因素
延遲
誰會遇到
只有我, 特定地區/電信業者
何時
一直都有, 剛登入/維護剛結束
負責單位
主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發), 基礎設施團隊(網路基礎設施), 外部(外部)
遊戲開發團隊要做的事
伺服器:以用戶端實測的各區域 ping 取代 GeoIP 來分配,擴大到遠方區域的規則要設 ping 上限,隊伍除了平均值也要看最高的隊友 ping,把分配的區域與當時的 ping 記錄到 log。用戶端:用 UDP 測量各區域 ping 並隨配對請求一起送出,在畫面上顯示連線的區域與 ping,提供自行選擇區域的選項。
基礎設施團隊要做的事
若用 DNS 選擇區域,確認權威 DNS 是否支援 EDNS Client Subnet(玩家使用的解析器不傳送時,會依解析器位置分配),定期更新 GeoIP 資料庫,在各區域伺服器的連線 log 加上 GeoIP 國家與 ASN,找出被導向遠方區域的國家與電信業者。
外部要做的事
請玩家關掉 VPN、遊戲加速器後重新連線看看,請使用公司或海外 DNS 的玩家改用電信業者的 DNS 試試,向 GeoIP 業者申請更正錯誤的位置。
數值參考
首爾玩家沒被分到東京、而被分到美國西部區域時,ping 會從約 30ms 增加到約 130ms。GeoIP 以國家為單位約 99.8% 正確,但以城市為單位,即使在美國,落在 50km 內的比例也只有約 66%;使用 VPN 時,查到的會是 VPN 伺服器的位置。
圖表上
只有部分偏高 · 各玩家的 RTT(ping)、分配到的區域分布
查看位置
在各區域伺服器的連線紀錄(負載平衡器存取 log、VPC Flow Logs)中的用戶端 IP 加上 GeoIP 國家與 ASN,依國家、電信業者統計連到哪個區域。若是單一玩家,比較該玩家實際連線的區域,以及到近的區域實測的 ping(由玩家測量,或從該區域伺服器對玩家 IP 執行 mtr)
符合的跡象
RTT 高的玩家或國家沒連到近的區域、而是連到遠方區域,對近的區域實測的 ping 很低
不符合的跡象
已正確分配到近的區域但 ping 仍高時,是繞遠路的路由或該玩家的線路、Wi-Fi 問題
確認方式
用基礎設施工具確認(不需要遊戲程式碼)
深入了解
用 DNS 選擇區域的方式(依地理位置、延遲的 DNS),推測位置時看的是玩家所用 DNS 解析器的位址。解析器若不支援傳遞部分玩家位址的 EDNS Client Subnet,使用公司 DNS 或遠方 DNS 的玩家就會以解析器所在地為準來分配。配對系統也可能以隊友 ping 的平均值判斷整個隊伍,或在等待太久時放寬 ping 標準,分配到遠方區域。AWS GameLift Servers 對隊伍 ping 的預設基準也是平均值,並舉了把 ping 上限從 50ms 放寬到 100ms、200ms 的設定為例。開啟 VPN 的玩家可能同時遇到經過中繼伺服器而增加的延遲(「經由 VPN/遊戲加速器」)與被分配到遠方區域,可以看關掉 VPN 重新連線後分配到的區域是否改變來區分。附近根本沒有區域、只能連到遠方區域的情況,在「傳播延遲(物理距離)」說明。

出處

  1. RFC 7871: Client Subnet in DNS Queries IETF
    依位置給出不同回答的 DNS 會以送出查詢的解析器位址推測位置,使用離玩家很遠的集中式解析器時會得到不適當的回答。以 EDNS Client Subnet(選用功能)傳遞部分玩家位址
  2. How Amazon Route 53 uses EDNS0 to estimate the location of a user AWS
    解析器不支援 edns-client-subnet 時,會以解析器的位址推測玩家位置,依解析器位置回答(地理位置路由與延遲路由皆同)
  3. Geolocation accuracy MaxMind
    國家層級約 99.8%、美國城市層級(50km 內)約 66%;使用 VPN 時得到的是 VPN 伺服器位置;行動網路 IP 在大範圍地區共用,無法得知精細位置;資料庫需要持續更新;可申請更正
  4. FlexMatch rule types AWS
    延遲規則(maxLatency)看各位置的玩家延遲,隊伍預設使用隊友平均值(partyAggregation avg),佇列也可能把玩家放到不符延遲規則的區域
  5. Create a player latency policy AWS
    放到所有玩家平均延遲最低的位置,但延遲極端的玩家也會被放入;把 ping 上限從 50ms 放寬到 100ms、200ms 的政策範例
  6. Amazon GameLift Servers UDP ping beacons AWS
    遊戲用戶端對各託管位置的 UDP 端點測量延遲,用於放置與配對,比 ICMP ping 更接近實際遊戲流量
  7. Azure network round-trip latency statistics Microsoft Azure
    以首爾(Korea Central)為起點的實測往返中位數:東京(Japan East)29ms、美國西部 124~136ms
  8. Flow log records AWS
    VPC Flow Logs 紀錄的 srcaddr:傳入流量時為送出端的 IP 位址

相關原因

同一層:L13 伺服器架構與維運

同一症狀(輸入延遲)在其他層的原因

查看含圖解與實驗的完整版卡片