《游戲運(yùn)維的最佳實(shí)踐:搜狐暢游自動(dòng)化運(yùn)維之旅!》要點(diǎn):
本文介紹了游戲運(yùn)維的最佳實(shí)踐:搜狐暢游自動(dòng)化運(yùn)維之旅!,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
作者:黎志剛
編輯:王雪燕、陶家龍、孫淑娟
技術(shù)編輯:王雪燕,關(guān)注架構(gòu)、算法,運(yùn)維等技術(shù)領(lǐng)域,有投稿、尋求報(bào)道意向技術(shù)人請(qǐng)聯(lián)絡(luò) wangxy@51cto.com
作者介紹:
黎志剛
搜狐暢游系統(tǒng)運(yùn)維中心總監(jiān)
游戲行業(yè)近十年技術(shù)管理經(jīng)驗(yàn).2008 年加入暢游天下,現(xiàn)任系統(tǒng)運(yùn)維中心總監(jiān)及項(xiàng)目管理部經(jīng)理、打造百萬(wàn)用戶(hù)在線(xiàn)游戲技術(shù)運(yùn)維平臺(tái). 近年來(lái),致力于建設(shè)一流的游戲技術(shù)團(tuán)隊(duì),負(fù)責(zé)全面管理運(yùn)維工作,包括 IDC/網(wǎng)絡(luò)/硬件規(guī)劃管理、系統(tǒng)運(yùn)維、數(shù)據(jù)庫(kù)運(yùn)維、應(yīng)用運(yùn)維、運(yùn)維平臺(tái)與工具開(kāi)發(fā)等;建立和完善規(guī)范化的運(yùn)維體系,保障運(yùn)維質(zhì)量; 不斷研發(fā)與探索運(yùn)維自動(dòng)化及各類(lèi)創(chuàng)新途徑,縮短運(yùn)維響應(yīng)時(shí)間,減低運(yùn)維成本.
搜狐黎志剛見(jiàn)證了暢游游戲自動(dòng)化運(yùn)維平臺(tái)的從無(wú)到有,通過(guò)在其中踩過(guò)的坑、解過(guò)的結(jié),他向大家來(lái)闡述游戲運(yùn)維的進(jìn)階之路.本文主要圍繞暢游游戲管理體系與運(yùn)維自動(dòng)化的演變歷程、運(yùn)維自動(dòng)化的實(shí)現(xiàn)及未來(lái)運(yùn)維四方面展開(kāi).
從 2008 年畢業(yè)以實(shí)習(xí)生的身份進(jìn)入搜狐暢游,我同公司一起成長(zhǎng),經(jīng)歷了整個(gè)運(yùn)維管理體系從小到大的過(guò)程.
整個(gè)運(yùn)維管理體系是從最初石器時(shí)代(腳本化),之后的青銅時(shí)代(半自動(dòng)化)、蒸汽時(shí)代(DevOPS)一路演變過(guò)來(lái),現(xiàn)在處于自動(dòng)化和智能化過(guò)渡階段.
如下圖,是暢游運(yùn)維自動(dòng)化的步驟,分別是數(shù)據(jù)總線(xiàn)統(tǒng)一、業(yè)務(wù)自動(dòng)化、標(biāo)準(zhǔn)化統(tǒng)一、服務(wù)驅(qū)動(dòng)和智能運(yùn)維.
對(duì)于已發(fā)生故障進(jìn)行分析發(fā)現(xiàn),40% 的故障由數(shù)據(jù)不準(zhǔn)確導(dǎo)致.出現(xiàn)這樣情況,是因?yàn)樽援a(chǎn)信息或很多系統(tǒng)之間交互信息帶來(lái)的問(wèn)題.
所以首要做的是數(shù)據(jù)的系統(tǒng)、準(zhǔn)確性、調(diào)用及引用接口的統(tǒng)一.之后對(duì)數(shù)據(jù)和文件分發(fā)研發(fā)了一系列平臺(tái),還有各個(gè)平臺(tái)標(biāo)準(zhǔn)化的統(tǒng)一.
如下圖,是暢游運(yùn)維體系架構(gòu):
最底層采用的是混合云的模式,在這基礎(chǔ)上,又建設(shè)了多個(gè)如海豹、集中配置管理、管理和服務(wù)相關(guān)的支撐系統(tǒng),還有最重要的天使和監(jiān)控告警系統(tǒng).
天使系統(tǒng)的主要職責(zé)就是權(quán)限管理,暢游各運(yùn)維人員所負(fù)責(zé)的游戲各有不同,由于游戲版本的特殊性,一旦泄露,會(huì)對(duì)整個(gè)游戲的營(yíng)收造成很大影響.
所以,要嚴(yán)格管理每個(gè)工程師的權(quán)限.監(jiān)控警報(bào)系統(tǒng)之所以重要,是因?yàn)樯婕暗剿杏螒蛲婕业捏w驗(yàn)和收入.
面對(duì)這樣的運(yùn)維體系架構(gòu),暢游都在哪些部分做了自動(dòng)化呢?我們先來(lái)看看游戲運(yùn)維有哪些特點(diǎn)和痛點(diǎn).
每個(gè)游戲的構(gòu)架和應(yīng)用場(chǎng)景,乃至于所使用的數(shù)據(jù)庫(kù)和開(kāi)發(fā)語(yǔ)言完全不同.還有不同國(guó)籍開(kāi)發(fā)的游戲,整個(gè)操作系統(tǒng)和數(shù)據(jù)庫(kù)環(huán)境、版本都存在大量的不同點(diǎn).這樣一來(lái),運(yùn)維整個(gè)平臺(tái)和環(huán)境都要面臨很大挑戰(zhàn).
游戲運(yùn)維的痛點(diǎn)有很多,如:
為克服這些痛點(diǎn),近四五年,暢游運(yùn)維做了很多事情,業(yè)務(wù)和工程師人數(shù)等方面都有變化.
從 2014 年到 2016 年,業(yè)務(wù)每年實(shí)現(xiàn) 20% 的增長(zhǎng),全職工程師在不斷的減少,這是因?yàn)?2014 年到現(xiàn)在,我們做了大量的自動(dòng)化工具,利用自動(dòng)化平臺(tái)和資源整合,每年資源成本減少 30%.
2016 年 CMDB 海豹系統(tǒng)上線(xiàn),對(duì)所有在線(xiàn)資源進(jìn)行整合,公共集群建設(shè)的完成,把單游戲和每一組游戲所需公共服務(wù)放在一起,使得資源成本減少 50%.
這里值得一提的有趣現(xiàn)象是 2014 年到 2015 年的人為故障數(shù)量基本持平,這是自動(dòng)化帶來(lái)的副作用,2016 年人為故障下降了 30%,此時(shí)自動(dòng)化的作用開(kāi)始發(fā)揮出來(lái)了.
2014 年到 2015 年的全局故障率(網(wǎng)絡(luò)故障、硬件故障等所有的故障)減少了 20%,2016 年故障率下降了 35%.
我們?yōu)槭裁纯梢栽跇I(yè)務(wù)增長(zhǎng)的情況下,依然可以做到故障下降和成本節(jié)約?
分析原因如下:
針對(duì)這些原因,暢游運(yùn)維做了很多事情,下面主要分享如何通過(guò)海豹系統(tǒng)做信息的統(tǒng)一化和標(biāo)準(zhǔn)化、PaaS 平臺(tái)實(shí)現(xiàn) Devops 自動(dòng)化交付以及 Docker 容器技術(shù)和混合云架構(gòu)等內(nèi)容.
對(duì)于游戲運(yùn)維自動(dòng)化平臺(tái)應(yīng)用來(lái)說(shuō),是既定的計(jì)劃,可以當(dāng)做任務(wù)來(lái)執(zhí)行,所有開(kāi)服、關(guān)服、更新、數(shù)據(jù)回檔及檔案恢復(fù)等所有操作都可以定義成任務(wù)或工作流,之后把所有的設(shè)計(jì)全部按照任務(wù)系統(tǒng)的架構(gòu)來(lái)設(shè)計(jì)即可.
在平臺(tái)設(shè)計(jì)過(guò)程中,系統(tǒng)主要使用 Python 來(lái)進(jìn)行開(kāi)發(fā).因?yàn)閺?2015 年開(kāi)始,我們發(fā)現(xiàn),如果全部用 Java 來(lái)開(kāi)發(fā)的話(huà),運(yùn)維人員的參與度會(huì)非常低.
假設(shè)運(yùn)維人員對(duì) Java 不了解,運(yùn)維和開(kāi)發(fā)之間需求溝通就不順暢.這里的解決方案就是一線(xiàn)運(yùn)維人員必須要懂 Python,而且要參與到開(kāi)發(fā)過(guò)程中.
如下圖,是自動(dòng)化運(yùn)維任務(wù)的系統(tǒng)架構(gòu):
自動(dòng)化運(yùn)維任務(wù)系統(tǒng)是結(jié)合開(kāi)源技術(shù)與公司現(xiàn)有資源的運(yùn)維的基礎(chǔ)操作平臺(tái).不僅支持腳本執(zhí)行、定時(shí)任務(wù)等基礎(chǔ)運(yùn)維場(chǎng)景外,還提供了流程式開(kāi)發(fā)框架,使運(yùn)維人員能開(kāi)發(fā)自己需要的業(yè)務(wù)維護(hù)功能.
海豹系統(tǒng)承載暢游硬件層、應(yīng)用層和網(wǎng)絡(luò)層等運(yùn)維層所有信息的記錄,如設(shè)備、配置、關(guān)聯(lián)權(quán)限、關(guān)聯(lián)拓?fù)洹㈥P(guān)聯(lián)環(huán)境、關(guān)聯(lián)流程等.基于這些信息,以應(yīng)用為核心,通過(guò)業(yè)務(wù)場(chǎng)景進(jìn)行驅(qū)動(dòng).
如下圖,是海豹系統(tǒng)(CMDB)的功能架構(gòu):
整個(gè)功能架構(gòu)從下至上分為數(shù)據(jù)來(lái)源、數(shù)據(jù)層和應(yīng)用層部分.用以管理系統(tǒng)中心的服務(wù)器及相關(guān)的軟硬件資產(chǎn)信息,是所有系統(tǒng)資產(chǎn)信息的來(lái)源.數(shù)據(jù)層對(duì)所有資產(chǎn)進(jìn)行查詢(xún)、變更及管理,通過(guò)統(tǒng)計(jì)報(bào)表模塊圖展示資產(chǎn)的情況.
如下圖,是海豹系統(tǒng)(CMDB)的功能架構(gòu)和技術(shù)架構(gòu):
這是海報(bào)系統(tǒng)的最初時(shí)期,由不足五人用 Java 寫(xiě)的核心架構(gòu).引擎部分,之所以還在用 JSP?和?Freemarker?引擎,是為了兼顧老的系統(tǒng).
如下圖,是海豹系統(tǒng)(CMDB)的界面:
所有的端游、手游的信息會(huì)集中到海報(bào)系統(tǒng),意味著資產(chǎn)管理專(zhuān)員可以通過(guò)這個(gè)平臺(tái)做所有資源初始化和分配調(diào)度.
通過(guò)業(yè)務(wù)邏輯把各個(gè)資源統(tǒng)籌起來(lái),資源所見(jiàn)即所得,更容易的實(shí)現(xiàn)了持續(xù)集成,通過(guò)各項(xiàng)基礎(chǔ)服務(wù)的組合,實(shí)現(xiàn)代碼自動(dòng)化發(fā)布、應(yīng)用管理、環(huán)境初始化部署、線(xiàn)上運(yùn)維一體化集成,提升項(xiàng)目代碼編譯、測(cè)試、發(fā)布效率.
AAS 平臺(tái)主要職責(zé)如下:
如下圖,是 PAAS 平臺(tái)的主要技術(shù)選型:
從上圖可以看出,PAAS 平臺(tái)里也包含外部組件,Docker 也包含其中.因?yàn)橛螒蚬敬罅看a基本都放到 SVN,所以我們也會(huì)選在 SVN 來(lái)管理.
PAAS 平臺(tái)的設(shè)計(jì)中,核心部分是 Docker.那搜狐暢游的 Docker 是如何設(shè)計(jì)的呢?
如下,是原 Docker 架構(gòu)圖:
如下,是最終版的 Docker 架構(gòu)圖:
從 2014 年至今,我們已經(jīng)迭代過(guò)兩個(gè)版本,搜狐暢游在容器監(jiān)控?cái)?shù)據(jù)共享、穩(wěn)定性和鏡像管理等方面進(jìn)行了優(yōu)化.
如下圖,是技術(shù)演化對(duì)比:
因 Ceph 副本之間不穩(wěn)定,不支持集群共享,所以改成 NFS+DRBD.因 Consul 集群 Leader 切換頻繁,業(yè)務(wù)數(shù)據(jù)不同步,負(fù)載過(guò)高,改成 Etcd,來(lái)保證數(shù)據(jù)同步統(tǒng)一.
為應(yīng)對(duì) cAdvisor 無(wú)法匯總,無(wú)法查看歷史數(shù)據(jù)的問(wèn)題,我們自研了 Hunter.操作系統(tǒng)從 2.6 升級(jí)到 3.18,應(yīng)對(duì)運(yùn)行久了后 devicemapper 的信息無(wú)法寫(xiě)入導(dǎo)致系統(tǒng)異常的問(wèn)題.
暢游運(yùn)維體系最底層采用的是混合云結(jié)構(gòu),開(kāi)始考慮的方式是直接接入所有公有云,用專(zhuān)業(yè)的方式打通,但游戲需要 BGP(網(wǎng)關(guān)協(xié)議).
這意味著必須多線(xiàn)接入,除電信、聯(lián)通外,所有的小區(qū)寬帶,第三方寬帶也必須要接入,所以需要選擇混合云的結(jié)構(gòu).
選擇混合云相比暢游 IDC 降低成本在 20% 左右,并且使資源彈性,云上云下,擴(kuò)縮容更快速.在可靠性方面,不僅可實(shí)現(xiàn)異地雙活,還有抗攻擊、DNS 劫持、冗余可靠等優(yōu)勢(shì).
暢游運(yùn)維管理體系的下一步將把持續(xù)交付的分層能力和公共服務(wù)標(biāo)準(zhǔn)化作為探索方向.
在暢游運(yùn)維做自動(dòng)化時(shí),會(huì)利用可持續(xù)交付的理念和原則去做.工具開(kāi)發(fā)過(guò)程中,一定要注意的問(wèn)題是:工具越多,工具與工具之間的調(diào)用就會(huì)出現(xiàn)大量的問(wèn)題.
所以一定要進(jìn)行平臺(tái)化和做成集群式服務(wù),否則成本不會(huì)降低,反而故障依舊會(huì)很多.
如下圖,是公共服務(wù)平臺(tái)整合架構(gòu):
暢游把 redis、Nginx、MySQL 等集群全部接入,不需要做其他的事情.
暢游運(yùn)維做整個(gè)自動(dòng)化過(guò)程中的心得有三個(gè):
文章來(lái)自微信公眾號(hào):51TO技術(shù)棧
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/2200.html