講師簡(jiǎn)介:張正,騰訊互娛北極光工作室群專家工程師,擁有12年游戲后臺(tái)開發(fā)經(jīng)驗(yàn),主導(dǎo)和參與了《天涯明月刀》、《軒轅傳奇》等自研大型MMORPG項(xiàng)目的后臺(tái)開發(fā),現(xiàn)擔(dān)任《天涯明月刀》項(xiàng)目后臺(tái)技術(shù)總監(jiān),北極光后臺(tái)技術(shù)總監(jiān)。
下文為課程《游戲服務(wù)器概述》內(nèi)容節(jié)選
進(jìn)入小程序可查看系列課程完整內(nèi)容
↓↓↓
游戲程序猿專屬傳送門
什么是游戲服務(wù)器?
從字面上來看,游戲服務(wù)器其實(shí)是一個(gè)硬件的概念,常見游戲服務(wù)器類型有機(jī)架式服務(wù)器、刀片機(jī)、小型機(jī)等,不同的服務(wù)器在CPU、內(nèi)存、磁盤上有所側(cè)重,依據(jù)游戲需要運(yùn)行的程序而定。和一般的電腦不同,游戲服務(wù)器只需要CPU、內(nèi)存和主板,經(jīng)過標(biāo)準(zhǔn)化的封裝以后被統(tǒng)一放置在機(jī)架上。這種設(shè)計(jì)一方面可以節(jié)省存放空間,另一方面也易于管理。
我們一般選用的服務(wù)器機(jī)型都是內(nèi)部的定制型號(hào),比方說A服務(wù)器的CPU內(nèi)存很一般,但是它的磁盤很大,我們用它來做存儲(chǔ);比如說C服務(wù)器的CPU內(nèi)存也比較一般,磁盤也很小,但是它的主頻比較高,我們會(huì)用來做網(wǎng)絡(luò)接入。
在游戲服務(wù)器開發(fā)上,單機(jī)游戲一般分為圖形程序員和游戲邏輯程序員,其中圖形程序員負(fù)責(zé)圖形渲染,需要的技術(shù)比較深;而游戲邏輯的難度則更多地在于軟件工程上,并不是在游戲渲染技術(shù)這個(gè)方面;聯(lián)網(wǎng)游戲一般分為游戲程序員和網(wǎng)絡(luò)程序員,后者相對(duì)邊緣,主要存在于一些比較專業(yè)的游戲工作室中;在網(wǎng)絡(luò)游戲里面,分工則更加明確,像前臺(tái)開發(fā)涵蓋了圖形邏輯相關(guān)的內(nèi)容,后臺(tái)開發(fā)其實(shí)就是游戲服務(wù)器開發(fā)。
所以當(dāng)說起“游戲服務(wù)器”的時(shí)候它到底指什么?這三種都可能有:它可能指代硬件,可能是軟件,也可能是一些人。
游戲服務(wù)的特點(diǎn)及應(yīng)對(duì)
游戲服務(wù)需要解決的核心問題是滿足海量游戲用戶的要求——穩(wěn)定和高質(zhì)。穩(wěn)定是相對(duì)于不穩(wěn)定的情況而言的,用戶常說的卡頓即是典型的不穩(wěn)定。但實(shí)際上我們從技術(shù)實(shí)現(xiàn)的角度來看還可以細(xì)分為幾種不同的類型。從服務(wù)器軟件這個(gè)角度去看,一般會(huì)有計(jì)算的卡頓,比如存在一個(gè)死循環(huán)的BUG,或者是進(jìn)入一個(gè)大循環(huán)的BUG里面很長時(shí)間出不來,無法響應(yīng)用戶操作。再一個(gè)要求就是高質(zhì)量,也就是要求快速、邏輯嚴(yán)謹(jǐn)、更新頻率高且及時(shí)。
游戲服務(wù)跟其他互聯(lián)網(wǎng)服務(wù)有什么區(qū)別呢?
首先游戲?qū)ρ舆t是比較敏感的,當(dāng)然這不是指所有游戲。在一些實(shí)時(shí)交互的游戲里面,延遲超過三百毫秒是無法正常運(yùn)行的,像格斗類和射擊類游戲延遲一般都要求在一百毫秒以內(nèi)。
第二是實(shí)時(shí)的高烈度交互,單個(gè)終端發(fā)送請(qǐng)求的頻率是非常高的。我們玩一些對(duì)戰(zhàn)游戲的時(shí)候,一個(gè)手勢(shì)每秒鐘玩家可能會(huì)點(diǎn)擊多次,另外單次請(qǐng)求往往會(huì)引發(fā)多處數(shù)據(jù)改變,這在實(shí)時(shí)大范圍交互的場(chǎng)景下很容易出現(xiàn),比如城戰(zhàn)。
第三就是業(yè)務(wù)邏輯復(fù)雜,內(nèi)部耦合度高。復(fù)雜游戲服務(wù)的代碼可以達(dá)到百萬行的量級(jí),像《天涯明月刀》這個(gè)MMORPG,代碼到現(xiàn)在為止,應(yīng)該是一百五十萬行左右。
第四是變更的頻度高、幅度大。變更的幅度,這里面包含很多內(nèi)容,比如游戲資源,可能是一些配置表、圖標(biāo)、貼圖等等;有些時(shí)候還需要做邏輯的更新,比如說腳本,甚至是一個(gè)完整的patch。
怎么去應(yīng)對(duì)復(fù)雜度?最常見的方法就是分治,就是把大問題拆分為小問題,最終在一個(gè)合適的緯度上去解決。而對(duì)于內(nèi)部復(fù)雜度高的,就需要在軟件內(nèi)部設(shè)計(jì)上去下功夫了。
再一個(gè)方法就是灰度,灰度是相對(duì)于黑白而言的一個(gè)概念。我們認(rèn)為在各種各樣的事情里面,并不是非黑即白的,它們有很多中間狀態(tài)。對(duì)一個(gè)服務(wù)而言也是這樣子。當(dāng)我們不能百分之百提供一個(gè)服務(wù)的時(shí)候,我們不是直接把它關(guān)掉,我們可以給玩家提供部分的服務(wù),或者我們給部分玩家提供服務(wù),另外一部分玩家先等一下。
游戲服務(wù)器開發(fā)技術(shù)
以上是游戲服務(wù)器的開發(fā)技術(shù)的總圖,這里分了幾層:最核心的就是算法和數(shù)據(jù)結(jié)構(gòu),外面一些是操作系統(tǒng),再往外的是編程語言、工具鏈、存儲(chǔ)、網(wǎng)絡(luò)等一些專有的技術(shù),然后再往外其實(shí)還有一些軟件工程方面的東西。
服務(wù)器開發(fā)技術(shù)詳解、后臺(tái)開發(fā)案例介紹、講師推薦必讀書目......
完整課程內(nèi)容請(qǐng)通過下方小程序查看