D2R 的敗因:資料伺服器過載與「Legacy code」所導致
暗黑破壞神 II 在許多老玩家心中還是有著一定的份量,最近《暗黑破壞神 II:獄火重生》遭遇重重的伺服器斷線、回溯,甚至是無法連線遊玩的問題,而事件主因也由 PezRadar 設群經理的論壇長文,可以大致瞭解目前 D2R 所遇到的狀況。
伺服器問題:
首先,D2R 採用全球資料庫儲存所有玩家角色進度的唯一真實來源,而在北美、歐洲與亞洲則有獨立的地區資料庫,而玩家在連線時主要是通過地區資料庫進行,並保有較好的 ping 值與連線穩定度,並會定期將地區資料庫更新至全球資料庫當中。
但在 10/9 號星期六(Pacific time)時區,這時間沒記錯應該是台灣 10/10 雙十連假期間,這時伺服器遇到比遊戲剛上市時還要大的數據流量,導致伺服器無法負載而大斷線;而在這的前一天 D2R 有針對遊戲創建(開門)的增強進行更新。
也就是當超出預期的流量與 D2R 的更新導致全球斷線的問題下,這也是為何 D2R 決定伺服器回溯,退回先前的遊戲版本。
隔天週日同樣伺服器過載的狀況出現,幾十分鐘內就可創建高達數十萬的遊戲房間,同樣又導致伺服器再次過載;這期間遊戲團隊先針對(離線的)備份全球資料庫進行維修與優化,並在 10/11 日準備讓備份全球資料庫與線上的全球資料庫進行切換,
但這個切換過程又導致備份伺服器進行錯誤的備份狀況,而且還發現以往的「查詢」太過花費伺服器效能,將其刪除後並優化玩家加入遊戲時的資格檢查減輕伺服器負擔。(OS:這不就是以前的 Code 照著搬,結果導致太吃伺服器資源而斷線!)
然後 10/12 又來了,每一個地區多達 10 萬玩家的連線數下,不得不讓暴雪專注遊戲核心的修改與優化,請來暴雪與第三方工程師團對幫忙維修。
為什麼有這麼多問題:
重點來了,D2R 伺服器撐不住、大斷線的肇因:legacy code,因為遊戲開發時希望忠於原作,所以遺留了非常多陳年的程式碼,當然無法符合現代線上遊戲的行為。
簡單來說,這服務需要處理遊戲創建、加入、更新 / 讀取 / 過濾遊戲列表,驗證遊戲伺服器的健康度,以及從資料庫讀取角色,並確保玩家所看到的角色列表正確。
而且這個服務僅能單一運行,確保所有遊戲玩家所見的遊戲資料都是最新的,但是即便優化了這功能的程式設計,但過多的保留舊有 legacy code 的狀況下,還是爆出了相當多的問題。
總之,就是遊戲太過頻繁的儲存全球資料庫,反而應該事先保存在地區資料庫上,直到需要解鎖你時才將資料回存的全球資料庫當中(only saving you to the global database when we need to unlock you)。
這可以有效降低伺服器的負擔,目前也正在針對架構、程式碼進行修改,但需要時間架構、測試與實際更新。
進度損失:
然後針對回溯導致進度遺失,或者真的打到好的各式裝備被回滾的玩家,只能跟你說聲抱歉…。
目前正在進行:
目前 D2R 也針對遊戲連線進行兩個面向的操作,首先是開房 Rate limiting,例如在 20 秒內重新創建遊戲房間時,會跳出錯誤消息提到無法說與遊戲服務器連線,也就是進一步降低玩家創造房間的速度;登入排隊(Login Queue Creation),也就是在遊戲玩家眾多的情況下,進行登入排隊佇列,就像各位在《魔獸世界》中所經歷的那樣。
並將主要的大服務功能拆分成小服務,這目前已經在進行中並可更新,而當這個重大功能分拆後,可以更有效的管理遊戲服務器,並將低整體的負擔。
痛苦太多,收穫太少
source: us.forums.blizzard.com