磁盤 IO 真的比網(wǎng)絡(luò) IO 快嗎?
Google大神 Jeff Dean在之前的一次演講中展示了這樣一張表,非常有意思:

訪存與cache
訪問L2 cache的時延大概是訪問L1 cache的10幾倍左右,而訪問一次內(nèi)存的時延則高達(dá)訪問L2 cache的20倍,是訪問L1cache耗時的200倍。這一部分清楚的告訴每個程序員,編寫出對cache友好的程序是至關(guān)重要的,尤其你的場景如果對性能要求很高則更是如此。
分支預(yù)測
該功能主要針對 if 語句,由于現(xiàn)代CPU內(nèi)部采用流水線方式來處理機(jī)器指令,因此在 if 對應(yīng)的機(jī)器指令還沒有執(zhí)行完時后續(xù)指令就要進(jìn)到流水線中,此時CPU就必須猜測到底 if 語句是否為真,如果CPU猜對了,那么流水線照常運行,但如果猜錯了流水線中已經(jīng)被執(zhí)行的一部分指令就要作廢。
內(nèi)存、SSD與磁盤
程序員都知道訪問內(nèi)存的速度比SSD塊,訪問SSD速度比磁盤快,那么到底能快多少呢?同樣順序讀取1MB數(shù)據(jù),內(nèi)存花費的時間為250,000 ns,SSD為1,000,000 ns,磁盤為20,000,000 ns。我們可以看到,同樣讀取1MB數(shù)據(jù),磁盤花費的時間是 SSD 的 20 倍,是內(nèi)存的80倍。
網(wǎng)絡(luò)與磁盤
一般來說我們認(rèn)為內(nèi)存比磁盤快,磁盤比網(wǎng)絡(luò)快,但這這張表告訴我們用1Gbps網(wǎng)絡(luò)發(fā)送1K數(shù)據(jù)僅僅需要20,000 ns,而磁盤的一次尋道則高達(dá)10,000,000ns(10ms),網(wǎng)絡(luò)IO可不一定比磁盤IO慢。當(dāng)然,這也要看網(wǎng)絡(luò)兩端距離有多遠(yuǎn)。網(wǎng)絡(luò)
想測量數(shù)據(jù)包在網(wǎng)絡(luò)兩端來回一趟需要耗時多少?ping命令再簡單方便不過了。首先,博主在數(shù)據(jù)中心內(nèi)部ping一臺主機(jī)(注:ip地址用*來代替):

我的坐標(biāo)在北京,接下來我們ping一下清華大學(xué),哈哈,注意現(xiàn)在由于云服務(wù)商的存在,清華大學(xué)的官網(wǎng)服務(wù)器主機(jī)可不一定在清華大學(xué)里,為簡單起見我們認(rèn)為所ping的機(jī)器都在相應(yīng)的地理位置上。








總結(jié)
系統(tǒng)設(shè)計一種工程實踐,不是藝術(shù)遐想,每一個關(guān)鍵決策都要有依據(jù)而不能拍腦袋,本文的這張表就是你的依據(jù)(之一)。希望這篇文章對大家理解系統(tǒng)時間有所幫助。

【另類見解】那些要保證緩存和數(shù)據(jù)庫數(shù)據(jù)一致性的最后怎么了?

評論
圖片
表情
