庫洛遊戲 CTO 林晨晨
9 月 6 日,2024 騰訊全球數字生态大會遊戲專場在深圳國際會展中心舉辦。
會上,庫洛遊戲 CTO 林晨晨分享了《鳴潮》上線前後,項目組在服務器承壓、性能優化、全球同步發行、兼容适配方面的研發經驗。
林晨晨表示,《鳴潮》項目初期,他們就定下了 500 萬 PCU(最高同時在線玩家人數)的框架目标,最終花了一年時間才給遊戲塞入了「500 萬個機器人」,用比較暴力的方式完成了服務器承壓的測試目标。
以下爲林晨晨分享原文,爲照顧閱讀體驗,部分内容有所删改:
大家好,我是來自庫洛遊戲的林晨晨,《鳴潮》是我們的第三個項目,它在研發和運營過程中有兩個比較大的挑戰:一是全球全平台同版本上線怎麽做;二是怎麽處理開放世界遊戲本身的研發複雜度。
首先全球、全平台同版本是我們立項之初決定的發行策略。
該策略首要面臨的問題,是如何處理網絡延遲,讓全球玩家在合理的延遲内進行流暢的體驗。
《鳴潮》是一款主打高速戰鬥的動作遊戲,玩家需要流暢地做出極限閃避、彈刀、協奏等操作,因此我們把遊戲網絡延遲目标設置爲 120ms 以内,這對于遊戲服務器之間的物理距離要求較強;
但同時,《鳴潮》爲了後續全球同步上線和更新,其服務器是一個全球大單服的結構,不能無限制地在全球部署,需要平衡延遲和單服務器覆蓋範圍。
我們根據玩家分布情況、物理距離等因素,選擇了中國上海、中國香港、新加坡、日本東京、德國法蘭克福、美國弗吉尼亞六座城市部署服務器,讓全球玩家的網絡質量得到保證。
其次是全平台開發。我們認爲全平台适配和互通,是對玩家最友好的遊戲方式。玩家在不同環境下,都能找到最适合的體驗方式,比如在客廳裏選擇主機、電視端,在沙發和床上選擇平闆,外出時選擇手機。
因此,我們就需要一個相對規範的工程文件,可以打 windows、iOS、Mac 等全平台的安裝包。UE 引擎在這方面提供了不錯的支持,它本身支持多平台安裝包體的輸出;其次,我們在各大平台的結構層制作了一個抽象接口,保證我們做的邏輯和設計,可以在全平台通用,适配不同的管線。
最後是全球同版本。相信做過多支管理的朋友都知道,這是一個非常細碎、很容易出錯的工作。
比如我們在多支管理工作期間,發現玩家不僅會對遊戲的更新策略産生争議,還容易因遊戲版本更新相對更慢,而失去新鮮感——如果更新時間相差半年,就會導緻更新慢的用戶,已經在其他各種媒體渠道看過相關内容了,進而對新版本失去新鮮感和興趣。
如果能做到全球同版本,不僅能解決上述内容新鮮感丢失的問題,也能讓項目組減少維護多版本的壓力,保持一緻的目标,聚焦解決問題,獲得及時、統一的玩家反饋,刺激我們做出更高要求的内容滿足全球玩家。
當然全球同版本也有不少痛點,包括技術層面的語言語音适配切換、界面适配、本地化的流程管線;用戶層面的文化差異、玩法 / 劇情體驗的需求等等……我們盡量取全球用戶訴求的交集,做受衆面更大的内容。
第二塊要講的,是《鳴潮》作爲開放世界遊戲的研發複雜度,這個話題很寬泛,我具體分享兩個案例:500 萬同時在線的抗壓測試、做得不夠好的客戶端性能适配。
如果關注我們上一款産品《戰雙帕彌什》的朋友,可能也知道它在上線時,遇到了比較大的服務器崩潰問題,因此我們在《鳴潮》項目上非常慎重地對待服務器承壓問題,在項目初期就定下了要支持 500 萬人同時在線的目标——從後來的上線情況來看,确實需要做到這個量級。
我們的解決方案首先是依托騰訊雲的基礎資源支持,包括六個城市的服務器部署、各種問題的及時響應;
其次是提升集群橫向擴容能力。這一方面指數據庫的橫向擴容:我們利用 MongoDB,以分片集群的方式,讓讀寫壓力合理地分散在每個分片上;另一方面是邏輯服的橫向擴容:我們做到了整個集群沒有任何單點,所有業務都可以橫向擴容算力,解決單點瓶頸。
做好擴容準備後,我們在 2023 年春節期間,開始推進 500 萬 PCU 的壓測目标。
首先我們發現光優化擴容還不行,壓測還需要更高效的發壓工具,能快速制造 500 萬個機器人,在這方面 WeTest 的發壓框架,給了我們比較大的支持,隻需要填充壓測規則就可以,不用額外關注發壓本身的細節内容。
其次,我們需要模拟真實的玩家行爲,讓服務器能最大限度地承載 500 萬玩家的各種操作行爲和體驗場景,因此我們錄制一整套真實遊戲的過程,再結合過往 CBT 測試玩家真實場景來混合測試,模拟遊戲開服狀态——從結果來看,《鳴潮》開服的承壓狀态跟測試結果基本一緻。
我們在壓測過程中,也發現了很多問題,比如 MONGO Bson 增量更新不如全量覆蓋、入庫邏輯需要流速控制主動保護 DB、我們服務端用的托管内存語言的問題比較多,需要做大量的内存優化工作、對象複用……最終我們完成 500 萬同時在線壓測目标,是在 2023 年 12 月 14 日,基本上用了一年時間,而且還是用比較暴力的方式沖到了這個數值。
另一個案例性能适配我們做得不夠好。
首先在全平台發行的需求下,《鳴潮》需要适配設備既有 2017 年上市、距今 7 年的骁龍 835 芯片的手機,例如小米 6;也有最新的、安裝了 4090 顯卡的電腦,他們之間的性能差距遠超過 100 倍,如何讓不同設備的用戶,都能有匹配當前設備的遊戲體驗,對我們的技術工作提出了比較高的要求。
後面《鳴潮》測試和上線時,我們聽到非常多的移動端負面反饋,掉幀、發熱、閃退、畫面不清晰等等,我們深入反思下來有兩方面原因:缺乏有效的發現和量化問題的工具方法,更多依賴于客服反饋;測試環境過于理想,不能代表玩家對遊戲幀率設置、遊戲操作、體驗場景等真實情況。
好的量化問題方法,是我們解決問題的關鍵。在觀測和量化線上性能數據方面,Perfsight 可以獲取每一個玩家真實玩遊戲的過程,能從機型、CPU、GPU 、 發熱、功耗、卡頓、内存等維度分析,找準當前問題的關鍵點在哪裏,精力投入在哪裏最有效,減少個别反饋的幹擾。
在找準瓶頸後,我們采取了快速叠代、小量驗證的灰度驗證策略。在修複完問題後,通過客戶端熱更新的方式,按各種維度的比例推送給用戶,小量觀察驗證效果後再逐步放量,以達到快速叠代、穩定落地的目的。
在具體實踐中,我們也做了不少性能優化工具。
比如時間預算管理系統,我們《鳴潮》的性能需求劃到 60 幀,一幀可用的時間是固定的 16.6ms,我們會嚴格遵照這個時間開銷,優先展現對玩家體驗影響最大的内容,一些算不完的内容往後順延,保證每 16.6ms 都能刷新,給玩家平滑順暢的遊戲體驗。
再比如超分辨率算法的應用,它可以降低渲染分辨率,有效減少計算量、降低設備發熱情況,然後通過算法把降低的分辨率,重新解析成高分辨率,通過持續調優,最終在畫面和性能上達到玩家可以接受的「甜點值」。
做了一系列事情後,突然有一天,我們發現《鳴潮》的性能優化話題,上了 B 站熱搜,我自己是比較意外的,但我相信,隻要我們持續去做優化工作,量變總能引發質變,玩家感受到項目組的努力隻是時間問題。
最後,《鳴潮》的研發過程整體比較曲折,我覺得多做減法、保持聚焦、直面問題、拆解節點、量化進度、定時複盤,是我們能把這個項目做出來的關鍵。
今天的分享大概到這裏,謝謝大家!