通過對(duì)當(dāng)前Memcached的請(qǐng)求情況分析,可以有效的判斷是熱點(diǎn)數(shù)據(jù)的分別是否均衡。
另外一個(gè)需要注意的事項(xiàng)是Memcached的啟動(dòng)參數(shù),默認(rèn)情況下,它支持的并發(fā)連接數(shù)是1024,如下所示:
memcached -h
-c max simultaneous connections (default: 1024)
在上線前,務(wù)必要提高該值。在我們的實(shí)踐中,曾經(jīng)發(fā)生過因?yàn)榍岸朔?wù)器過于繁忙導(dǎo)致連接數(shù)用光的情況。Memcached當(dāng)前的連接數(shù)情況,使用如下命令獲?。?/p>
[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 23341
STAT curr_connections 2000 #當(dāng)前連接數(shù)
數(shù)據(jù)庫承載能力規(guī)劃
數(shù)據(jù)庫存儲(chǔ)了手游中的持久化數(shù)據(jù),提高數(shù)據(jù)庫的響應(yīng)效率對(duì)提高手游體驗(yàn)起到關(guān)鍵作用。進(jìn)行數(shù)據(jù)庫容量規(guī)劃時(shí),需要嚴(yán)格按照以下的規(guī)則進(jìn)行:
1、數(shù)據(jù)庫配置參數(shù)、表結(jié)構(gòu)和SQL語句評(píng)估。
進(jìn)行數(shù)據(jù)庫評(píng)估的目的是分析數(shù)據(jù)庫軟件配置參數(shù)與硬件能力是否匹配、分析表設(shè)計(jì)與SQL語句的效率關(guān)系。
以MySQL為例,在數(shù)據(jù)庫配置參數(shù)方面,主要考慮增加innodb_buffer_pool_size為系統(tǒng)可用內(nèi)存的60%。分析數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)時(shí),對(duì)主鍵、索引是否完整、有冗余、表引擎的一致性、字段類型的高效性進(jìn)行分析。SQL語句評(píng)估時(shí),考慮對(duì)多表聯(lián)合查詢、limit、復(fù)雜查詢語句進(jìn)行優(yōu)化。在無法直接進(jìn)行SQL語句優(yōu)化的條件下,可以考慮通過業(yè)務(wù)邏輯的調(diào)整來減小數(shù)據(jù)庫壓力(這一步可能涉及到游戲策劃、產(chǎn)品經(jīng)理的溝通,一般比較難)。
2、 數(shù)據(jù)庫分庫分表設(shè)計(jì)。 對(duì)于訪問頻繁的數(shù)據(jù)量巨大的表,如用戶注冊(cè)表,必須采用拆分的方法,使其分布在不同的數(shù)據(jù)庫服務(wù)器上。對(duì)于log庫,由于其對(duì)于游戲來說,是非核心數(shù)據(jù),也需要單獨(dú)拆分,以緩解核心數(shù)據(jù)庫的壓力。
3、 使用數(shù)據(jù)庫讀寫分離技術(shù)。 數(shù)據(jù)庫讀寫分離技術(shù),在數(shù)據(jù)庫分庫分表的基礎(chǔ)上,又進(jìn)行了一層壓力分解。在MySQL中,通過配置主從復(fù)制(Replication)可以獲得以下的好處:
在從庫上進(jìn)行讀取操作,可以進(jìn)一步減少主庫的讀壓力。
在專用的從庫上進(jìn)行數(shù)據(jù)備份時(shí),不影響在線業(yè)務(wù)。
在專用的從庫上進(jìn)行數(shù)據(jù)分析和挖掘時(shí),不影響在線業(yè)務(wù)。
4、 使用SSD提高隨機(jī)讀寫iops。 手游的大區(qū)制,使得數(shù)據(jù)庫的壓力被集中起來,同時(shí)不同等級(jí)的玩家所具有的不同的游戲行為也加劇了對(duì)數(shù)據(jù)庫的壓力。使用SSD可以最大限度的提高服務(wù)器的iops,以應(yīng)對(duì)這種讀寫壓力。
5、 存儲(chǔ)容量規(guī)劃。 在數(shù)據(jù)庫中,一般會(huì)記錄較長時(shí)間的玩家游戲日志,這一部分?jǐn)?shù)據(jù)隨著運(yùn)營時(shí)間的增加,對(duì)存儲(chǔ)容量要求越來越多。評(píng)估方法是根據(jù)內(nèi)測(cè)期間玩家數(shù)量和日志數(shù)據(jù)量計(jì)算出,每日每玩家大概產(chǎn)生的數(shù)據(jù)量。所需要的存儲(chǔ)容量為每日每玩家大概產(chǎn)生的數(shù)據(jù)量乘以保留天數(shù)再乘以每日預(yù)估玩家數(shù)量。
官網(wǎng)論壇訪問能力規(guī)劃
在手游運(yùn)維時(shí),除了考慮到手游系統(tǒng)之外,還應(yīng)該考慮官網(wǎng)、論壇等的訪問能力。
在游戲維護(hù)期間,玩家往往會(huì)轉(zhuǎn)向到官網(wǎng)和論壇,此時(shí)會(huì)產(chǎn)生大量的并發(fā)請(qǐng)求。官網(wǎng)和論壇基本都是基于Web的服務(wù),考慮容量規(guī)劃時(shí),可以參照本文Web服務(wù)器承載能力規(guī)劃的內(nèi)容。
人數(shù)曲線接入
人數(shù)曲線實(shí)時(shí)地反映了在線玩家的情況,也同時(shí)能夠反映游戲系統(tǒng)運(yùn)行狀態(tài)。
在設(shè)計(jì)人數(shù)曲線接入時(shí),我們使用了基于Web請(qǐng)求日志分析的方式。人數(shù)曲線的接入步驟如下:
在Web服務(wù)器上記錄玩家客戶端的Cookie字符串。
分析5分鐘內(nèi)的Cookie,去除重復(fù)值后的數(shù)量作為當(dāng)前在線人數(shù)。
統(tǒng)計(jì)數(shù)據(jù)寫入人數(shù)數(shù)據(jù)庫。
圖表展示。