Docker對游戲研發帶來的好處
大小:0.5 MB 人氣: 2017-10-11 需要積分:1
以下為正文:
行業現狀
開發語言方面我主要想講的是后端程序語言。中國游戲興起大致于2002~ 03年,在那個時候開始做服務器游戲,即有網絡的游戲,當時大部分使用C++。到后來一直到現在,開發語言有C++、Java、C#、Python、php,這些語言雖然都可以支持游戲后端,但應用場景不一樣。
目前的互聯網大型游戲,例如征途這類需要支持一兩百萬人同時在線的游戲,開發語言基本上都是C++,而頁面游戲則偏向于更輕量級的服務器,一般僅需要支持一兩千人同時在線,有不少人用Java與C#語言來開發。在國外,Python語言是用來做服務器架構的,但在國內它一般是被當成腳本做服務器。PHP語言是這兩年手游興起后,互聯網游戲中使用得比較多,但大多數是通過http協議或郵件協議通信。從這些年游戲行業的發展來看,不能確定Go語言是否肯定可以替代Java,但很大概率會替代C++,這也可能是游戲后端未來發展的方向。
當前后端開發腳本語言主要有兩種:Lua和JS。在大型游戲中,Lua語言用得多, 后來JS語言也逐漸變多。而NodeJS是一種后端服務器開發框架語言,但更適合做相對輕量級的游戲。
后端的開發編譯環境越來越多,大約有一半是在Windows下開發的。然而百分之七八十開發后的后端程序運行環境都是在linux中,中青寶的后端程序就是這樣。
圖1
如圖1所示,這是一個傳統的服務器,是網絡游戲后端架構的服務器拓撲圖。圖上所示的是一個游戲區,一個游戲區是什么概念?它可能是由一組分步式的服務器組成,一組服務器可能包括:網關,DB,邏輯服等。一般情況下,網關是可分布的,即橫向擴展,用來實現網絡的負載均衡。以前開發征途游戲時,這樣一個區的架構部署,一般需要用16臺宿主主機來部署。這樣一套區的架構可支持四萬多人同時在線。06、07年時,機器配置比較低,對開發人員和運維人員的技能要求比較高,加上C++語言的特點、并發、鎖同步、異常等問題很容易造成服務器宕機,所以之前架構及語言的技術門檻是比較高的。但這在當年算作非常好的一套架構,這套架構的思想對于后來大型網絡游戲的發展有很重要的意義,甚至影響了后來互聯網的發展。例如騰訊做大型游戲時也借鑒了這套架構,通過和他們交流才知道這對他們的影響也是巨大的。
在開發版本控制上, 2006年之前基本上是使用CVS管理,2006年之后換成SVN,在2012年、2013年又換成了git。開發流程一般是程序加代碼,放在服務器上,由QA進行服務器代碼測試,測試完成之后再做Release版本。開發網和運營網是嚴格隔離的,中間會有一個跳轉機(跳轉機對安全性的要求非常高),再通過運維部署到生產機上,以前的開發流程上對人和每個環節的要求都很高,特別是對測試,QA出版本與運維。因為很多測試和運維并不是研發人員,但安裝軟件都需要正版,還需要安裝各種插件,這對他們的要求變得很高,由于經常出現開發環境和生產環境的不同,而導致出現了莫名其妙的問題。開發人員在開發過程當中,不能直接上生產機(游戲行業是不允許開發人員上生產機改動數據的),所以查bug非常難,做到最后才發現很多bug是因為環境不一樣導致的。一個開發人員不能上機器,還需要猜測bug出現在哪,這其實很艱辛。所以描述現狀之后,需要考慮docker后帶來的好處。
架構改進
圖2
如圖2所示的架構,理念上的改進比實際的改進要更多一些,我從2002年開始關注docker和Go語言。因為對老游戲的架構非常了解,所以我在架構改進思路的基礎上,想通過docker和云化,讓運維和測試變得更方便、安全、簡單。一個是docker化,另一個是云化,即網絡部分能拿出來,放在云服務上,但真正能給游戲公司做云服務的門檻都會稍高一些。相對來說游戲公司的人才也不缺乏,所以他們自己能管理好自己的機器。
還有一個更重要的原因,當年的那一些服務器架構,不適合用云服務器來管理。如果運行一兩千人的游戲無所謂,但如果是同時在線幾萬人的大區模式,這對機器的要求就會很高。當時的架構,很難適應現在的云服務公司所能提供的這些流程。所以我們都是朝這個方向來做改進的。一個是docker化,一個是云化的游戲架構。
我們以前是一個游戲和網關,它們之間是綁定的。如果一區需要三個網關,這三個網關只能給一區服務。因為里面有很多分不開的邏輯,但這會導致一個很大的問題:如果想跑到云服務器上,它們之間的邏輯交互性太強,操作會比較難,利用率也不高。例如一組會配六個物理機,它的峰值能達四萬人,但是實際上峰值四萬人是開始的幾天,之后并沒有那么大的量。甚至每個游戲的峰值,可能因為活動的不一樣,一區是八點,二區是九點。其實,為了承受住峰值很多硬件是超配的。
我們認為首先能云化的是網關。新的改進思路,就是把跟網絡相關的部分全部拿出來,它和游戲本身無關,只是替用戶和游戲之間轉發數據而已,并不需要跟某一個區域綁定。區和區之間可以同時共享網關,玩家和服務器之間、客戶端程序和游戲服務器之間,都不再有網絡這一部分。這樣就有一個很大的優勢:對于開發人員的知識范疇降低了。因為做網絡游戲開發有很大一部分都是在處理網絡,網絡要高效。從流量安全等角度,這部分的復雜度是很高的。
從業務邏輯看,由于現在大部分都在用腳本做,所以門檻沒有網絡層高。把網關相關的提出來,在游戲開發的過程當中,對于個人的使用能力降低,對于程序員的門檻降低,安全性提高。網關相關工作可能需要最核心的人做,我認為這方面需要有一些保密的要求。更重要的是現在網絡相關的部分,已經可以獨立拿出來放在云服務公司。例如今天一區搞活動,可能有四萬人的峰值,我們用的六臺網關。明天二區搞活動,一區不搞活動,同樣用這個網關,這大幅度的提高了硬件的利用率,這個就是我們現在的改進思路。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%