當前位置: 華文星空 > 電競

王者榮耀不停服更新的技術方案是怎麽樣的?

2017-09-18電競

企業級別的服務,高可用本來就是很基本的要求,當然也包括更新時維持其可用性。消費者級別的服務比如遊戲服務,一直以來采用停服更新無非是節約開發成本罷了,因為這個需求也不是特別重要,半夜停個服沒什麽大不了的。

對於王者榮耀這個遊戲來說有個特點是state是很容易分割的,一場戰鬥就是個獨立的state,而且持續時間不長,可以由獨立的節點來處理。這樣更新起來就簡單了。

比如一個節點(比如一台伺服器)正在處理1~N場戰鬥,因為戰鬥時長有限,完全可以先部署一個新版本節點,停止向舊節點派發新的戰鬥,然後等所有戰鬥在舊節點上處理完了再移出舊節點就行了,這個過程稱為drain。當然這種方式需要臨時增加capacity,並不經濟。更有可能的做法是一個細粒度更小的節點只處理一場戰鬥(比如就是一個行程處理一場戰鬥),新的戰鬥用新版本來起節點就可以,那麽從宏觀來看舊版本節點會持續不斷地消失,新版節點持續增加,最後經過最長戰鬥時長(幾個小時?)後所有舊版節點就都沒了。

用這種方式可以解決戰鬥處理這類的stateful服務。如果是stateless的服務(業務state都在外部儲存)就更簡單了。

當然如果王者榮耀一場戰鬥要打個好幾天甚至一個月,估計線上更新的難度就完全不一樣了。

比如像魔獸世界這種完全不間斷的低延遲的互動響應模式,如果要做無縫不停服更新就很難了。比如說你放個火球術,在火球飛行過程中要把處理火球飛行軌跡的服務切換到另一台伺服器還要使用者察覺不到卡頓,這個才是非常難。