Docker對(duì)游戲研發(fā)帶來的好處
大小:0.5 MB 人氣: 2017-10-11 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
標(biāo)簽:Docker(11471)
在泛娛樂時(shí)代,游戲行業(yè)特殊的業(yè)務(wù)特點(diǎn)為技術(shù)團(tuán)隊(duì)提出了更高的要求,而Docker對(duì)游戲研發(fā)的運(yùn)營環(huán)境帶來了很多好處。發(fā)展至今,游戲研發(fā)的行業(yè)現(xiàn)狀是怎么樣的?Docker和架構(gòu)改進(jìn)之間如何應(yīng)用?通過Docker構(gòu)建起來的容器平臺(tái),能否提高資源利用率?如何鏡像分發(fā)技術(shù)標(biāo)準(zhǔn)化、統(tǒng)一化應(yīng)用部署流程?以下為正文:
行業(yè)現(xiàn)狀
開發(fā)語言方面我主要想講的是后端程序語言。中國游戲興起大致于2002~ 03年,在那個(gè)時(shí)候開始做服務(wù)器游戲,即有網(wǎng)絡(luò)的游戲,當(dāng)時(shí)大部分使用C++。到后來一直到現(xiàn)在,開發(fā)語言有C++、Java、C#、Python、php,這些語言雖然都可以支持游戲后端,但應(yīng)用場(chǎng)景不一樣。
目前的互聯(lián)網(wǎng)大型游戲,例如征途這類需要支持一兩百萬人同時(shí)在線的游戲,開發(fā)語言基本上都是C++,而頁面游戲則偏向于更輕量級(jí)的服務(wù)器,一般僅需要支持一兩千人同時(shí)在線,有不少人用Java與C#語言來開發(fā)。在國外,Python語言是用來做服務(wù)器架構(gòu)的,但在國內(nèi)它一般是被當(dāng)成腳本做服務(wù)器。PHP語言是這兩年手游興起后,互聯(lián)網(wǎng)游戲中使用得比較多,但大多數(shù)是通過http協(xié)議或郵件協(xié)議通信。從這些年游戲行業(yè)的發(fā)展來看,不能確定Go語言是否肯定可以替代Java,但很大概率會(huì)替代C++,這也可能是游戲后端未來發(fā)展的方向。
當(dāng)前后端開發(fā)腳本語言主要有兩種:Lua和JS。在大型游戲中,Lua語言用得多, 后來JS語言也逐漸變多。而NodeJS是一種后端服務(wù)器開發(fā)框架語言,但更適合做相對(duì)輕量級(jí)的游戲。
后端的開發(fā)編譯環(huán)境越來越多,大約有一半是在Windows下開發(fā)的。然而百分之七八十開發(fā)后的后端程序運(yùn)行環(huán)境都是在linux中,中青寶的后端程序就是這樣。
圖1
如圖1所示,這是一個(gè)傳統(tǒng)的服務(wù)器,是網(wǎng)絡(luò)游戲后端架構(gòu)的服務(wù)器拓?fù)鋱D。圖上所示的是一個(gè)游戲區(qū),一個(gè)游戲區(qū)是什么概念?它可能是由一組分步式的服務(wù)器組成,一組服務(wù)器可能包括:網(wǎng)關(guān),DB,邏輯服等。一般情況下,網(wǎng)關(guān)是可分布的,即橫向擴(kuò)展,用來實(shí)現(xiàn)網(wǎng)絡(luò)的負(fù)載均衡。以前開發(fā)征途游戲時(shí),這樣一個(gè)區(qū)的架構(gòu)部署,一般需要用16臺(tái)宿主主機(jī)來部署。這樣一套區(qū)的架構(gòu)可支持四萬多人同時(shí)在線。06、07年時(shí),機(jī)器配置比較低,對(duì)開發(fā)人員和運(yùn)維人員的技能要求比較高,加上C++語言的特點(diǎn)、并發(fā)、鎖同步、異常等問題很容易造成服務(wù)器宕機(jī),所以之前架構(gòu)及語言的技術(shù)門檻是比較高的。但這在當(dāng)年算作非常好的一套架構(gòu),這套架構(gòu)的思想對(duì)于后來大型網(wǎng)絡(luò)游戲的發(fā)展有很重要的意義,甚至影響了后來互聯(lián)網(wǎng)的發(fā)展。例如騰訊做大型游戲時(shí)也借鑒了這套架構(gòu),通過和他們交流才知道這對(duì)他們的影響也是巨大的。
在開發(fā)版本控制上, 2006年之前基本上是使用CVS管理,2006年之后換成SVN,在2012年、2013年又換成了git。開發(fā)流程一般是程序加代碼,放在服務(wù)器上,由QA進(jìn)行服務(wù)器代碼測(cè)試,測(cè)試完成之后再做Release版本。開發(fā)網(wǎng)和運(yùn)營網(wǎng)是嚴(yán)格隔離的,中間會(huì)有一個(gè)跳轉(zhuǎn)機(jī)(跳轉(zhuǎn)機(jī)對(duì)安全性的要求非常高),再通過運(yùn)維部署到生產(chǎn)機(jī)上,以前的開發(fā)流程上對(duì)人和每個(gè)環(huán)節(jié)的要求都很高,特別是對(duì)測(cè)試,QA出版本與運(yùn)維。因?yàn)楹芏鄿y(cè)試和運(yùn)維并不是研發(fā)人員,但安裝軟件都需要正版,還需要安裝各種插件,這對(duì)他們的要求變得很高,由于經(jīng)常出現(xiàn)開發(fā)環(huán)境和生產(chǎn)環(huán)境的不同,而導(dǎo)致出現(xiàn)了莫名其妙的問題。開發(fā)人員在開發(fā)過程當(dāng)中,不能直接上生產(chǎn)機(jī)(游戲行業(yè)是不允許開發(fā)人員上生產(chǎn)機(jī)改動(dòng)數(shù)據(jù)的),所以查bug非常難,做到最后才發(fā)現(xiàn)很多bug是因?yàn)榄h(huán)境不一樣導(dǎo)致的。一個(gè)開發(fā)人員不能上機(jī)器,還需要猜測(cè)bug出現(xiàn)在哪,這其實(shí)很艱辛。所以描述現(xiàn)狀之后,需要考慮docker后帶來的好處。
架構(gòu)改進(jìn)
圖2
如圖2所示的架構(gòu),理念上的改進(jìn)比實(shí)際的改進(jìn)要更多一些,我從2002年開始關(guān)注docker和Go語言。因?yàn)閷?duì)老游戲的架構(gòu)非常了解,所以我在架構(gòu)改進(jìn)思路的基礎(chǔ)上,想通過docker和云化,讓運(yùn)維和測(cè)試變得更方便、安全、簡(jiǎn)單。一個(gè)是docker化,另一個(gè)是云化,即網(wǎng)絡(luò)部分能拿出來,放在云服務(wù)上,但真正能給游戲公司做云服務(wù)的門檻都會(huì)稍高一些。相對(duì)來說游戲公司的人才也不缺乏,所以他們自己能管理好自己的機(jī)器。
還有一個(gè)更重要的原因,當(dāng)年的那一些服務(wù)器架構(gòu),不適合用云服務(wù)器來管理。如果運(yùn)行一兩千人的游戲無所謂,但如果是同時(shí)在線幾萬人的大區(qū)模式,這對(duì)機(jī)器的要求就會(huì)很高。當(dāng)時(shí)的架構(gòu),很難適應(yīng)現(xiàn)在的云服務(wù)公司所能提供的這些流程。所以我們都是朝這個(gè)方向來做改進(jìn)的。一個(gè)是docker化,一個(gè)是云化的游戲架構(gòu)。
我們以前是一個(gè)游戲和網(wǎng)關(guān),它們之間是綁定的。如果一區(qū)需要三個(gè)網(wǎng)關(guān),這三個(gè)網(wǎng)關(guān)只能給一區(qū)服務(wù)。因?yàn)槔锩嬗泻芏喾植婚_的邏輯,但這會(huì)導(dǎo)致一個(gè)很大的問題:如果想跑到云服務(wù)器上,它們之間的邏輯交互性太強(qiáng),操作會(huì)比較難,利用率也不高。例如一組會(huì)配六個(gè)物理機(jī),它的峰值能達(dá)四萬人,但是實(shí)際上峰值四萬人是開始的幾天,之后并沒有那么大的量。甚至每個(gè)游戲的峰值,可能因?yàn)榛顒?dòng)的不一樣,一區(qū)是八點(diǎn),二區(qū)是九點(diǎn)。其實(shí),為了承受住峰值很多硬件是超配的。
我們認(rèn)為首先能云化的是網(wǎng)關(guān)。新的改進(jìn)思路,就是把跟網(wǎng)絡(luò)相關(guān)的部分全部拿出來,它和游戲本身無關(guān),只是替用戶和游戲之間轉(zhuǎn)發(fā)數(shù)據(jù)而已,并不需要跟某一個(gè)區(qū)域綁定。區(qū)和區(qū)之間可以同時(shí)共享網(wǎng)關(guān),玩家和服務(wù)器之間、客戶端程序和游戲服務(wù)器之間,都不再有網(wǎng)絡(luò)這一部分。這樣就有一個(gè)很大的優(yōu)勢(shì):對(duì)于開發(fā)人員的知識(shí)范疇降低了。因?yàn)樽鼍W(wǎng)絡(luò)游戲開發(fā)有很大一部分都是在處理網(wǎng)絡(luò),網(wǎng)絡(luò)要高效。從流量安全等角度,這部分的復(fù)雜度是很高的。
從業(yè)務(wù)邏輯看,由于現(xiàn)在大部分都在用腳本做,所以門檻沒有網(wǎng)絡(luò)層高。把網(wǎng)關(guān)相關(guān)的提出來,在游戲開發(fā)的過程當(dāng)中,對(duì)于個(gè)人的使用能力降低,對(duì)于程序員的門檻降低,安全性提高。網(wǎng)關(guān)相關(guān)工作可能需要最核心的人做,我認(rèn)為這方面需要有一些保密的要求。更重要的是現(xiàn)在網(wǎng)絡(luò)相關(guān)的部分,已經(jīng)可以獨(dú)立拿出來放在云服務(wù)公司。例如今天一區(qū)搞活動(dòng),可能有四萬人的峰值,我們用的六臺(tái)網(wǎng)關(guān)。明天二區(qū)搞活動(dòng),一區(qū)不搞活動(dòng),同樣用這個(gè)網(wǎng)關(guān),這大幅度的提高了硬件的利用率,這個(gè)就是我們現(xiàn)在的改進(jìn)思路。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
Docker對(duì)游戲研發(fā)帶來的好處下載
相關(guān)電子資料下載
- 如何在Windows系統(tǒng)上設(shè)置Docker鏡像源 55
- 機(jī)器學(xué)習(xí)需要掌握的九種工具盤點(diǎn) 16
- Docker鏡像國內(nèi)加速的幾種方法 55
- VectorCAST|Docker場(chǎng)景下的代碼白盒測(cè)試實(shí)施 402
- 如何用Springboot整合Redis 118
- 如何在macOS系統(tǒng)中用Docker運(yùn)行macOS鏡像呢? 364
- 什么是Docker容器?為什么需要Docker容器? 71
- 為什么需要Docker容器?Docker容器和VM有什么區(qū)別? 323
- 如何使用 Docker容器化技術(shù) 1188
- Dockerfile定義Docker鏡像的構(gòu)建過程 1088