近幾天,《英雄聯(lián)盟》MSI可謂風(fēng)波不斷,先是RNG戰(zhàn)隊因延遲問題被判重賽引發(fā)國內(nèi)網(wǎng)友強烈不滿,RNG頗為給力三場重賽全勝掀起網(wǎng)友熱議。再是昨日T1對陣SGB的比賽中,T1上單Zeus第一視角畫面顯示其延遲僅有21ms,讓拳頭再次登上熱搜。今日(5月17日)拳頭游戲官方發(fā)長文回應(yīng)本次2022季中冠軍賽出現(xiàn)的一系列技術(shù)問題。
總結(jié):
1.在上海的選手屏幕顯示的 ping值是正確的
2.在釜山場館的選手屏幕顯示的 ping值不正確,并且比實際延遲低約13ms
3.未能及時發(fā)現(xiàn)的漏洞影響了比賽,對ping值顯示錯誤問題的溝通也不夠及時透明。再次對此造成的問題和困擾致以深深的歉意。
概述
在過去的幾天,拳頭游戲電競技術(shù)團隊在努力解決圍繞著2022季中冠軍賽的一系列技術(shù)問題,尤其在我們用來為線下選手和遠程參賽選手平衡ping值的工具上。
我們初次發(fā)現(xiàn)的問題是一個存在于我們稱之為“延遲服務(wù)工具”中的錯誤 -這個工具是用來將所有參賽選手的延遲(ping值)調(diào)整到 35ms范圍, 而該錯誤會使在釜山場館中的選手在比賽時產(chǎn)生額外的延遲,并使得其實際延遲高于場館現(xiàn)場電腦屏幕上顯示的延遲(35ms)。因此,在遠程對局中,在中國的選手是在 35ms ping值區(qū)間進行比賽的,但在釜山的選手ping值則較之更高。很不幸,我們并沒有在季中冠軍賽開始之前發(fā)現(xiàn)這個問題,其根本原因是一個代碼漏洞錯誤計算了延遲,導(dǎo)致該數(shù)值在日志中也是錯誤的。因此,即使我們的監(jiān)控顯示一切正常,而實際上卻存在著錯誤。
我們在5月13日對該延遲服務(wù)工具進行了配置修改,以解決這個漏洞。考慮到之前實際網(wǎng)絡(luò)延遲增加對釜山場館中的比賽造成的影響,我們做出了艱難但是必要的決定:對B組對局ping值不相同的三場比賽進行重賽。
然而,5月13日這一配置修改帶來的另一個問題是,現(xiàn)在在釜山選手電腦屏幕上顯示的是錯誤的、低于實際 ping值的數(shù)字 ——盡管實際ping值現(xiàn)在已被修正并確保對等。 其后果是,當我們播放選手屏幕畫面時,屏幕上會呈現(xiàn)一個錯誤的較低的 ping值。同時,由于我們團隊沒能及時將這個外顯誤差進行有效溝通,故而觀眾會認為在場館里的選手正在以低于他們實際延遲的ping值進行比賽。
本篇文章將從技術(shù)角度復(fù)盤從賽前到現(xiàn)在(小組賽結(jié)束)發(fā)生的整個情況。
賽前階段
當我們開始計劃今年季中冠軍賽最后階段的技術(shù)設(shè)置時,新冠疫情帶來的持續(xù)挑戰(zhàn)擺在了我們面前。LPL賽區(qū)代表隊,Royal Never Give Up (RNG) 不會從上海前往釜山,而會遠程參賽。
表面上看,簡單的解決方案是讓遠程參賽的隊伍連到季中冠軍賽比賽服務(wù)器就行,其他隊伍在線下進行比賽。然而這樣的解決方案也并不理想,存在諸多問題。
問題之一就是釜山和上海之間相隔大概 850 公里(中間隔著黃海)。這意味著,網(wǎng)絡(luò)通信需要在上海和韓國的季中冠軍賽比賽服務(wù)器之間來回傳輸。
數(shù)據(jù)在客戶端和服務(wù)器間往返傳輸所需的時間就是我們常說的“ping值”(又稱為延遲)。從 RNG 俱樂部所在地到季中冠軍賽的比賽服務(wù)器,大約自然延遲是 35毫秒(ms) 。 而且其他十支參賽隊伍會在釜山的比賽場館里參賽,他們的延遲會低很多,大約在 15ms左右。請注意,我們本文里的ping值通常都指一個范圍,因為ping值常會在+/-5ms的極小范圍內(nèi)波動。
如果是一名普通《英雄聯(lián)盟》玩家,35ms 到 15ms 之間的差異或許是很難察覺到的。但對職業(yè)選手來說,這足以改變比賽手感,產(chǎn)生細微但仍能察覺到的差異。拳頭游戲電競賽事核心原則中的一條,就是保證競賽公平性。我們希望讓所有參賽的隊伍,能夠在平等競技條件下競賽。
既然說到平等競賽環(huán)境,那我們說明一下ping值差異問題。
讓遠程參賽成為可能
因為電競賽事是在網(wǎng)絡(luò)上進行的,我們希望能尋找一些遠程參賽的辦法。
但隨之而來的兩個問題是:
?。?)上海和釜山之間 35ms 的延遲是否能夠保證最高水準的競技發(fā)揮?
?。?)我們是否能提供同等競賽環(huán)境,讓所有選手都有相同的延遲?
對于第一個問題的回答是:“是”。對于英雄聯(lián)盟電競賽事來說,在最高級別的比賽中,我們認為最高可忍受的延遲極限為 40ms(上下浮動5ms)。 通過與內(nèi)部和外部合作伙伴,包括我們內(nèi)部的游戲分析和設(shè)計團隊的深入討論和分析,我們在2020年中確認了這個范圍。當ping值超過40ms范圍時,大部分職業(yè)選手會開始注意到延遲,它也開始影響諸如英雄選擇、技能釋放以及對對手的操作做出快速反應(yīng)的能力。
對于第二個問題的回答,我們考慮了以下幾個方案:
方案一:每支隊伍都在自然延遲下進行比賽
該方案建議,遠程參賽隊可自行選擇所擁有的最快速網(wǎng)絡(luò),直連到季中冠軍賽比賽服務(wù)器。這意味著現(xiàn)場參賽隊伍會在低 ping值(~15ms)下比賽,而遠程參賽隊伍(以RNG為例)則要在其自然延遲下比賽。從中國連接到釜山的自然延遲約為 35ms。
我們考慮過,但還是否決了這個方案。因為基于競賽公平性的原則,我們希望保證對每個參賽隊伍的公平。
方案二:將服務(wù)器架設(shè)于韓國和中國的中間點
還有一種解決方案是,如果中韓兩國之間的ping值是 35ms,直接把服務(wù)器放在兩地中心點,延遲均分,不就各自只有 17.5ms 了嗎?實際上這個方案的實施仍然具有諸多挑戰(zhàn)…其中一個最大的問題是,要在汪洋大海中間架設(shè)服務(wù)器。
方案三:使用人工延遲
所以如果在韓國參賽的隊伍ping值很低,而在中國參賽的隊伍ping值又相對較高,那給韓國那邊加上一些延遲使兩邊對等,這可行嗎?我們能做到嗎?
事實證明,《英雄聯(lián)盟》的開發(fā)團隊已經(jīng)有了一種引入人工延遲的方法,即延遲服務(wù)(Latency Service)。也有人叫它:“假ping”。這是一種客戶端/服務(wù)器功能,旨在解決疫情下,遠程競賽需要公平競賽環(huán)境的需求。延遲服務(wù)允許我們設(shè)置一個目標值(如 35ms),它會在客戶端和服務(wù)器上為每個玩家加入延遲,使大家保持基本相同的延遲水平。
我們曾成功地在過去一些英雄聯(lián)盟電競賽事里運用了該工具,當時的比賽都是遠程進行的。但這次是首次在全球性賽事上使用這一工具,并且其中部分選手還在釜山本地場館進行對局。雖然我們之前使用過,但環(huán)境中的部分細微差異總有可能造成我們無法預(yù)見的錯誤。在訓(xùn)練賽服務(wù)器上的人工延遲應(yīng)用效果比較理想,再加上我們長期使用的可靠網(wǎng)絡(luò)基礎(chǔ)設(shè)施和測試方法,我們當時認為已經(jīng)有足夠多的應(yīng)用實例,能在小組賽階段之前發(fā)現(xiàn)所有的重大問題。
我們的選擇
再三衡量各種方案后,我們認為最重要的是保證競賽公平性,那么使用方案三 - 人工延遲便是最好的解決方案。
了解人工延遲:它的工作原理
延遲服務(wù)工具內(nèi)置在《英雄聯(lián)盟》的本地客戶端/服務(wù)器端的網(wǎng)絡(luò)協(xié)議棧中。它會持續(xù)測量每個玩家和服務(wù)器之間的實際網(wǎng)絡(luò)延遲,根據(jù)需要,通過添加延遲進行調(diào)整,以達到目標延遲值。這是一種客戶端/服務(wù)器端解決方案,目的是通過引入延遲來保證雙方的延遲均等。
上圖顯示了系統(tǒng)的各個組件。圖片頂部是游戲服務(wù)器組件,底部是游戲客戶端(選手的電腦)。在目前這種情況下,延遲服務(wù)的目標延遲值為 35ms。圖中的紅色箭頭表示存在的實際網(wǎng)絡(luò)延遲。正如所看到的,釜山的選手 1 和選手 2 顯示為 15ms 的“真實”ping值,而上海的選手 10 顯示為 35ms的ping值。黃色框表示在客戶端和服務(wù)器端人為添加了多少延遲。在這種情況下,選手 1 和選手 2 分別向客戶端和服務(wù)器端添加了 10ms 的延遲,達到了目標延遲 35 ms。選手 10 已經(jīng)具有等于目標延遲 35 ms 的實際延遲,因此沒有添加延遲(0ms)。
同等競賽環(huán)境還是兩個不同的競賽環(huán)境?
想要深入了解這一話題,可能要提起我們曾經(jīng)對于遠程環(huán)境和本地環(huán)境所做的一個決定。
對于電競賽事技術(shù)團隊來說,我們一直追求把現(xiàn)場賽事的風(fēng)險降到最低。2012年洛杉磯,第二屆全球總決賽比賽因網(wǎng)絡(luò)問題被迫中斷。這段回憶,將永遠烙刻在所有拳頭電競?cè)诵闹小?nbsp;
在決定2022 季中冠軍賽的網(wǎng)絡(luò)架構(gòu)設(shè)計時,我們意識到必須在兩種不同的策略之間做出決定。
策略一:所有場景下使用同等種網(wǎng)絡(luò)架構(gòu)設(shè)計
在國際比賽中,我們的競技比賽都是在使用場館內(nèi)的線下服務(wù)器上。這為我們提供了高度的可靠性,因為它允許我們直接控制網(wǎng)絡(luò)和服務(wù)器硬件。考慮到有一支隊伍遠程參賽,那么就必須構(gòu)筑這樣一個場景:至少會有一支隊伍將通過互聯(lián)網(wǎng)服務(wù)器進行比賽。那么如果有一支隊伍需要通過互聯(lián)網(wǎng)服務(wù)器參賽,一個策略就是徹底放棄我們的本地部署,轉(zhuǎn)而讓所有隊伍都通過互聯(lián)網(wǎng)服務(wù)器進行比賽。
鑒于穩(wěn)定性原則,我們知道如果必須架設(shè)互聯(lián)網(wǎng)比賽服務(wù)器,那就要選擇十分信得過的部署方案。很顯然,韓國的比賽服務(wù)器是值得考慮的選擇。這是一個僅供職業(yè)比賽使用的環(huán)境,和韓國公共服務(wù)器位于同一數(shù)據(jù)中心,并常用于LCK韓國聯(lián)賽。同樣這也意味著這個服務(wù)器有無數(shù)小時的運行數(shù)據(jù)來驗證其網(wǎng)絡(luò)的良好連通性和架構(gòu)的可信賴性。所以當至少有一支隊伍需要遠程參賽時,用這個節(jié)點是合理的。但接下來的問題是,是應(yīng)該在所有比賽中使用它,還是只針對遠程比賽使用。這便引出了策略二:最小化網(wǎng)絡(luò)風(fēng)險。
策略二:僅在必要時使用遠程參賽,最小化網(wǎng)絡(luò)風(fēng)險
在之前的策略中,考慮到某些比賽需要在互聯(lián)網(wǎng)環(huán)境中進行,那么問題就變成了:“何不統(tǒng)統(tǒng)放在這個環(huán)境下呢?”這個答案很簡單:互聯(lián)網(wǎng)的可靠性?;ヂ?lián)網(wǎng)有時候風(fēng)平浪靜,有時候則未必。如果所有季中冠軍賽比賽都在互聯(lián)網(wǎng)服務(wù)器上進行,那么任何網(wǎng)絡(luò)問題都可能導(dǎo)致比賽在進行中出現(xiàn)問題。如果只是遠程比賽通過互聯(lián)網(wǎng)進行,那網(wǎng)絡(luò)出現(xiàn)問題的概率就會大大降低。我們相信通過我們的計劃,能夠?qū)L(fēng)險降到最低。由于我們相信我們有能力通過使用人工延遲來實現(xiàn)ping值在同等競賽環(huán)境,所以這只是一個復(fù)雜性與可靠性的簡單問題。為了實現(xiàn)更低的風(fēng)險(減少互聯(lián)網(wǎng)的不可靠性),我們增加了一點復(fù)雜性(兩種網(wǎng)絡(luò)架構(gòu)設(shè)計)。
考慮到這兩種選項,并基于我們的評估,我們決定采用策略二,它能夠為賽事的可靠性和競賽公平性帶來最低的風(fēng)險。
下方的圖表就是我們所選擇的網(wǎng)絡(luò)架構(gòu)設(shè)計,展示了在不同情況下網(wǎng)絡(luò)是如何鏈接運行的。
最合理方案
考慮到以上種種因素,我們決定在使用人工延遲服務(wù)并維持競賽公平性的情況下支持兩種不同的網(wǎng)絡(luò)架構(gòu)設(shè)計。兩支都在場館的隊伍比賽時,將使用架設(shè)在季中冠軍賽場地內(nèi)的本地服務(wù)器。而對上遠程參賽隊伍時,對戰(zhàn)雙方均在韓國數(shù)據(jù)中心的比賽服務(wù)器上進行比賽。拳頭游戲電競技術(shù)團隊設(shè)置了系統(tǒng)并進行了基礎(chǔ)架構(gòu)測試,以確保一切運轉(zhuǎn)正常。其中包括了各種測量和監(jiān)控,如 ping值、網(wǎng)絡(luò)抖動,以及對丟包的仔細檢查。我們也讓隊伍在這個比賽服務(wù)器上進行訓(xùn)練賽,并讓他們來到現(xiàn)場,進行技術(shù)測試。
但在第一比賽日結(jié)束后,選手告訴我們,比賽的時候感覺很卡。部分選手表示,即便游戲屏幕上顯示 35ms,但實際體感卻高于 35ms。當時我們所有的日志和基礎(chǔ)架構(gòu)監(jiān)控顯示一切正確,但我們決定繼續(xù)調(diào)查,找出問題的原因。
找尋漏洞
引起這些問題的原因還是不清楚。由于架構(gòu)監(jiān)控工具并沒有匯報錯誤,但我們卻收到報告說比賽很卡。我們?nèi)鄙偬囟┒椿蛱囟ㄓ螒騼?nèi)情況來定性。于是我們又回到了基礎(chǔ)問題上。哪些數(shù)據(jù)是可用的?我們手里都有哪些日志?我們能收集到什么信息?
對此我們采取了兩步走的做法。首先是向參賽的職業(yè)隊伍收集問題,幫我們理解情況,到底哪里出了岔子。你們是在哪兒發(fā)現(xiàn)問題的?是場館服務(wù)器還是比賽服務(wù)器?是場館網(wǎng)絡(luò)環(huán)境還是訓(xùn)練賽環(huán)境?是所有對局都這樣?還是只是個別情況?與此同時,因為標準報告沒有顯示任何錯誤,所以我們開始查看其他日志和指標,尋找任何可能的差異。我們也提取了賽事客戶端和服務(wù)器端的日志,并開始深入研究。
更多內(nèi)容:英雄聯(lián)盟專題英雄聯(lián)盟論壇
真不愧是狗界的kk園區(qū)。
十年磨一劍
你要是《更衣人偶墜入愛河》的粉絲,那接下來可就要做好破防的準備了……