《暗黑破壞神 2》復活:暴雪為伺服器道歉並作出解釋

大家好。

自從《暗黑破壞神 II:復活》推出以來,我們遇到了多個伺服器問題,我們希望提供一些透明度,說明導致這些問題的原因以及我們迄今為止為解決這些問題所採取的步驟。我們也想讓您了解我們的進展。

tl;dr:我們的伺服器中斷並不是單一問題引起的;我們正在解決出現的每個問題,包括緩解解決方案和長期架構變更。少數玩家經歷過角色進程損失——展望未來,由於伺服器崩潰而導致的任何損失都應該限制在幾分鐘內。這對我們來說並不是一個完整的解決方案,我們正在繼續解決這個問題。我們的團隊在暴雪其他人的幫助下,正在努力將遊戲體驗帶給每個人都感覺良好的地方。

我們將在這裡通過一些工程細節來深入了解一些雜草,但我們希望總的來說,這可以幫助您了解為什麼會發生這些中斷,我們正在採取哪些措施來解決每個實例,以及我們如何正在調查整體根本原因。讓我們從頭開始。

伺服器的問題:

在討論這些問題之前,我們將簡要介紹一些有關我們的伺服器資料庫如何運作的背景資訊。首先,我們的全球資料庫是您所有角色資訊和進度的唯一真實來源。正如您可以想像的那樣,這對於一個資料庫來說是一項艱鉅的任務,並且無法單獨應對。因此,為了減輕我們全球資料庫的負載和延遲,每個地區(北美、歐洲和亞洲)都有單獨的資料庫,也儲存您的角色資訊和進度,並且您所在地區的資料庫將定期寫入全球資料庫。您的大部分遊戲內操作都是針對此區域資料庫執行的,因為它速度更快,並且您的角色被「鎖定」在那裡以保持單個角色記錄的完整性。全域資料庫還有一個備份,以防主資料庫發生故障。

考慮到這一點,為了解釋發生的情況,我們將重點放在 10 月 9 日星期六至今經歷的停機時間。

太平洋時間週六早上,由於流量突然大幅激增,我們遭遇了全球性中斷。這是我們的伺服器根本沒有經歷過的新門檻,甚至在啟動時也沒有經歷過。我們前一天推出的旨在提高遊戲創建性能的更新加劇了這種情況——這兩個因素結合起來使我們的全局資料庫超載,導致其超時。我們決定回滾之前部署的周五更新,希望這能減輕週日之前伺服器的負載,同時也為我們提供了更深入調查根本原因的空間。

然而,到了周日,很明顯我們在周六所做的還不夠——我們看到流量增加得更多,導致我們再次遭遇停電。我們的遊戲伺服器正在觀察與資料庫的斷開連接,並立即重複嘗試重新連接,這意味著資料庫永遠沒有時間趕上我們已完成的工作,因為它太忙於處理遊戲伺服器的連續連接嘗試流。在此期間,我們還發現可以對資料庫事件日誌記錄進行配置改進,這是在資料庫發生故障時恢復健康狀態所必需的,因此我們完成了這些工作,並進行了進一步的根本原因分析。

週日的停電是一把雙刃劍,因為我們在周六處理的事情,本質上已經創建了一本關於如何快速恢復的劇本。這很好。

但由於我們在玩家活躍的高峰時段再次上線速度太快,幾十分鐘內就有數十萬個遊戲,所以我們再次跌倒了。這很糟糕。

因此,我們需要部署許多修復程序,包括配置和程式碼改進,並將其部署到備份全域資料庫。這將我們引向 10 月 11 日星期一,當時我們在全球資料庫之間進行了切換。這導致了另一次中斷,當時我們的備份資料庫錯誤地繼續運行其備份過程,這意味著它花了大部分時間嘗試從其他資料庫進行複製,而實際上它應該為來自伺服器的請求提供服務。在此期間,我們發現了更多問題,並進行了進一步改進——我們發現了一個已棄用但繁重的查詢,我們可以從數據庫中完全消除,我們優化了玩家加入遊戲時的資格檢查,進一步減輕了負載,正如我們所說,我們在測試中進一步提高了效能。我們也相信我們已經修復了所看到的資料庫重新連接風暴,因為我們在周二沒有看到它發生。

然後週二,我們又創下了同時在線人數的新高,僅在一個地區就有數十萬玩家。這使我們遇到了另一起資料庫效能下降的事件,我們的資料庫工程師目前正在調查原因。我們也聯繫了暴雪周圍的其他工程師來進行較小的修復,因為我們自己的團隊專注於核心伺服器問題,我們也聯繫了第三方合作夥伴尋求協助。

為什麼會發生這種情況:

為了忠於原始遊戲,我們保留了大量遺留程式碼。然而,一項傳統服務正在努力跟上現代玩家的行為。

該服務對原始服務進行了一些升級,可處理遊戲功能的關鍵部分,即遊戲創建/加入、更新/讀取/過濾遊戲列表、驗證遊戲伺服器運行狀況以及從資料庫讀取角色,以確保您的角色可以參與任何活動這是你正在過濾的。重要的是,該服務是單例的,這意味著我們只能運行它的一個實例,以確保所有玩家始終看到最新且正確的遊戲清單。我們確實以多種方式優化了這項服務,以符合更現代的技術,但正如我們之前提到的,我們的許多問題都源自於遊戲創作。

我們提到「現代玩家行為」是因為這是一個值得思考的有趣觀點。 2001 年,網路上幾乎沒有那麼多關於如何「正確」玩暗黑破壞神 II 的內容(Baal 運行 XP,Pindleskin/Ancient Sewers/etc 運行 magic find 等)。然而,今天,新玩家可以查找任意數量的令人驚嘆的內容創建者,他們可以教他們如何以不同的方式玩遊戲,其中許多包括以快速創建、加載和銷毀遊戲的形式進行大量數據庫加載。替。儘管我們確實預見了這一點——玩家在新伺服器上製作新角色,努力獲得他們的魔法物品——但我們大大低估了從 Beta 測試中獲得的範圍。

此外,總的來說,我們過於頻繁地保存到全域資料庫:沒有必要像以前那樣頻繁地執行此操作。我們確實應該將您保存到區域資料庫,並且僅在需要解鎖您時才將您保存到全域資料庫 - 這是我們採取的緩解措施之一。現在我們正在編寫程式碼來完全改變我們執行此操作的方式,因此我們幾乎永遠不會保存到全域資料庫,這將顯著減少該伺服器上的負載,但這是一個架構重新設計,需要一些時間來構建,測試,然後實施。

關於進度損失的說明:

一些玩家遇到的進度損失是由於我們在區域和全球資料庫中進行角色鎖定的方式造成的——當您被分配到一個區域時(例如,當您在美國區域玩時),我們會將您的角色鎖定在全球資料庫中,你的角色被鎖定在美國區,大部分動作都在美國區的資料庫中解決。

問題是,在伺服器中斷期間,當資料庫崩潰時,許多字元被卡在區域資料庫中,而我們無法將它們轉移到全域資料庫中。當時,我們認為我們有兩個選擇:我們要么解鎖全局數據庫中未保存的更改的所有人,從而由於全局數據庫中發生的覆蓋而丟失一些進度,要么我們將遊戲完全關閉,數量不確定時間並運行腳本將區域資料寫入全域資料庫。

當時,我們採取的是前者:我們覺得讓遊戲繼續運行以便人們可以玩更重要,而不是長時間關閉遊戲來恢復資料。我們對所有失去重要進度或有價值物品的玩家深表歉意。身為玩家,我們知道回滾的刺痛,並且深深感受到它。

展望未來,我們相信我們有一種恢復字元的方法,不會導致任何重大資料遺失——在伺服器崩潰的情況下,它應該被限制在幾分鐘的遺失(如果有的話)。

這更好了,但在我們看來仍然不夠好。

我們正在做什麼:

速率限制:我們正在限制創建和加入遊戲的資料庫操作數量,我們知道很多人都感受到了這一點。例如,對於進行 Pindleskin 跑步的人來說,您將在 20 秒內進出遊戲並創建新遊戲。在這種情況下,您將在某個時刻受到速率限制。發生這種情況時,錯誤訊息將顯示與遊戲伺服器通訊時出現問題:這並不表示遊戲伺服器在此特定實例中已關閉,它只是意味著您已受到速率限制以暫時減少資料庫上的負載,例如保持遊戲運行的興趣。我們可以向您保證,這只是目前的緩解措施——我們不認為這是一個長期解決方案。

登入佇列建立:上週末出現了一系列問題,而不是一再出現同樣的問題。由於玩家群的復興、多個平台的增加以及與擴展相關的其他問題,我們可能會繼續遇到小問題。為了快速診斷和解決這些問題,我們需要確保「羊群效應」(大量玩家同時登入)停止。為了解決這個問題,我們有人在登入隊列上工作,就像您在《魔獸世界》中所經歷的那樣。這將使人口保持在當時的安全水平,這樣我們就可以監控系統的壓力並在遊戲完全崩潰之前解決它。每次我們修復一個菌株,我們就能夠增加人口上限。該登入佇列已在後端部分實現(目前看來,客戶端中的身份驗證失敗),並且應該在未來幾天內在 PC 上完全部署,隨後會推出控制台。

將關鍵功能分解為較小的服務:這項工作部分正在進行中,我們可以在不到一天的時間內解決這些問題(有些已經在本週完成),也計劃用於更大的項目,例如新的微服務(例如, GameList 服務,僅負責向玩家提供遊戲清單)。一旦關鍵功能被破壞,我們就可以考慮擴大我們的遊戲管理服務,這將減少負載量。

我們的人員非常努力地即時管理事件、診斷問題並實施修復——不僅在 D2R 團隊,而且在整個暴雪。這場比賽對我們所有人來說意義重大。我們團隊中的許多人都是 D2 的終身玩家——我們在 2000 年 D2 首次推出時就玩過,有些人是模組社群的成員,等等。我們可以向您保證,我們將繼續努力,直到我們不僅作為開發者,而且作為玩家和社群成員都感覺良好的遊戲體驗。

請繼續向《暗黑破壞神II:復活》論壇314 提交您的回饋,向我們的錯誤報告論壇95 報告您的錯誤,如需故障排除幫助,請訪問我們的技術支援論壇50。與我們持續溝通- 這是當我們致力於解決這些問題時,這對我們來說是無價的。

暗黑破壞神社群團隊將透過論壇向您通報我們的最新進展。

暗黑破壞神 II:復活開發團隊