大家好,自從《暗黑破壞神 II:獄火重生》發行以來,我們遇到多次伺服器問題,希望能夠藉著這次機會跟各位玩家說明這些問題的起因,以及我們截至目前為止已經採取哪些解決措施。此外,我們也會跟各位說明對於未來的規劃。
簡短摘要版:伺服器斷線問題並非單一因素造成,我們必須針對許多不同的面向下手,處理方式分為短期解決方案跟長期架構上的調整。有一部分玩家遇到了角色進度回溯的問題,從現在開始,因為伺服器斷線所導致的回溯問題,其影響範圍應該能夠被限縮幾分鐘以內。這並不是我們的最終處理方案,我們還會繼續努力全面修正回溯的問題。開發團隊和其他暴雪團隊成員正在積極協助改良遊戲體驗,並讓大家都能對成果感到滿意。
我們接下來會提到某些工程技術方面的細節,希望這篇文章的內容能夠幫助了解為什麼最近會出現伺服器斷線問題、我們針對問題的各個面向採取了什麼樣的解決措施,以及我們是如何調查整起事件的核心癥結點。我們先從事情的開始說起:
伺服器的問題:
在開始討論問題之前,我們要先簡短跟各位說明一下伺服器資料庫的運作方式。首先是,我們有個全球資料庫,是唯一負責記錄所有角色資訊與遊戲進度的資料庫。各位可以想見,單靠一個資料庫要記錄如此大量的資訊,壓力有點沉重,有時候會忙不過來。因此,為了減輕這個全球資料庫的負荷和延遲,在北美、歐洲和亞洲這三個地區,也都有各自專屬的資料庫,負責記錄角色資訊和遊戲進度,各地區的資料庫再定期將相關資料寫入全球資料庫。玩家在遊戲內所進行的大部分操作都在區域資料庫運作,因為這樣子速度比較快,而且角色的相關資訊會「鎖定」在區域資料庫裡面,以此保護每個角色資訊的完整性。此外,全球資料庫還有一個備用版本,以防主資料庫故障或出狀況。
以上就是前情提要,接下來的文章內容主要會探討自從美西時間10月9日週六至今所發生的伺服器斷線情形。
在美西時間10月9日週六上午的時候,因為短時間內突然湧入大量數據的關係,導致全球斷線情形。這次的伺服器數據流量刷新了伺服器的紀錄,就連遊戲剛剛發行的那幾天也沒有這麼大量的數據。而且因為我們在事發的前一天才剛剛推出更新,強化建立遊戲時的運行效能,導致這個問題變得更加嚴重。在這兩個因素同時並存的情況下,造成全球伺服器過載,並造成斷線。我們當時決定撤回事發前一天週五所推出的更新,希望這樣子能夠減輕對於伺服器的負荷,讓週日的狀況好轉,並同時也讓遊戲團隊有更多的餘裕可以深入調查這起事件的起因。
但在隔天周日,我們發現週六這樣的做法還不足夠,我們發現數據流量不減反增,導致伺服器再次斷線。遊戲伺服器在發現資料庫出現斷線狀況之後,就立刻開始反覆嘗試要重新連線,也就是說資料庫沒有時間能夠處理我們所做的變更,因為資料庫光是處理遊戲伺服器的連線請求的流量就已經忙不過來了。在這段期間,我們也注意到資料庫的事件記錄配置有改良空間,這點很重要,這有助於我們在資料庫故障當機的時候幫助資料庫恢復正常狀態,因此我們就先從這個層面開始著手,並且更進一步分析問題的癥結點。
週日的斷線問題有利有弊,多虧有這次的進一步斷線狀況發生,我們才能意識到週六處理措施的不足之處,也才能夠及早研擬出讓伺服器快速恢復正常運作的方法。這是值得慶幸的事。
不過,雖然我們迅速就讓伺服器重新恢復運作,但因為當下正值玩家人數高峰時段,伺服器必須在短短數十分鐘內同時處理好幾十萬場遊戲,因此又再度當機,這個狀況不妙。
因此,我們需要針對許多面向進行修復,包括針對備用全球資料庫改良配置和程式。接著,時間點來到美西時間10月 11 日週一,我們當時決定切換全球資料庫。這個決定導致伺服器再次斷線,因為備用資料庫意外地繼續運行原本的備份程序,導致資料庫把大部分的資源都挪來複製主資料庫的內容,而無暇顧及應該處理的遊戲伺服器請求。在這段期間,我們發現了更多問題並做出相應改善:我們發現有個查詢內容已經廢棄但卻會佔據資源,因此直接將這種查詢內容從資料庫裡面完全移除;我們改良了玩家加入遊戲時的資格檢查機制,進一步減輕了伺服器的負荷。此外,我們目前也正在積極測試更多效能方面的改良項目。我們當時認為資料庫重新連線的問題已經順利解決,因為美西時間周二後已沒有出現類似的狀況。
不過,同時在線的玩家人數在週二再次突破新高,光是一個地區的玩家人數就有好幾十萬。這個現象導致資料庫的運行效能再次下降,團隊的資料庫工程師目前正在著手調查這個問題的起因。我們也向暴雪其他遊戲團隊的工程師請求支援,讓他們協助處理幾個規模比較小的錯誤修正,讓團隊有更多餘裕可以處理最重要的伺服器問題。此外,我們也聯繫第三方合作夥伴一起協助。
斷線問題的起因:
為了忠實地呈現出這款遊戲當年的樣貌,我們保留了許多原版遊戲的程式碼。不過,當年所提供的服務難以跟上現代玩家的行為。
這項服務以及其他幾個源自於原版遊戲的改良項目負責處理至關重要的遊戲功能,包括遊戲室建立/加入、更新/讀取/篩選遊戲列表、驗證遊戲伺服器健全度、從資料庫讀取角色數據等功能,以利玩家能夠透過篩選機制玩到自己喜歡的遊戲項目。重要的是,這個服務屬於單例模式(Singleton),也就是說我們只能運行單一個實例,確保所有玩家隨時都能夠看見最新且正確的遊戲列表。我們的確透過各種不同的方式並利用現代技術使這項服務達到最佳化,但誠如我們剛才所說,許多問題其實都可以歸因於建立遊戲的這個環節。
我們之所以提到「現代玩家的行為」,是因為這一點很有趣且值得思考。在 2001 年的當時,網路上有關如何「聰明地玩」《暗黑破壞神 II》(例如:打巴爾刷經驗值、透過暴皮/遠古下水道等尋找魔法物品)的資訊量還不是那麼充足。不過時至今日,新玩家可以在網路上找到許多內容創作者的攻略和心得分享,並從中學習不同的遊戲玩法,而且這些玩法大部分都會對伺服器造成很大的負擔,因為這些玩法涉及快速且連續地建立、載入和關閉遊戲。我們其實有事先預期到這一點,知道玩家會在新的伺服器上面建立新角色並且努力尋找魔法物品,只是我們從 Beta 測試的結果並沒有預期到情況會如此嚴重。
此外,整體來說,全球資料庫存入資料的頻率太高了,但其實並沒有必要這麼頻繁地保存資料。我們真正應該做的,是將玩家遊戲角色的數據保存至地區資料庫,並且只在需要解除鎖定的情況下才把角色數據上傳至全球資料庫,這是我們所採取的其中一項改善措施。我們目前正在修改程式,希望能夠徹底改變數據保存的機制,大幅縮減數據上傳至全球資料庫的次數,進而大幅降低伺服器的負荷量,但這涉及架構面的重新設計,將需要一些時間調整和測試,並完成實裝。
進度回溯的備註說明:
部分玩家遇到的遊戲進度回溯狀況,原因是地區資料庫和全球資料庫鎖定角色數據的方式。當你被分配到某個地區資料庫的時候,全球資料庫會鎖定你的遊戲角色(舉例來說:如果你在北美地區伺服器進行遊戲,那麼你的角色就會鎖定在北美地區,大部分的遊戲操作也都會透過北美地區資料庫處理)。
但問題在於當伺服器斷線、資料庫故障時,有一些遊戲角色會卡在地區資料庫裡面,而我們也無法將這些角色移動至全球資料庫。在問題發生的當下,我們研判有兩種解決方式:第一種做法是在全球資料庫還沒有保存變更的情況下,解除所有遊戲角色的鎖定狀態,但這麼做會覆蓋掉全球資料庫的內容,導致部分遊戲進度回溯;第二種做法則是直接關閉遊戲一段不確定會多長的時間,並執行腳本把地區資料庫的內容寫入全球資料庫裡面。
當時我們選擇了第一種做法,因為我們認為當下更重要的是盡快讓遊戲恢復正常運作,讓玩家能夠繼續進行遊戲,而非關閉遊戲一段時間來恢復遊戲數據。我們對於因為受到回溯影響而失去重要的遊戲進度或寶貴道具的玩家感到非常抱歉。我們自己本身也是玩家,我們理解也能夠感同身受遊戲進度回溯的挫折感。
我們認為已經找到一個恢復角色數據的方案,未來應該不會再出現嚴重的數據遺失情況。在伺服器當機的時候,玩家最多只會因為回溯而失去幾分鐘的遊戲進度。
雖然情況有所改善,但我們認為這終究不是治本的解決之道。
我們正在採取哪些處理措施:
速度限制: 我們決定要限制資料庫對於建立和加入遊戲的運行次數,我們知道這對於許多玩家來說都會造成實質上的影響。舉例來說:刷暴皮的玩家通常不到 20 秒就可以加入遊戲、離開遊戲然後再建立新的遊戲。如果玩家選擇進行這樣的遊戲操作,那麼操作速度將會在某個時間點受到限制。當操作速度受到限制時,會跳出訊息顯示遊戲伺服器通訊錯誤,但這並不代表遊戲伺服器故障,單純只是你的遊戲操作速度暫時受到限制,以減輕資料庫的負荷量,也有利於遊戲順暢運行。我們在此承諾,這只是短期應急的解決方案,我們還會研擬出更理想的長期治本方案。
登入佇列機制: 我們在上個週末遇到許多問題,但每次的問題都不盡相同。由於重製版遊戲相較於當年來說,玩家人數變多,可支援遊戲平台數量也變多,再加上其他種種跟調幅有關的狀況,我們未來可能還會繼續遇到一些小問題。為了能夠迅速診斷並釐清問題所在,我們必須避免大量玩家同時登入的情況。因此,遊戲團隊目前正在著手開發登入佇列機制,類似於《魔獸世界》的那種佇列機制。如此一來,我們就能夠把同時登入的玩家人數控制在一個安全的水平,以利我們監測系統的負荷來源,並且在遊戲崩潰之前及時排除問題。我們每修正一個遊戲錯誤,就能夠提高可在同一時間登入的玩家數量上限。這個登入佇列機制已經有一部分實裝在遊戲後台(目前在客戶端看起來像是失效的驗證機制),接下來幾天應該就能夠在 PC 平台完整實裝,遊戲主機版本的遊戲也會很快跟進。
將重要的遊戲功能拆分成小服務: 我們已經開始針對處理起來不需要一天的小項目進行相關作業(部分項目已經在這個禮拜完工),後續也規劃進行規模更大的專案,例如:新的微服務(舉例來說:新的遊戲列表服務,是專門負責呈現遊戲列表讓玩家查看)。在重要功能拆分完畢後,我們還會進一步加強遊戲的管理服務,藉此降低伺服器負荷量。
我們的團隊成員努力不懈地協助即時管理突發狀況、分析問題和實裝修正,而且參與的不只來自《暗黑破壞神II:獄火重生》團隊,還有來自其他暴雪團隊的夥伴。這款遊戲對我們大家來說都意義重大。團隊的許多成員都是《暗黑破壞神 II》的骨灰級玩家,在 2001 年原版遊戲推出時就加入遊戲,有些人也是自製遊戲模組社群的愛好者。我們在此承諾,會繼續調整直到遊戲體驗達到我們滿意的水準,這不只是身為遊戲開發者,也是同樣身為《暗黑破壞神II》玩家和社群一份子的堅持。
請大家持續透過《暗黑破壞神 II:獄火重生》討論區提供意見回饋,如果你需要疑難排解方面的協助,請參考技術支援討論區。感謝各位玩家持續透過各個管道與我們溝通,你們所提供的資訊可以大大幫助我們排除相關問題。
《暗黑破壞神》社群團隊會透過討論區持續發布最新消息幫大家更新近況。
《暗黑破壞神 II:獄火重生》開發團隊 敬上