1. 程式人生 > >遊族網絡:我們是怎麽玩轉千臺以上遊戲雲服務器的

遊族網絡:我們是怎麽玩轉千臺以上遊戲雲服務器的

大數據量 class 主動推送 客戶 虛擬機 資源 agent 調用 鏈路

摘要 技術分享圖片 來自上海遊族網絡的運維總監李誌勇,帶來的分享“如何運維千臺以上遊戲雲服務器”,本次分享中重點是雲時代的運維,包括遊戲上雲部署整體方案、遊戲服務器批量運維管理,並對企業選擇雲數據庫還是自建MySQL數據庫給出了自己建議。

遊戲產品架構進化史

技術分享圖片

圖一:遊戲產品架構進化史

經過近七年的高速發展,公司遊戲服務器從100臺增長到10000+臺,遊族整體遊戲架構也經過了三個階段的演變:

  • 公司早期廣泛使用的第一代架構,當時主流的產品都是以DB+計算+前端這樣的3個角色開發設計並部署,服務器以物理機為主,一個遊戲區組需要2~4臺服務器,不同的機器承擔不同的角色。這種架構方案效率低,基本上不可能實現一天開100個區組(100個區組大概需要400臺服務器);
  • 隨著業務量的增長和虛擬化技術廣泛使用,遊族整體遊戲架構更新為第二代架構,全面采用虛擬化技術,把一臺高配的物理機器虛擬化成多臺符合遊戲需求的虛擬機來使用,並實現了ALL IN ONE的系統架構。該架構方案運維效率高,適合規模開展遊戲運營,但不具備業務高可用特性,一天開100個區組成為常態;
  • 為了迎合大區大服、全球同服,遊族融合了前兩代架構的特點,推出了第三代架構,按角色分拆並形成服務集群模式。集群架構結合了物理機與虛擬化的優勢,實現彈性擴容,遊戲邏輯以服務進程或集群配置項的形式提供服務。該架構方案運維效率更高,可實現秒級開服同時具備業務高可用特性。

技術分享圖片

圖二:遊族專有雲 OpenStack

基於第二代架構,遊族基於OpenStack自己的專有雲,最初目標是為了提高服務器利用率、降低成本和實現分鐘級開服。運維團隊以OpenStack G版為藍本進行調優並修改;整個網絡采用的是VLAN模式,保證最大限度與現有網絡架構保持兼容;存儲方面使用本地磁盤作為存儲。

通過底層優化後,遊族專有雲基本上可以滿足業務的需求,目前90%遊戲業務運行在上面,虛機規模持續保持在10000臺以上,遊族專有雲平臺沒有提供WEB管理界面,日常所有的操作都是通過命令行和腳本的形式進行操作,但對於虛擬機的增刪查改,重新封裝了一層簡潔的API接口實現與遊族運維平臺的對接。經過評估測驗,在高峰時期,整個專有雲資源利用率可達到83%。

運維方式的轉變

技術分享圖片

圖三:運維方式的演變

與三代架構相互對應是遊族運維的三個階段:


  1. 在第一代架構上,運維基本是手工運維,技術含量並不高,純粹是采用人與時間堆積進行,運維同學需要登錄每一臺服務器,順序執行相關的命令和腳本。獨立的版控服務器,通過主動推送的形式進行版本更新;
  2. 在第二代架構上,通過自動化工具進行批量運維,團隊推出了使用expect寫的auto批量腳本,所有操作只需登錄一臺集控服務器執行批量並發操作的腳本,獨立的版控服務器,通過並行的主動推送;
  3. 在第三代架構上,可以實現系統化運維,多個運維系統相互協調配合實現,例如:CMDB、業務樹、作業平臺等。遊戲區組搭建的時間基本上可以忽略(可按需求實現按條件觸發或手動觸發搭建操作),所有的更新操作在WEB管理平臺就可完成。

遊族作業平臺UJOBS

技術分享圖片

圖四:UJOBS架構及其遊戲更新流程

系統化運維過程中使用的作業平臺(UJOBS)是屬於C/S的架構,其核心部分由任務調度器和agent組成,通過調用API接口完成多種形式的指令下發。UJOBS簡單的來說是為服務器管理提供了執行命令的通道,將所有的執行命令和腳本在目標服務器橫向執行完,把輸出結果記錄日誌裏面,同時可通過WEB界面實時查看分析。任務調度器是用來全局策略控制,進行並發量控制。任務列表裏面保存任務的完整信息。指令倉庫保存常用的命令個腳本和上下文關聯的命令組合。

在UJOBS平臺上,遊戲版本更新流程如下:

  1. 版本庫的版本變更自動觸發構建;
  2. 從版本庫拉取變更後的版本文件;
  3. 通過構建操作後,推送目標程序到分布式的全局版控服務器集群;
  4. 在作業平臺下發更新操作後,UJOBSagent取得該次更新的版控服務器地址、變更清單以及版本信息;
  5. 從版控服務器拉取更新文件到本地執行預定的更新腳本;

同時在UJOBS執行的過程中可實時查看輸出的日誌。當遊戲版本更新出現異常,有兩種回滾方式:第一種,遊戲服務器上保留歷史版本,異常時回退到歷史版本;第二種,覆蓋回滾,將老版本再次發布進行回滾。

數據庫備份與恢復

技術分享圖片

圖五:數據庫備份方案

相對於遊戲版本更新備份而言,數據庫備份更為重要。ALL IN ONE模式或者非集群模式的遊戲業務場景下,會存在多達好幾千個MySQL實例,若是要按常規的MySQL備份方案來實施,管理難度和成本都要翻好倍。因此遊族網絡采用Xtrabackup在主庫上直接備份數據文件方式,備份文件暫存本地;本地備份完成後在備份系統選舉一臺遠程服務器進行異地備份;備份策略每小時一次備份,半小時本地備份半小時遠程備份。該備份方法在單主庫業務場景下可能是最靠譜的數據備份方案,但備份過程對主庫會有影響、(限制IO操作),最壞情況下可能出現1小時的數據丟失(業務接受少量的數據丟失)。

在數據恢復方面,通過一鍵恢復工具,只需要提供恢復的IP、時間段和業務信息(如庫名)即可實現數據恢復;24小時內的數據通過本地的數據恢復(結合二進制日誌),超過24小時的數據通過異地數據恢復。

雲上遷移歷程

技術分享圖片

圖六:老遊戲的平滑遷移方案

現在遊族已經將幾款老遊戲遷移到阿裏雲上。在將ALL IN ONE架構平滑遷移到雲上的過程中,首先要求就是遷移過程不能長時間停服,只能接受正常的版本更新的停服時間。整個遷移過程分為以下幾步:

第一步提前準備資源,在阿裏雲提前申請好資源,初始化環境並把專有網絡與自有機房的網絡打通,實現內網互通為數據同步做好準備;

第二步提前同步數據,使用Xtrabackup備份在線把MySQL配置成主從同步模式,將數據同步到阿裏雲ECS,在一段時間後完成數據遷移。

第三步正式遷移,正常的遊戲停服維護時間(0.5~2小時)就可完成業務上阿裏雲的遷移。目前已經平滑完成3款遊戲產品的遷移,每款產品準備時間3~5天,正式遷移用時1~2小時,在阿裏雲平臺使用的虛機超過1000臺。

技術分享圖片

圖七:新遊戲上阿裏雲部署方案

上圖為ALL IN ONE架構遷移在阿裏雲後的遊戲部署:遊戲邏輯運行在雲服務器上,業務中使用專有網絡,通過自建的ULB對外提供服務。遊族網絡下一步計劃將集群模式部署在阿裏雲平臺上,遊戲邏輯將在雲服務器集群運行,後端數據存儲在雲數據庫集群中,前端通過SLB和負載均衡保證業務高可用,同時會接入LOG和大數據計算服務MaxComputer確保大數據業務。

技術分享圖片

圖八:阿裏雲技術支持保障

在遷移到雲的過程中,阿裏雲的技術支持起到了關鍵作用,線上線下及時溝通,以及特定技術的定制,保證了整個遷移過程的順利進行。

如何去選擇合適的數據庫?

技術分享圖片

圖九:自建MySQL與雲數據庫選擇

在遊戲遷移過程中,遇到了很多困難,其中一點是選擇自建MySQL還是雲數據庫。根據遊戲遷移經驗,解決該問題,他認為應從以下三個因素進行考慮:

1.實例數量:實例數量多且業務規模小(無需進行針對性的優化)適合自建MySQL服務;實例數量不多業務相對會比較集中,數據庫負載較高需要針對性的進行優化適合使用雲數據庫服務;

2.數據大小:數據量的大小會直接影響到數據庫性能和數據備份的機制,數據量越大越需要對數據庫進行精細化管理,數據的備份難度也越大,這種情況下建議使用RDS服務,反之可自建;

3.成本核算:從實例規格來看雲數據庫會比雲服務器自建MySQL要貴,但若是必須用到雲數據庫的某些特性(如:數據安全和穩定性)時成本也就不會放在首要位置了。

與此同時,大數據量的自建MySQL可以采用延時同步的方法,此方法已在遊族網絡的女神聯盟(手遊)的集群架構方案中在使用。遊族運維團隊獨創的數據備份系統、UJOBS、業務網關等獨具特色解決方案確保了其業務量在行業內處於領先地位。

QA環節:

1、遊族目前的運維人員數量是多少?

答:遊族網絡最初運維團隊在二十人以上,經過技術優化後,目前團隊人數在十人左右。從原來的十幾款產品到現在的三十幾款產品,運維業務量增長一倍,整個運維團隊人員縮減一半。團隊不斷將技術轉化為生產力,這是一個持續推進的過程。

2、從運維小白到總監的成長過程?

答:首先,我對運維這個行業保持很高的興趣。從遊戲對戰平臺接觸運維開始,就願意持續花時間投入遊戲運維,曾耗費兩天三夜的時間來處理運維中遇到的故障。當然最初也是從底層的運維人員做起,團隊管理是被逼出來的,是一個慢慢成長的過程。在團隊中,學習應居於首位,每個運維人員需要不斷地學習,提升自己的能力。

3、DB除了MySQL還有其他類型嗎?比如NoSQL這類數據庫是如何管理和部署的?

答:遊族網絡的產品絕大多數都是使用的MySQL,有少數產品使用了Mongodb,因為量少暫時還是通過手工管理;緩存業務有使用Redis但不存儲關鍵數據,Redis的數據備份使用數據備份系統進行集中管理,所有的軟件部署都是通過標準化的業務模板進行管理的。

4、在新方案中,大數據計算服務MaxComputer的應用場景是什麽?

答:在遊族之前的架構中,遊戲日誌是分開存儲,易丟失。在新的架構中,通過Log服務將遊戲日誌搜集到大數據計算服務MaxComputer,對後續的遊戲和運維數據分析提供便利支持。

5、數據庫的部分是單DB多實例嗎?有沒有啟用分布式DB的架構呢?

答:ALL IN ONE架構下,在一個MySQL實例中只運行一個業務;在集群架構下,在單DB實例下,會運行多個業務,分布式DB架構也相應是必備的。

6、遊族專有雲是用的OpenStack,本身組件很多,後續和公有雲之間如何銜接的?

答:目前遊族使用OpenStack僅限於機房,短時間內不會與社區版本同步,機房內修改和使用都很簡單,整個OpenStack定制和修改不多,更多著重於框架的使用。

7、國際節點和國內節點的高可靠鏈路如何建立?

答:該鏈路使用的基本資源是遍布全球的阿裏巴巴骨幹網,阿裏雲是將自己的資源分享出來給使用VPC的客戶,實現國內外高可靠鏈路的建立。

關於分享者

李誌勇,2010年加入遊族網絡,目前擔任遊族網絡運維總監,全面負責遊族網絡運維業務。他具有十年運維工作經驗,八年遊戲行業從業經驗,專註於遊戲虛擬化技術和網絡優化。


遊族網絡:遊族網絡是全球領先的輕娛樂供應商,成立於2009年,於2014年登陸資本市場,成為國內A股主板第一遊戲股,其核心業務包括:全球遊戲發行、互聯網流量經營、IP開發與運營、互聯網產品研發和泛娛樂產業投資。

轉自:https://yq.aliyun.com/product/325

遊族網絡:我們是怎麽玩轉千臺以上遊戲雲服務器的