More  

小編的世界 優質文選 主機

暴雪藍貼長文解釋近期服務器崩潰問題:玩家火爆數據庫設計不合理


2021年10月19日 - 主機小編 暗黑2重制版 
   

暗黑2重制版

暴雪藍貼長文解釋近期服務器崩潰問題:玩家火爆,數據庫設計不合理!通告解決方案和未來計劃

暴雪今日淩晨發布了一則長長長長的公告,解釋了最近頻繁出現的服務器問題。小編簡單總結下:

問題原因:

一:玩家熱情高漲,流量超出預估。

二:為了忠於原版遊戲保留了很多遺留的不先進代碼。

三:數據庫設計不合理,地區數據庫和全球數據庫瘋狂同步數據。

四:玩家水平今非昔比,大量的快速進入退出遊戲MF裝備極其占用資源。

解決方案:

限制短時間內創建房間的次數(暴雪表示暫時的,並不想一直這麼做)

人太多會暫時排隊

服務器數據庫架構重新設計(需要時間)

長文如下:

大家好。

《暗黑破壞神 II:重生》推出以來,我們一直在遇到多個服務器問題,我們希望就導致這些問題的原因以及我們迄今為止為解決這些問題所采取的步驟提供一些透明度。我們還想讓您深入了解我們的進展情況。

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

我們將通過一些工程細節深入了解這裏的問題,但我們希望總的來說這有助於您了解這些中斷發生的原因以及我們為解決每個實例所做的工作,以及我們如何正在調查整體的根本原因。讓我們從頭開始。

服務器的問題的解釋:

在我們討論這些問題之前,我們將簡要介紹一些有關我們的服務器數據庫如何工作的背景信息。首先,是我們的全球數據庫,它是您所有角色信息和進度的唯一真實來源。您可以想象,這對於一個數據庫來說是一項艱巨的任務,並且無法單獨處理。因此,為了減輕我們全球數據庫的負載和延遲,每個地區——北美、歐盟和亞洲——都有單獨的數據庫來存儲你角色的信息和進度,你所在地區的數據庫會定期寫入全球數據庫。您的大部分遊戲內操作都是針對該區域數據庫執行的,因為它速度更快,並且您的角色被“鎖定”在那裏以保持單個角色記錄的完整性。全球數據庫也有備份,以防主數據庫出現故障。

考慮到這一點,為了解釋發生了什麼,我們將重點關注 10 月 9 日星期六至今所經歷的停機時間。

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

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

周日停電的雙刃劍是,由於我們在周六處理的事情,我們已經創建了一個本質上是關於如何快速恢複的副本。這很好。

但是因為我們在玩家活躍的高峰期再次上線如此之快,幾十分鐘內有數十萬場遊戲創建,我們又一次崩潰了。這很糟糕。

因此,我們有許多修複要部署,包括配置和代碼改進,我們將這些修複部署到備份全局數據庫上。這將我們帶到 10 月 11 日星期一,當時我們在全球數據庫之間進行了切換。這導致了另一次中斷,當我們的備份數據庫錯誤地繼續運行其備份過程時,這意味著它花了大部分時間嘗試從另一個數據庫複制,而它本應為來自服務器的請求提供服務。在此期間,我們發現了更多問題,並進行了進一步改進——我們發現了一個自用但很費力地查詢,我們可以完全從數據庫中刪除,我們優化了玩家加入遊戲時的資格檢查,進一步減輕了負擔,並且在我們發言時,我們在測試中進一步提高了性能。

然後在周二,我們達到了另一個並發玩家的高點,僅在一個地區就有數十萬玩家。這使我們遇到了另一起數據庫性能下降的事件,我們的數據庫工程師目前正在處理其原因。由於我們自己的團隊專注於核心服務器問題,我們還聯系了暴雪周圍的其他工程師進行較小的修複,我們也聯系了我們的第三方合作夥伴尋求幫助。

為什麼會發生這種情況:

為了忠於原版遊戲,我們保留了很多遺留代碼。然而,一項特別是傳統服務正在努力跟上現代玩家的行為。

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

我們提到“現代玩家行為”是因為這是一個有趣的思考點。2001 年,互聯網上幾乎沒有關於如何“正確”玩暗黑破壞神 II 的內容(殺巴爾拿 XP經驗,奶牛關,MF值 等)。然而,今天,一個新玩家可以找到任意數量的驚人內容創作者,他們可以教他們如何以不同的方式玩遊戲,其中許多包括以快速創建、加載和退出遊戲的形式加載大量數據庫。繼承。雖然我們確實預見到了這一點——玩家在新服務器上創造新角色,努力獲得他們的魔法發現物品——但我們大大低估了我們從 Beta 測試中得出的範圍。

此外,總的來說,我們過於頻繁地保存到全球數據庫:沒有必要像以前那樣經常這樣做。我們真的應該將您保存到區域數據庫中,並且僅在我們需要解鎖您時才將您保存到全球數據庫中——這是我們采取的緩解措施之一。現在我們正在編寫代碼來完全改變我們這樣做的方式,所以我們幾乎永遠不會保存到全球數據庫,這將顯著減少該服務器的負載,但這是一個架構重新設計,需要一些時間來構建,測試,然後執行。

關於進度損失的說明:

一些玩家經歷的進度損失是由於我們在區域和全球數據庫中進行角色鎖定的方式 - 當您被分配到一個地區時(例如,當您在美國地區玩時,我們將您的角色鎖定在全球數據庫中) ,您的角色被鎖定到美國地區,並且大多數操作都在美國地區的數據庫中解決。)

問題是在服務器中斷期間,當數據庫崩潰時,一些字符卡在區域數據庫中,我們無法將它們移動到全球數據庫中。當時,我們認為我們有兩個選擇:要麼解鎖全球數據庫中未保存更改的每個人,從而由於全球數據庫中發生的覆蓋而失去一些進度,要麼我們以不確定的數量完全關閉遊戲並運行腳本將區域數據寫入全球數據庫。

當時我們針對前者采取了行動:我們覺得保持遊戲運行更重要,讓人們可以玩,而不是長時間關閉遊戲以恢複數據。對於丟失重要進度或貴重物品的玩家,我們深表歉意。作為玩家自己,我們知道回滾的刺痛,並深深感受到。

展望未來,我們相信我們有一種方法可以恢複不會導致任何重大數據丟失的字符——在服務器崩潰的情況下,它應該被限制在幾分鐘內丟失,如果有的話。

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

我們正在做的事情:

建立房間速度限制:

我們正在限制圍繞創建和加入遊戲對數據庫的操作數量,我們知道你們很多人都感受到了這一點。例如,對於那些進行不斷建設新房間KB KP的人,您將在 20 秒內進出遊戲並創建一個新遊戲。在這種情況下,您將在某一點上受到速率限制。發生這種情況時,錯誤消息會說與遊戲服務器通信出現問題:這不是遊戲服務器在此特定情況下關閉的指標,它只是意味著您已被限速以暫時減少數據庫上的負載,在保持遊戲運行的興趣。我們可以向您保證,這只是暫時的緩解措施——我們不認為這是一個長期的解決方案。

登錄隊列排隊:

過去的這個周末是一系列的問題,一遍遍地不是同一個問題。由於玩家基礎重振、多個平台的加入以及其他與擴展相關的問題,我們可能會繼續遇到小問題。為了快速診斷和解決這些問題,我們需要確保“羊群效應”——大量玩家同時登錄——停止。為了解決這個問題,我們有人在處理登錄隊列,就像您在《魔獸世界》中所經歷的那樣。這將使人口保持在我們當時的安全水平,因此我們可以監控系統在哪裏緊張並在它完全關閉遊戲之前解決它。每次我們修複一個壓力,我們就可以增加人口上限。這個登錄隊列已經在後端部分實現了(現在,將功能的關鍵部分分解為更小的服務:這項工作的一部分正在進行中,我們可以在不到一天的時間內處理一些事情(有些已經在本周完成),並且還計劃用於更大的項目,例如新的微服務(例如,一個只負責向玩家提供遊戲列表的 GameList 服務)。一旦關鍵功能被分解,我們就可以考慮擴大我們的遊戲管理服務,這將減少負載量。

我們的工作人員非常努力地實時管理事件、診斷問題和實施修複——不僅在 D2R 團隊,而且在整個暴雪。這場服務器異常對我們所有人來說意義重大。我們團隊中的很多人都是 D2 的終身玩家——我們在 2001 年首次發布時玩過,有些人是模組社區的一部分,等等。我們可以向您保證,我們將繼續努力,直到我們不僅作為開發人員,而且作為玩家和社區成員對我們來說都感覺良好為止。

請繼續向論壇提交您的反饋 ,將您的錯誤報告到我們的錯誤報告論壇,要獲得故障排除幫助,請訪問我們的技術支持論壇。感謝您通過所有渠道與我們進行持續溝通 - 在我們處理這些問題時,這對我們來說非常寶貴。

暗黑破壞神社區團隊將通過論壇讓您了解我們的最新進展。

暗黑破壞神 II:重制版的開發團隊

  大家在看