手游客戶端更新容量規(guī)劃。評估方法是根據(jù)手游客戶端的更新內(nèi)容大小乘以預估的公測當日導入的手游玩家數(shù)量。手游客戶端更新通過接入外部CDN可以適當分擔流量壓力。
異常流量規(guī)劃。這個主要是指在手游運維中,受到大規(guī)模DDOS攻擊時的處理規(guī)劃。在進行這種容量規(guī)劃時,需要充分考慮到機房運營商接入的帶寬,采用分級規(guī)劃。在第一級小規(guī)模DDOS時(小于5G),啟用自有的流量清洗設備。在更大規(guī)模的DDOS時,啟用運營商級別的保護,以降級服務的方式,阻止來自某一方向的攻擊流量(該方向的正常訪問也會受到影響)。
Web服務器承載能力規(guī)劃
在規(guī)劃Web服務器承載能力前,需要分析目前的計算瓶頸。
以PHP FPM類型的Web應用程序為例,有以下的兩個參數(shù)務必需要設置:
slowlog /var/log/php-fpm-slow.log。用于指定PHP執(zhí)行時慢日志的記錄位置。PHP慢日志,用于定位PHP程序執(zhí)行慢的原因,是最重要的日志。
request_slowlog_timeout 1s。用于指定對于執(zhí)行時間超過1s的PHP腳本,記錄程序執(zhí)行調(diào)用情況(backtrace)到slowlog指定的位置。
在Java程序中,可以使用Log4j在關鍵調(diào)用處記錄相應的執(zhí)行時間,如對外部API請求、對數(shù)據(jù)庫調(diào)用、對緩存服務器調(diào)用、排名計算等等。通過這些數(shù)據(jù),我們能夠獲取到可能影響系統(tǒng)性能的關鍵信息,在有針對性的解決后,再進行相應的容量規(guī)劃。
Web服務器負責對手游業(yè)務邏輯的處理,對CPU要求較高。因有負載均衡設備調(diào)度,單臺服務器對可靠性要求不高。如果服務器宕機,由于調(diào)度系統(tǒng)的存在,系統(tǒng)會自動把請求切換到其他服務器上,給玩家造成的影響較小,這點就和端游不一樣(端游上玩家會掉線)。對單服務器要求較低,服務器選型上可有更多的選擇,比如說采用一些多節(jié)點服務器。在壓力測試時,我們首先在負載均衡器上設置流量只分配給一臺服務器,然后評估它的壓力情況。以此數(shù)據(jù)作為支撐,可以計算出總計需要的Web服務器數(shù)量為預計最大同時在線玩家數(shù)除以單臺承載能力。
Memcached承載能力規(guī)劃
Memcached服務器組為Web服務器組提供緩存服務,同時減輕了數(shù)據(jù)庫的查詢壓力。
Memcached是基于內(nèi)存的key-value型緩存,無磁盤IO讀寫,效率非常高。在對Memcached進行容量規(guī)劃時,我們需要關注的是熱點緩存數(shù)據(jù)的分布情況。
熱點緩存數(shù)據(jù),是指Web服務器程序請求次數(shù)最多、產(chǎn)生最大網(wǎng)絡流量的緩存數(shù)據(jù)。如果熱點數(shù)據(jù)比較分散,我們可以部署多臺Memcached同時使用客戶端對key哈希的方法(如一致性哈希算法)進行壓力分擔。盛大游戲遇到過一個極端情況是,熱點緩存數(shù)據(jù)集中在某個key上。此時,使用客戶端哈希是沒有效果的(因為一個key只能分布在一臺服務器上),達不到壓力分擔的效果。
如下圖所示,其中一臺在線Memcached的帶寬使用已達到瓶頸:

圖3 單臺Memached帶寬使用量
單一熱點數(shù)據(jù)產(chǎn)生大量帶寬需求的情況下,可以使用的方案是對緩存服務器進行網(wǎng)絡端口Bonding。關于使用Bonding方法提高帶寬吞吐量的方法,請參閱《Linux運維最佳實踐》一書“第3章 概述負載均衡和高可用技術”的內(nèi)容。
對Memcached熱點數(shù)據(jù)的分析,推薦使用memkeys工具( https://github.com/bmatheny/memkeys )。memkeys是tumblr開源的類似top的工具,可用于實時查看memcached的key使用情況。
memkeys的安裝命令如下:
wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz #下載autoconf
tar zxvf autoconf-latest.tar.gz
cd autoconf-2.69/
./configure
make
make install
yum -y install gcc-c++ pcre-devel libpcap-devel #安裝依賴庫
git clone https://github.com/tumblr/memkeys.git #下載memkeys源代碼
cd memkeys
export CXX=g++44
./autogen.sh
./configure
make
make install
memkeys的使用方法如下:
/usr/local/bin/memkeys -i eth0 -r 10 #-i指定網(wǎng)絡端口,-r指定輸出的刷新頻率
由此,我們可以按照單位時間內(nèi)請求次數(shù)、帶寬使用率來排序分析出熱點數(shù)據(jù)。如下圖所示,memkeys的輸出格式為:
