您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

游族網(wǎng)絡(luò)游戲云服務(wù)器運(yùn)維及游戲產(chǎn)品架構(gòu)進(jìn)化史

大?。?/span>0.5 MB 人氣: 2017-10-11 需要積分:1
經(jīng)過(guò)近七年的高速發(fā)展,公司游戲服務(wù)器從100臺(tái)增長(zhǎng)到10000+臺(tái),游族整體游戲架構(gòu)也經(jīng)過(guò)了三個(gè)階段的演變:
  公司早期廣泛使用的第一代架構(gòu),當(dāng)時(shí)主流的產(chǎn)品都是以DB+計(jì)算+前端這樣的3個(gè)角色開(kāi)發(fā)設(shè)計(jì)并部署,服務(wù)器以物理機(jī)為主,一個(gè)游戲區(qū)組需要2~4臺(tái)服務(wù)器,不同的機(jī)器承擔(dān)不同的角色。這種架構(gòu)方案效率低,基本上不可能實(shí)現(xiàn)一天開(kāi)100個(gè)區(qū)組(100個(gè)區(qū)組大概需要400臺(tái)服務(wù)器); 隨著業(yè)務(wù)量的增長(zhǎng)和虛擬化技術(shù)廣泛使用,游族整體游戲架構(gòu)更新為第二代架構(gòu),全面采用虛擬化技術(shù),把一臺(tái)高配的物理機(jī)器虛擬化成多臺(tái)符合游戲需求的虛擬機(jī)來(lái)使用,并實(shí)現(xiàn)了ALL IN ONE的系統(tǒng)架構(gòu)。該架構(gòu)方案運(yùn)維效率高,適合規(guī)模開(kāi)展游戲運(yùn)營(yíng),但不具備業(yè)務(wù)高可用特性,一天開(kāi)100個(gè)區(qū)組成為常態(tài); 為了迎合大區(qū)大服、全球同服,游族融合了前兩代架構(gòu)的特點(diǎn),推出了第三代架構(gòu),按角色分拆并形成服務(wù)集群模式。集群架構(gòu)結(jié)合了物理機(jī)與虛擬化的優(yōu)勢(shì),實(shí)現(xiàn)彈性擴(kuò)容,游戲邏輯以服務(wù)進(jìn)程或集群配置項(xiàng)的形式提供服務(wù)。該架構(gòu)方案運(yùn)維效率更高,可實(shí)現(xiàn)秒級(jí)開(kāi)服同時(shí)具備業(yè)務(wù)高可用特性。
  基于第二代架構(gòu),游族基于OpenStack自己的私有云,最初目標(biāo)是為了提高服務(wù)器利用率、降低成本和實(shí)現(xiàn)分鐘級(jí)開(kāi)服。運(yùn)維團(tuán)隊(duì)以O(shè)penStack G版為藍(lán)本進(jìn)行調(diào)優(yōu)并修改;整個(gè)網(wǎng)絡(luò)采用的是VLAN模式,保證最大限度與現(xiàn)有網(wǎng)絡(luò)架構(gòu)保持兼容;存儲(chǔ)方面使用本地磁盤作為存儲(chǔ)。
  通過(guò)底層優(yōu)化后,游族私有云基本上可以滿足業(yè)務(wù)的需求,目前90%游戲業(yè)務(wù)運(yùn)行在上面,虛機(jī)規(guī)模持續(xù)保持在10000臺(tái)以上,游族私有云平臺(tái)沒(méi)有提供WEB管理界面,日常所有的操作都是通過(guò)命令行和腳本的形式進(jìn)行操作,但對(duì)于虛擬機(jī)的增刪查改,重新封裝了一層簡(jiǎn)潔的API接口實(shí)現(xiàn)與游族運(yùn)維平臺(tái)的對(duì)接。經(jīng)過(guò)評(píng)估測(cè)驗(yàn),在高峰時(shí)期,整個(gè)私有云資源利用率可達(dá)到83%。
  運(yùn)維方式的轉(zhuǎn)變
  與三代架構(gòu)相互對(duì)應(yīng)是游族運(yùn)維的三個(gè)階段:
  在第一代架構(gòu)上,運(yùn)維基本是手工運(yùn)維,技術(shù)含量并不高,純粹是采用人與時(shí)間堆積進(jìn)行,運(yùn)維同學(xué)需要登錄每一臺(tái)服務(wù)器,順序執(zhí)行相關(guān)的命令和腳本。獨(dú)立的版控服務(wù)器,通過(guò)主動(dòng)推送的形式進(jìn)行版本更新;在第二代架構(gòu)上,通過(guò)自動(dòng)化工具進(jìn)行批量運(yùn)維,團(tuán)隊(duì)推出了使用expect寫(xiě)的auto批量腳本,所有操作只需登錄一臺(tái)集控服務(wù)器執(zhí)行批量并發(fā)操作的腳本,獨(dú)立的版控服務(wù)器,通過(guò)并行的主動(dòng)推送;在第三代架構(gòu)上,可以實(shí)現(xiàn)系統(tǒng)化運(yùn)維,多個(gè)運(yùn)維系統(tǒng)相互協(xié)調(diào)配合實(shí)現(xiàn),例如:CMDB、業(yè)務(wù)樹(shù)、作業(yè)平臺(tái)等。游戲區(qū)組搭建的時(shí)間基本上可以忽略(可按需求實(shí)現(xiàn)按條件觸發(fā)或手動(dòng)觸發(fā)搭建操作),所有的更新操作在WEB管理平臺(tái)就可完成。
  游族作業(yè)平臺(tái)UJOBS
  游族網(wǎng)絡(luò)游戲云服務(wù)器運(yùn)維及游戲產(chǎn)品架構(gòu)進(jìn)化史
  圖二:UJOBS架構(gòu)及其游戲更新流程
  系統(tǒng)化運(yùn)維過(guò)程中使用的作業(yè)平臺(tái)(UJOBS)是屬于C/S的架構(gòu),其核心部分由任務(wù)調(diào)度器和agent組成,通過(guò)調(diào)用API接口完成多種形式的指令下發(fā)。UJOBS簡(jiǎn)單的來(lái)說(shuō)是為服務(wù)器管理提供了執(zhí)行命令的通道,將所有的執(zhí)行命令和腳本在目標(biāo)服務(wù)器橫向執(zhí)行完,把輸出結(jié)果記錄日志里面,同時(shí)可通過(guò)WEB界面實(shí)時(shí)查看分析。任務(wù)調(diào)度器是用來(lái)全局策略控制,進(jìn)行并發(fā)量控制。任務(wù)列表里面保存任務(wù)的完整信息。指令倉(cāng)庫(kù)保存常用的命令個(gè)腳本和上下文關(guān)聯(lián)的命令組合。
  在UJOBS平臺(tái)上,游戲版本更新流程如下:
  版本庫(kù)的版本變更自動(dòng)觸發(fā)構(gòu)建; 從版本庫(kù)拉取變更后的版本文件; 通過(guò)構(gòu)建操作后,推送目標(biāo)程序到分布式的全局版控服務(wù)器集群; 在作業(yè)平臺(tái)下發(fā)更新操作后,UJOBS的agent取得該次更新的版控服務(wù)器地址、變更清單以及版本信息; 從版控服務(wù)器拉取更新文件到本地執(zhí)行預(yù)定的更新腳本。
  同時(shí)在UJOBS執(zhí)行的過(guò)程中可實(shí)時(shí)查看輸出的日志。當(dāng)游戲版本更新出現(xiàn)異常,有兩種回滾方式:第一種,游戲服務(wù)器上保留歷史版本,異常時(shí)回退到歷史版本;第二種,覆蓋回滾,將老版本再次發(fā)布進(jìn)行回滾。
  數(shù)據(jù)庫(kù)備份與恢復(fù)
  相對(duì)于游戲版本更新備份而言,數(shù)據(jù)庫(kù)備份更為重要。ALLINONE模式或者非集群模式的游戲業(yè)務(wù)場(chǎng)景下,會(huì)存在多達(dá)好幾千個(gè)MySQL實(shí)例,若是要按常規(guī)的MySQL備份方案來(lái)實(shí)施,管理難度和成本都要翻好倍。因此游族網(wǎng)絡(luò)采用Xtrabackup在主庫(kù)上直接備份數(shù)據(jù)文件方式,備份文件暫存本地;本地備份完成后在備份系統(tǒng)選舉一臺(tái)遠(yuǎn)程服務(wù)器進(jìn)行異地備份;備份策略每小時(shí)一次備份,半小時(shí)本地備份半小時(shí)遠(yuǎn)程備份。該備份方法在單主庫(kù)業(yè)務(wù)場(chǎng)景下可能是最靠譜的數(shù)據(jù)備份方案,但備份過(guò)程對(duì)主庫(kù)會(huì)有影響、(限制IO操作),最壞情況下可能出現(xiàn)1小時(shí)的數(shù)據(jù)丟失(業(yè)務(wù)接受少量的數(shù)據(jù)丟失)。
  在數(shù)據(jù)恢復(fù)方面,通過(guò)一鍵恢復(fù)工具,只需要提供恢復(fù)的IP、時(shí)間段和業(yè)務(wù)信息(如庫(kù)名)即可實(shí)現(xiàn)數(shù)據(jù)恢復(fù);24小時(shí)內(nèi)的數(shù)據(jù)通過(guò)本地的數(shù)據(jù)恢復(fù)(結(jié)合二進(jìn)制日志),超過(guò)24小時(shí)的數(shù)據(jù)通過(guò)異地?cái)?shù)據(jù)恢復(fù)。
  云上遷移歷程
  現(xiàn)在游族已經(jīng)將幾款老游戲遷移到阿里云上。在將ALLINONE架構(gòu)平滑遷移到云上的過(guò)程中,首先要求就是遷移過(guò)程不能長(zhǎng)時(shí)間停服,只能接受正常的版本更新的停服時(shí)間。整個(gè)遷移過(guò)程分為以下幾步:
  第一步提前準(zhǔn)備資源,在阿里云提前申請(qǐng)好資源,初始化環(huán)境并把VPC與自有機(jī)房的網(wǎng)絡(luò)打通,實(shí)現(xiàn)內(nèi)網(wǎng)互通為數(shù)據(jù)同步做好準(zhǔn)備;第二步提前同步數(shù)據(jù),使用Xtrabackup備份在線把MySQL配置成主從同步模式,將數(shù)據(jù)同步到阿里云ECS,在一段時(shí)間后完成數(shù)據(jù)遷移。第三步正式遷移,正常的游戲停服維護(hù)時(shí)間(0.5~2小時(shí))就可完成業(yè)務(wù)上阿里云的遷移。目前已經(jīng)平滑完成3款游戲產(chǎn)品的遷移,每款產(chǎn)品準(zhǔn)備時(shí)間3~5天,正式遷移用時(shí)1~2小時(shí),在阿里云平臺(tái)使用的虛機(jī)超過(guò)1000臺(tái)。
  游族網(wǎng)絡(luò)游戲云服務(wù)器運(yùn)維及游戲產(chǎn)品架構(gòu)進(jìn)化史
  圖三:新游戲上阿里云部署方案
  上圖為ALLINONE架構(gòu)遷移在阿里云后的游戲部署:游戲邏輯運(yùn)行在ECS上,業(yè)務(wù)中使用VPC網(wǎng)絡(luò),通過(guò)自建的ULB對(duì)外提供服務(wù)。游族網(wǎng)絡(luò)下一步計(jì)劃將集群模式部署在阿里云平臺(tái)上,游戲邏輯將在ECS集群運(yùn)行,后端數(shù)據(jù)存儲(chǔ)在RDS集群中,前端通過(guò)SLB和負(fù)載均衡保證業(yè)務(wù)高可用,同時(shí)會(huì)接入LOG和大數(shù)據(jù)計(jì)算服務(wù)MaxComputer確保大數(shù)據(jù)業(yè)務(wù)。
  在遷移到云的過(guò)程中,阿里云的技術(shù)支持起到了關(guān)鍵作用,線上線下及時(shí)溝通,以及特定技術(shù)的定制,保證了整個(gè)遷移過(guò)程的順利進(jìn)行。
  如何去選擇合適的數(shù)據(jù)庫(kù)?
  在游戲遷移過(guò)程中,遇到了很多困難,其中一點(diǎn)是選擇自建MySQL還是RDS。根據(jù)游戲遷移經(jīng)驗(yàn),解決該問(wèn)題,他認(rèn)為應(yīng)從以下三個(gè)因素進(jìn)行考慮:
  實(shí)例數(shù)量:實(shí)例數(shù)量多且業(yè)務(wù)規(guī)模?。o(wú)需進(jìn)行針對(duì)性的優(yōu)化)適合自建MySQL服務(wù);實(shí)例數(shù)量不多業(yè)務(wù)相對(duì)會(huì)比較集中,數(shù)據(jù)庫(kù)負(fù)載較高需要針對(duì)性的進(jìn)行優(yōu)化適合使用RDS服務(wù);數(shù)據(jù)大?。簲?shù)據(jù)量的大小會(huì)直接影響到數(shù)據(jù)庫(kù)性能和數(shù)據(jù)備份的機(jī)制,數(shù)據(jù)量越大越需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行精細(xì)化管理,數(shù)據(jù)的備份難度也越大,這種情況下建議使用RDS服務(wù),反之可自建;成本核算:從實(shí)例規(guī)格來(lái)看RDS會(huì)比ECS自建MySQL要貴,但若是必須用到RDS的某些特性(如:數(shù)據(jù)安全和穩(wěn)定性)時(shí)成本也就不會(huì)放在首要位置了。
  與此同時(shí),大數(shù)據(jù)量的自建MySQL可以采用延時(shí)同步的方法,此方法已在游族網(wǎng)絡(luò)的女神聯(lián)盟(手游)的集群架構(gòu)方案中在使用。游族運(yùn)維團(tuán)隊(duì)獨(dú)創(chuàng)的數(shù)據(jù)備份系統(tǒng)、UJOBS、業(yè)務(wù)網(wǎng)關(guān)等獨(dú)具特色解決方案確保了其業(yè)務(wù)量在行業(yè)內(nèi)處于領(lǐng)先地位。
  QA環(huán)節(jié):
  1、游族目前的運(yùn)維人員數(shù)量是多少?
  答:游族網(wǎng)絡(luò)最初運(yùn)維團(tuán)隊(duì)在二十人以上,經(jīng)過(guò)技術(shù)優(yōu)化后,目前團(tuán)隊(duì)人數(shù)在十人左右。從原來(lái)的十幾款產(chǎn)品到現(xiàn)在的三十幾款產(chǎn)品,運(yùn)維業(yè)務(wù)量增長(zhǎng)一倍,整個(gè)運(yùn)維團(tuán)隊(duì)人員縮減一半。團(tuán)隊(duì)不斷將技術(shù)轉(zhuǎn)化為生產(chǎn)力,這是一個(gè)持續(xù)推進(jìn)的過(guò)程。
  2、從運(yùn)維小白到總監(jiān)的成長(zhǎng)過(guò)程?
  答:首先,我對(duì)運(yùn)維這個(gè)行業(yè)保持很高的興趣。從游戲?qū)?zhàn)平臺(tái)接觸運(yùn)維開(kāi)始,就愿意持續(xù)花時(shí)間投入游戲運(yùn)維,曾耗費(fèi)兩天三夜的時(shí)間來(lái)處理運(yùn)維中遇到的故障。當(dāng)然最初也是從底層的運(yùn)維人員做起,團(tuán)隊(duì)管理是被逼出來(lái)的,是一個(gè)慢慢成長(zhǎng)的過(guò)程。在團(tuán)隊(duì)中,學(xué)習(xí)應(yīng)居于首位,每個(gè)運(yùn)維人員需要不斷地學(xué)習(xí),提升自己的能力。
  3、DB除了MySQL還有其他類型嗎?比如NoSQL這類數(shù)據(jù)庫(kù)是如何管理和部署的?
  答:游族網(wǎng)絡(luò)的產(chǎn)品絕大多數(shù)都是使用的MySQL,有少數(shù)產(chǎn)品使用了Mongodb,因?yàn)榱可贂簳r(shí)還是通過(guò)手工管理;緩存業(yè)務(wù)有使用Redis但不存儲(chǔ)關(guān)鍵數(shù)據(jù),Redis的數(shù)據(jù)備份使用數(shù)據(jù)備份系統(tǒng)進(jìn)行集中管理,所有的軟件部署都是通過(guò)標(biāo)準(zhǔn)化的業(yè)務(wù)模板進(jìn)行管理的。
  4、在新方案中,大數(shù)據(jù)計(jì)算服務(wù)MaxComputer的應(yīng)用場(chǎng)景是什么?
  答:在游族之前的架構(gòu)中,游戲日志是分開(kāi)存儲(chǔ),易丟失。在新的架構(gòu)中,通過(guò)Log服務(wù)將游戲日志搜集到大數(shù)據(jù)計(jì)算服務(wù)MaxComputer,對(duì)后續(xù)的游戲和運(yùn)維數(shù)據(jù)分析提供便利支持。
  5、數(shù)據(jù)庫(kù)的部分是單DB多實(shí)例嗎?有沒(méi)有啟用分布式DB的架構(gòu)呢?
  答:ALLINONE架構(gòu)下,在一個(gè)MySQL實(shí)例中只運(yùn)行一個(gè)業(yè)務(wù);在集群架構(gòu)下,在單DB實(shí)例下,會(huì)運(yùn)行多個(gè)業(yè)務(wù),分布式DB架構(gòu)也相應(yīng)是必備的。
  6、游族私有云是用的OpenStack,本身組件很多,后續(xù)和公有云之間如何銜接的?
  答:目前游族使用OpenStack僅限于機(jī)房,短時(shí)間內(nèi)不會(huì)與社區(qū)版本同步,機(jī)房?jī)?nèi)修改和使用都很簡(jiǎn)單,整個(gè)OpenStack定制和修改不多,更多著重于框架的使用。
  7、國(guó)際節(jié)點(diǎn)和國(guó)內(nèi)節(jié)點(diǎn)的高可靠鏈路如何建立?
  答:該鏈路使用的基本資源是遍布全球的阿里巴巴骨干網(wǎng),阿里云是將自己的資源分享出來(lái)給使用VPC的客戶,實(shí)現(xiàn)國(guó)內(nèi)外高可靠鏈路的建立。
?

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?