假設(shè)你是系統(tǒng)開(kāi)發(fā)人員,如何估算出你設(shè)計(jì)開(kāi)發(fā)的系統(tǒng)的性能?可能很多人都沒(méi)有事先估算過(guò)自己系統(tǒng)的性能,而是等到開(kāi)發(fā)完成后進(jìn)行性能壓力測(cè)試。但是如果在架構(gòu)設(shè)計(jì)上就有問(wèn)題,等到開(kāi)發(fā)完再去修改架構(gòu)代價(jià)就太大了。那么有沒(méi)有辦法在設(shè)計(jì)完系統(tǒng)架構(gòu)后就估算出這個(gè)架構(gòu)的性能呢?或者說(shuō)我們?cè)O(shè)計(jì)了幾套系統(tǒng)架構(gòu),如何判斷這幾個(gè)架構(gòu)的性能優(yōu)劣?
這個(gè)問(wèn)題的關(guān)鍵點(diǎn)是需要知道常見(jiàn)硬件的性能參數(shù)。

如何使用這個(gè)表呢?我們舉幾個(gè)例子。
例1 生成包含30個(gè)圖片的頁(yè)面
假設(shè)我們有個(gè)網(wǎng)站需要開(kāi)發(fā)一個(gè)頁(yè)面給用戶(hù)返回30個(gè)圖片,每個(gè)圖片256KB。我們根據(jù)不同的設(shè)計(jì)方案估算一下每種方案的性能數(shù)據(jù)。
設(shè)計(jì)方案一:順序從SATA磁盤(pán)讀取圖片
(磁盤(pán)尋道時(shí)間10ms + 磁盤(pán)讀取時(shí)間 256KB / (30MB/s)) * 30次 = 560 ms
設(shè)計(jì)方案二:并發(fā)從SATA磁盤(pán)陣列讀取圖片
磁盤(pán)尋道時(shí)間10ms + 磁盤(pán)讀取時(shí)間 256KB / (30MB/s) = 18 ms
設(shè)計(jì)方案三:順序從內(nèi)存讀取圖片
(內(nèi)存訪問(wèn)時(shí)間100ns + 內(nèi)存順序讀取時(shí)間 256 KB / (4GB/s)) * 30次 = 1.92 ms
可以看到,不同的方案,時(shí)間上的差別是巨大的,而這些數(shù)據(jù)是可以事先估算出來(lái)的。當(dāng)然,程序?qū)嶋H運(yùn)行時(shí),可能受磁盤(pán)緩存,CPU緩存的影響,實(shí)際時(shí)間可能跟估算出來(lái)的有差別,但數(shù)量級(jí)上應(yīng)該不會(huì)有大的出入。這樣可以幫助我們?cè)谠O(shè)計(jì)階段選擇出一個(gè)最優(yōu)的方案,減少以后優(yōu)化甚至推倒重來(lái)的時(shí)間。
例2 Basic Paxos時(shí)間消耗
假設(shè)我們有個(gè)分布式系統(tǒng)需要使用Paxos作為一致性協(xié)議,同城雙機(jī)房三副本部署,如何估算一致性協(xié)議模塊的性能?
Basic Paxos流程如下:

整個(gè)流程中,CPU,內(nèi)存,網(wǎng)卡的開(kāi)銷(xiāo)和同城網(wǎng)絡(luò)來(lái)回開(kāi)銷(xiāo),磁盤(pán)開(kāi)銷(xiāo)相比可以忽略不計(jì),所以主要考慮網(wǎng)絡(luò)來(lái)回和磁盤(pán)開(kāi)銷(xiāo)。Proposer發(fā)起提案到value被選擇,一共兩個(gè)網(wǎng)絡(luò)來(lái)回。每個(gè)網(wǎng)絡(luò)來(lái)回中,有一個(gè)副本是同機(jī)房,時(shí)間開(kāi)銷(xiāo)0.1 ms,另一個(gè)同城跨機(jī)房1 ms。網(wǎng)絡(luò)開(kāi)銷(xiāo)總共2 ms。Proposer和Acceptor至少各有一次磁盤(pán)寫(xiě)入操作,如果使用SATA磁盤(pán),每次寫(xiě)入數(shù)據(jù)量比較少,主要開(kāi)銷(xiāo)是尋道時(shí)間,兩次共20 ms,整個(gè)流程網(wǎng)絡(luò)開(kāi)銷(xiāo) 2 ms + 磁盤(pán)開(kāi)銷(xiāo) 20 ms = 22 ms。如果使用SSD磁盤(pán),每次0.1 ms,兩次0.2 ms,整個(gè)流程網(wǎng)絡(luò)開(kāi)銷(xiāo)2 ms + 磁盤(pán)開(kāi)銷(xiāo)0.2 ms = 2.2 ms。
從上面的分析可看出,整個(gè)流程的開(kāi)銷(xiāo)要么在網(wǎng)絡(luò)上,要么在磁盤(pán)上,所以Paxos所有的工程實(shí)現(xiàn)都是在想方設(shè)法減少這兩個(gè)操作的次數(shù)。
總之,熟悉硬件性能表,可以幫助我們選擇合適的設(shè)計(jì)方案,并且快速發(fā)現(xiàn)設(shè)計(jì)中的性能瓶頸。
參考:
大規(guī)模分布式存儲(chǔ)系統(tǒng):原理解析與架構(gòu)實(shí)戰(zhàn)