繼續 《暗黑破壞神 II:獄火重生》伺服器斷線問題:解釋說明、我們目前的處理方式,以及未來的規劃。 的討論:
看完這文,我驚訝竟可把如此複雜的事情說得這麼簡單,而且這次的伺服器採用統一存檔,算是真正的MMO伺服器,很厲害。
不過這幾天玩遊戲,都有一個問題讓我非常不解,就是遊戲的錯誤訊息顯示方式,會讓玩家一頭霧水,我內心想像的資訊應該是:伺服器滿載請稍後、伺服器關閉、伺服器啟動中、伺服器同步恢復中等等,而不是這種『看起來像是失效的驗證機制』的錯誤訊息,雖然這些資訊不是使用者應該要去理解的,但如果發生問題卻一直怪玩家的連線有異常,請確認連線後再試,真的不是很妥當,反而更怒了。
文中提到『全球資料庫存入資料的頻率太高了,但其實並沒有必要這麼頻繁地保存資料。我們真正應該做的,是將玩家遊戲角色的數據保存至地區資料庫,並且只在需要解除鎖定的情況下才把角色數據上傳至全球資料庫,這是我們所採取的其中一項改善措施。』,若今天全球玩家人數近乎滿載,而大家又碰巧在遊戲關閉與開啟的狀態下,也讓全球資料庫負荷不了時,勢必造成地區資料庫同步障礙,此障礙應要【告知使用者,資料正在同步,請稍後N秒後再進行登入】才對,而且客端軟體也應該加上防呆機制,否則玩家憤怒情緒高漲外,還會衍伸更多奇怪的攻擊行為,該行為如同「很多人同時對資料庫進行查詢,但一次太多人資料庫需要時間,可是軟體有一個逾時機制,或使用者不耐煩結束,導致資料庫還未回應,就又收到新的查詢請求,資料庫可能就此陣亡。」,會這樣說是因為,當人數過多時,我曾不理會錯誤訊息,一直瘋狂快速點選【加入】或【進行遊戲】就會有機率可以正常進入遊戲,我相信這樣的行為在早年大家並不陌生。
回溯問題其實也可以比照地區資料庫的做法,客端應要有一份遊戲存檔快照,該快照的認證來自地區資料庫的鎖定,遊戲進行時由地區資料庫給予認證鎖,當問題發生時客端與地區資料庫斷線後,客端重新連上地區資料庫並遞交鎖與存檔快照,由地區資料庫識別快照完整性與可用性,進而決定重新同步或捨棄客端存檔,這樣可以大幅降低回溯的發生。如果這項機制的機密性足夠,甚至可以大幅降低地區資料庫的頻繁存檔,提高玩家人數承載力。
速度限制與佇列規劃,是令人感到沮喪的決定,採用了新的MMO架構,卻因此讓玩家進入單線模式的漫長等待,犧牲玩家的遊戲時間,反而懷念了分流的架構好處。
關於速度限制,假如是針對某些特定行為的快速刷寶,造成地圖的重開與關閉,或許可以嘗試將地圖的生成粒度最小化,而不是一個大章節的生成或是整個遊戲的生成,當玩家進入到遊戲後,才開始生成必要的地圖,一方面地圖生成成本降低,另一方面結束地圖成本也降低了,降低浪費才可以承載更多的玩家,當然這樣的變更勢必是極大的挑戰,因為歷史的包袱,程式碼變更可能會有意想不到的新問題出現,但如果可提升不錯的運算效率,也是值得一試。
關於遊戲列表的Singleton問題,其實可以考量看看是否使用不需加入該列表的方式進行遊戲,有點類似D3的組隊系統,不過這個遊戲的撿寶風格又不像D3每人一份,而是唯一一份出現在地板上讓玩家各種搶,所以比起與陌生人配對,有多數玩家更喜歡的是與朋友配對,所以創立僅限好友的地圖時,有沒有可能可以依賴在好友名單上的對應ID即可,不需要進入到該列表,如同私有地圖不會在列表上。
最後,能夠動刀修改20年前的code,心臟真的要足夠大顆,刀刀都有可能致命,真是不好意思在這裡說了這麼多不腰疼的話,不過還是期待你們能夠將歷史包袱的缺陷一一改善,才不會辜負我們對【暴雪】兩個字的期望。
誠心祝福 一切順利
加油~