游戏服务器概述
聲明:本文內(nèi)容源自騰訊游戲?qū)W院程序公開課。
一、什么是游戲服務(wù)器
1,從游戲玩家之間的交互形態(tài)出發(fā)
- 單機(jī)游戲:一個人在機(jī)器上玩。
- 聯(lián)網(wǎng)游戲:同時玩的范圍比較小,比如8-10個人。
- 網(wǎng)絡(luò)游戲:在遠(yuǎn)端有許多機(jī)器跑一個很大的系統(tǒng),可以有幾千幾萬幾十萬甚至更多的玩家連進(jìn)來一起玩。
2,游戲服務(wù)是互聯(lián)網(wǎng)服務(wù)的一種
- 常見的其他互聯(lián)網(wǎng)服務(wù)有:搜索(百度)、電商(阿里)、即時通訊(騰訊)、郵件、視頻等
3,游戲服務(wù)的基本職能有哪些?
- 網(wǎng)絡(luò)連接和數(shù)據(jù)收發(fā):TCP收包打包分包。
- 數(shù)據(jù)存取
- 邏輯計(jì)算
- 狀態(tài)保持:上下文、內(nèi)部驅(qū)動等等。
4,游戲服務(wù)器:嚴(yán)格說是一個硬件概念
- 常見種類:機(jī)架式服務(wù)器,刀片機(jī),小型機(jī)。
- 會根據(jù)游戲類型或運(yùn)行程序的不同,在CPU/內(nèi)存/硬盤上有所側(cè)重。
5,游戲服務(wù)器開發(fā)
- 從游戲交互形態(tài),看游戲開發(fā)分工
游戲后臺開發(fā)==游戲服務(wù)器開發(fā)
6,“游戲服務(wù)器”到底指什么?
- 承載游戲服務(wù)的硬件;
- 提供游戲服務(wù)的軟件;
- 開發(fā)游戲服務(wù)的程序員。
?
二、游戲服務(wù)的特點(diǎn)及應(yīng)對
1,游戲服務(wù)要解決的核心問題
滿足海量游戲用戶的穩(wěn)定和高質(zhì)量的服務(wù)需求
- 海量 - 十萬~百萬~千萬級同時在線,最高達(dá)億級注冊量;
- 穩(wěn)定 - 相對于:宕機(jī),網(wǎng)絡(luò)和計(jì)算卡頓;
- 高質(zhì)量 - 快速:網(wǎng)絡(luò)延遲;邏輯嚴(yán)謹(jǐn);更新頻率和及時性。
2,游戲服務(wù)與其他互聯(lián)網(wǎng)服務(wù)的區(qū)別?
延遲敏感
- 實(shí)時交互游戲一般需要網(wǎng)絡(luò)延遲在300ms以內(nèi)才能保證體驗(yàn)。
實(shí)時的高強(qiáng)度交互
- 單個終端高頻發(fā)送請求;
- 單次請求引發(fā)多處數(shù)據(jù)改變;
業(yè)務(wù)邏輯復(fù)雜,內(nèi)部耦合度高
- [延遲敏感+高強(qiáng)度交互]同時作用下,[狀態(tài)維護(hù)]往往成為必需;
- 復(fù)雜游戲服務(wù)的實(shí)現(xiàn)代碼,可達(dá)百萬行量級。
變更頻度高,幅度大
- 變更幅度,包含內(nèi)容和邏輯。
3,前后臺程序的區(qū)別
- 獨(dú)占,意味著什么?
- 大量并發(fā)任務(wù),意味著什么?
性能來自于
- 算法選擇與算法優(yōu)化:排序、查找、空間-時間。
- 操作系統(tǒng)/應(yīng)用程序運(yùn)行機(jī)制:IO多路復(fù)用;局部性原理;編程語言。
- 硬件:CPU的充分利用_多線程/多進(jìn)程;存儲層級的理解和利用;多隊(duì)列網(wǎng)卡。
持續(xù)運(yùn)行,意味著:穩(wěn)定最重要;容錯;日志和監(jiān)控。
(1)服務(wù)穩(wěn)定包含的因素
- 避免程序異常終止;
- 持續(xù)高效的運(yùn)算與通信。
(2)如何才能做到穩(wěn)定?
KISS==Keep It Simple&Stupid (一看就懂)
容錯方面
(1)錯誤不可避免(邏輯自身bug、程序運(yùn)行環(huán)境、外部影響)
(2)基本要求 - 錯誤范圍可控
- 一個用戶的錯誤不要傳染到其他用戶;
- 非核心功能的失效不要導(dǎo)致整個系統(tǒng)服務(wù)的失效。
(3)基本應(yīng)對 - 錯誤隔離和可快速恢復(fù)。
4,游戲后臺開發(fā)的方法論
(1)本質(zhì)上是應(yīng)對海量服務(wù)的問題。
(2)出發(fā)點(diǎn):兩種不同的困難
- 事情本身邏輯很簡單,但是并發(fā)規(guī)模非常大;
- 事情本身的邏輯復(fù)雜,要經(jīng)歷復(fù)雜的處理步驟。
(3)方法論 - 分治
大的問題分解成小問題,小問題繼續(xù)分解,最終在合適的力度下得到解決。
服務(wù)分布化
- 三層架構(gòu):接入-邏輯-存儲;
- 通用服務(wù):微服務(wù)。
內(nèi)部復(fù)雜度應(yīng)對:分層分塊。
(4)方法論 - 灰度
什么是灰度:拋棄0/1思維;在不同的場景下提供不能的服務(wù)。
在不同范疇維度的應(yīng)用:服務(wù)降級;灰度分布。
感悟:任何事情都不是非黑即白的,可以灰度發(fā)布,灰度服務(wù)(取中間值)。
5,游戲服務(wù)器的相關(guān)參與者
開發(fā)者:服務(wù)器程序員。
開發(fā)伙伴:客戶端程序員,游戲策劃。
構(gòu)建-測試:測試工程師。
部署維護(hù):運(yùn)維工程師。
?
三、游戲服務(wù)器開發(fā)技術(shù)介紹
1,算法
(1)了解常見查找/排序算法的特點(diǎn):利用算法來改善性能,勝于通過編譯器選項(xiàng)、編程技巧;
(2)根據(jù)業(yè)務(wù)情況合理的選擇算法
- 盡量選用復(fù)雜度<=O(NlogN)的算法;算法時間復(fù)雜度查詢
- 常見話題:C++ STL的使用。
2,系統(tǒng)層面
(1)對操作系統(tǒng)基礎(chǔ)知識的了解
- 處理器管理
- 進(jìn)程管理
- 線程調(diào)度
- 內(nèi)存管理
- IO管理
- 權(quán)限管理 ...etc
(2)對Linux操作系統(tǒng)的了解
- 內(nèi)核
- 用戶管理
- 文件系統(tǒng)
- 進(jìn)程、線程
- 進(jìn)程間通信
- 網(wǎng)絡(luò)
- 信號處理
- 權(quán)限等
3,開發(fā)工具
- 對編譯器gcc的了解
- 對調(diào)試器gdb的了解
- 對文檔工具ar的了解
- 對autotools的了解
- 對Makefile的了解
- 對性能分析工具的了解
- 對內(nèi)存泄露調(diào)試工具的了解
- 對samba文件共享的了解
- 對版本管理工具(cvs/svn/cc)的了解
4,語言
(1)選擇編程語言的幾個因素
- 業(yè)務(wù)復(fù)雜度
- 執(zhí)行效率VS開發(fā)效率
- 開發(fā)人員和團(tuán)隊(duì)能力
(2)C/C++技能要求
- 對C/C++的語法非常了解
- 對Ansi C庫函數(shù)非常了解
- 對指針有正確而且牢固的認(rèn)識
- 對STL庫非常了解
- 對C/C++語言的內(nèi)存分配機(jī)制非常了解
- 對第三方框架的了解(如ACE/ICE等)
5,腳本語言
(1)Shell腳本
- Linux下的程序開發(fā),學(xué)會使用shell腳本會大大的提高工作效率;
- 一些工作適合用shell來完成,開發(fā)效率更快;
- shell腳本常常被用來做一些集成的工作。
(2)程序內(nèi)嵌腳本語言
- 了解腳本(解釋性語言)的優(yōu)缺點(diǎn);
- 腳本在游戲開發(fā)中的適用范圍;
- Lua/Python/自定義腳本。
6,軟件設(shè)計(jì)技巧
(1)化繁為簡的重要途徑:區(qū)分“變化性”是其中的關(guān)鍵。
(2)設(shè)計(jì)原則 - SOLID
- 單一責(zé)任原則
- 開發(fā)-封閉原則
- 里氏替換原則
- 依賴倒置原則
- 接口分離原則
(3)設(shè)計(jì)模式:可以視為設(shè)計(jì)原則的應(yīng)用。
想清楚:用到這些方法、方式,它的原因是什么?
7,Linux下的常用工具
- 系統(tǒng)管理工具:ipcs/ps/top/...
- 文件系統(tǒng)工具:ls/find/where/which/locate...
- 文件處理工具:sed/grep/...
- 性能檢測工具:iostat/memstat...
- SSH工具:ssh/ssh2/sshd/ssh2d/scp/...
8,專項(xiàng)技術(shù)
(1)關(guān)系數(shù)據(jù)庫
- 對數(shù)據(jù)庫原理的了解
- 常見DBMS:mysql:了解mysql的安裝和簡單管理;性能調(diào)優(yōu)的房;賦值;備份和恢復(fù)。
- 對SQL語言的了解及使用
- 對數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)的了解
(2)NoSQL
- KV型的數(shù)據(jù)存儲方式
- CAP & BASE
- Redis/MongoDB
(3)文件
(4)網(wǎng)絡(luò)接入,協(xié)議
- 了解TCP/UDP協(xié)議
- 了解HTTP協(xié)議
- 底層網(wǎng)絡(luò)編程接口:BSD SOCKET
- 網(wǎng)絡(luò)多路處理機(jī)制:signal/select/poll/epoll/...
- C10K ~ C1000K
- Google Protobuf
?
四、參考資料
服務(wù)器_維基百科
游戲服務(wù)器與普通服務(wù)器有什么區(qū)別_知乎
Lua 為什么在游戲編程領(lǐng)域被廣泛運(yùn)用?_知乎
?
五、總結(jié)
在拿到offer的那一刻,我不知道游戲服務(wù)器端是做什么的。在部門大佬的指導(dǎo)和介紹下,我打開了本課程開始學(xué)習(xí)。課程總共有16節(jié),我爭取學(xué)習(xí)完一節(jié)課程后就整理,總結(jié),吸收好這節(jié)課的內(nèi)容,然后發(fā)布到博客上,希望我能堅(jiān)持到底!
如果有寫的不好或需要補(bǔ)充的地方請及時提出來,我看到后會及時更新的。^_^
?
轉(zhuǎn)載于:https://www.cnblogs.com/OctoptusLian/p/9367578.html
總結(jié)
- 上一篇: CF911F Tree Destruct
- 下一篇: git的团队协作开发