分布式技術(shù):從原理到應(yīng)用全面解析分布式技術(shù)的魅力與未來(lái)之分布式衡量指標(biāo)
分布式技術(shù)發(fā)展歷程來(lái)看,分布式其實(shí)就是用廉價(jià)普通的機(jī)器解決單個(gè)計(jì)算機(jī)處理復(fù)雜、大規(guī)模數(shù)據(jù)和任務(wù)時(shí)存在的性能和資源瓶頸問(wèn)題。
如何來(lái)衡量一個(gè)分布式系統(tǒng)的優(yōu)劣程度呢?
一般分布式系統(tǒng)的表現(xiàn)好壞表現(xiàn)在以前幾個(gè)方面:
- 性能
- 資源
- 可用性
- 可擴(kuò)展性
性能
其實(shí)對(duì)于什么是性能,最常聽(tīng)說(shuō)的就是請(qǐng)求的響應(yīng)速度。其實(shí)這只是一方面,不同的系統(tǒng),對(duì)于系統(tǒng)的要求不一樣,有的關(guān)注吞吐量,有的關(guān)注相應(yīng)時(shí)間,有的關(guān)注完成時(shí)間,沒(méi)錯(cuò)這三個(gè)指標(biāo)就是最常見(jiàn)的性能指標(biāo)。
吞吐量
吞吐量指的是系統(tǒng)在一定時(shí)間內(nèi)可以處理的任務(wù)數(shù)。
這個(gè)指標(biāo)很直觀(guān)的反應(yīng)處一個(gè)系統(tǒng)的性能,就好像在顧客非常多的情況下,看一個(gè)收銀員可以一個(gè)小時(shí)能服務(wù)多少個(gè)顧客。
在互聯(lián)網(wǎng)中吞吐量常常表現(xiàn)為三個(gè)具體的指標(biāo):
- QPS
- TPS
- BPS
QPS,即查詢(xún)數(shù)每秒,用于衡量一個(gè)系統(tǒng)每秒處理的查詢(xún)數(shù)。這個(gè)指標(biāo)通常用于讀操作,越高說(shuō)明對(duì)讀操作的支持越好。所以,我們?cè)谠O(shè)計(jì)一個(gè)分布式系統(tǒng)的時(shí)候,如果應(yīng)用主要是讀操作,那么需要重點(diǎn)考慮如何提高QPS,來(lái)支持高頻的讀操作。
TPS,即事務(wù)數(shù)每秒,用于衡量一個(gè)系統(tǒng)每秒處理的事務(wù)數(shù)。這個(gè)指標(biāo)通常對(duì)應(yīng)于寫(xiě)操作,越高說(shuō)明對(duì)寫(xiě)操作的支持越好。我們?cè)谠O(shè)計(jì)一個(gè)分布式系統(tǒng)的時(shí)候,如果應(yīng)用主要是寫(xiě)操作,那么需要重點(diǎn)考慮如何提高TPS,來(lái)支持高頻寫(xiě)操作。
BPS,即比特?cái)?shù)每秒,用于衡量一個(gè)系統(tǒng)每秒處理的數(shù)據(jù)量。對(duì)于一些網(wǎng)絡(luò)系統(tǒng)、數(shù)據(jù)管理系統(tǒng),我們不能簡(jiǎn)單地按照請(qǐng)求數(shù)或事務(wù)數(shù)來(lái)衡量其性能。因?yàn)檎?qǐng)求與請(qǐng)求、事務(wù)與事務(wù)之間也存在著很大的差異,比方說(shuō),有的事務(wù)大需要寫(xiě)入更多的數(shù)據(jù)。那么在這種情況下,BPS更能客觀(guān)地反應(yīng)系統(tǒng)的吞吐量。
響應(yīng)時(shí)間
響應(yīng)時(shí)間指的是,系統(tǒng)響應(yīng)一個(gè)請(qǐng)求需要花費(fèi)的時(shí)間。響應(yīng)時(shí)間直接影響到用戶(hù)體驗(yàn),對(duì)于時(shí)延敏感的業(yè)務(wù)非常重要。比如用戶(hù)搜索導(dǎo)航,特別是用戶(hù)邊開(kāi)車(chē)邊搜索的時(shí)候,如果響應(yīng)時(shí)間很長(zhǎng),就會(huì)直接導(dǎo)致用戶(hù)走錯(cuò)路。
完成時(shí)間
指的是,系統(tǒng)真正完成一個(gè)請(qǐng)求或處理需要花費(fèi)的時(shí)間。任務(wù)并行(也叫作任務(wù)分布式)模式出現(xiàn)的其中一個(gè)目的,就是縮短整個(gè)任務(wù)的完成時(shí)間。特別是需要計(jì)算海量數(shù)據(jù)或處理大規(guī)模任務(wù)時(shí),用戶(hù)對(duì)完成時(shí)間的感受非常明顯。
資源占用
資源占用指的是,一個(gè)系統(tǒng)提供正常能力需要占用的硬件資源,比如CPU、內(nèi)存、硬盤(pán)等。
一個(gè)系統(tǒng)在沒(méi)有任何負(fù)載時(shí)的資源占用,叫做空載資源占用,體現(xiàn)了這個(gè)系統(tǒng)自身的資源占用情況。比如,你在手機(jī)上安裝一個(gè)App,安裝的時(shí)候通常會(huì)提示你有多少KB,這就是該App的空載硬盤(pán)資源占用。對(duì)于同樣的功能,空載資源占用越少,說(shuō)明系統(tǒng)設(shè)計(jì)越優(yōu)秀,越容易被用戶(hù)接受。
一個(gè)系統(tǒng)滿(mǎn)額負(fù)載時(shí)的資源占用,叫做滿(mǎn)載資源占用,體現(xiàn)了這個(gè)系統(tǒng)全力運(yùn)行時(shí)占用資源的情況,也體現(xiàn)了系統(tǒng)的處理能力。同樣的硬件配置上,運(yùn)行的業(yè)務(wù)越多,資源占用越少,說(shuō)明這個(gè)系統(tǒng)設(shè)計(jì)得越好。
可用性
可用性,通常指的是系統(tǒng)在面對(duì)各種異常時(shí)可以正確提供服務(wù)的能力。可用性是分布式系統(tǒng)的一項(xiàng)重要指標(biāo),衡量了系統(tǒng)的魯棒性,是系統(tǒng)容錯(cuò)能力的體現(xiàn)。系統(tǒng)的可用性可以用系統(tǒng)停止服務(wù)的時(shí)間與總的時(shí)間之比衡量。
假設(shè)一個(gè)網(wǎng)站總的運(yùn)行時(shí)間是24小時(shí),在24小時(shí)內(nèi),如果網(wǎng)站故障導(dǎo)致不可用的時(shí)間是4個(gè)小時(shí),那么系統(tǒng)的可用性就是4/24=0.167,也就是0.167的比例不可用,或者說(shuō)0.833的比例可用。
除此之外,系統(tǒng)的可用性還可以用某功能的失敗次數(shù)與總的請(qǐng)求次數(shù)之比來(lái)衡量,比如對(duì)網(wǎng)站請(qǐng)求1000次,其中有10次請(qǐng)求失敗,那么可用性就是99%。
你可能經(jīng)常在一個(gè)系統(tǒng)的宣傳語(yǔ)中見(jiàn)到或聽(tīng)到3個(gè)9(或3N,3 Nines)、5個(gè)9(或9N,9 Nines)。這些宣傳語(yǔ)中所說(shuō)的3個(gè)9、5個(gè)9,實(shí)際上就是系統(tǒng)廠(chǎng)商對(duì)可用性的一種標(biāo)榜,表明該系統(tǒng)可以在99.9%或99.999%的時(shí)間里能對(duì)外無(wú)故障地提供服務(wù)。
講到了可用性,你可能還會(huì)想到一個(gè)非常近似的術(shù)語(yǔ):可靠性(Reliability)。那可靠性和可用性有什么區(qū)別呢? 可靠性通常用來(lái)表示一個(gè)系統(tǒng)完全不出故障的概率,更多地用在硬件領(lǐng)域。而可用性則更多的是指在允許部分組件失效的情況下,一個(gè)系統(tǒng)對(duì)外仍能正常提供服務(wù)的概率。 杰夫 · 迪恩(Jeff Dean)曾在Google I/O大會(huì)上透露:谷歌一個(gè)基于1000臺(tái)通用計(jì)算機(jī)的集群,一年之內(nèi)就有1000+硬盤(pán)會(huì)出現(xiàn)故障。由于現(xiàn)在比較常見(jiàn)的分布式系統(tǒng)基本上都是基于通用計(jì)算機(jī)的,這就意味著在這些系統(tǒng)中無(wú)法實(shí)現(xiàn)真正的可靠,所以我們也會(huì)在一些場(chǎng)合見(jiàn)到可靠性和可用性交換使用的情況。
可擴(kuò)展性
可擴(kuò)展性,指的是分布式系統(tǒng)通過(guò)擴(kuò)展集群機(jī)器規(guī)模提高系統(tǒng)性能(吞吐、響應(yīng)時(shí)間、 完成時(shí)間)、存儲(chǔ)容量、計(jì)算能力的特性,是分布式系統(tǒng)的特有性質(zhì)。
分布式系統(tǒng)的設(shè)計(jì)初衷,就是利用集群多機(jī)的能力處理單機(jī)無(wú)法解決的問(wèn)題。然而,完成某一具體任務(wù)所需要的機(jī)器數(shù)目,即集群規(guī)模,取決于單個(gè)機(jī)器的性能和任務(wù)的要求。
當(dāng)任務(wù)的需求隨著具體業(yè)務(wù)不斷提高時(shí),除了升級(jí)系統(tǒng)的性能做垂直/縱向擴(kuò)展外,另一個(gè)做法就是通過(guò)增加機(jī)器的方式去水平/橫向擴(kuò)展系統(tǒng)規(guī)模。
這里垂直/縱向擴(kuò)展指的是,增加單機(jī)的硬件能力,比如CPU增強(qiáng)、內(nèi)存增大等;水平/橫向擴(kuò)展指的就是,增加計(jì)算機(jī)數(shù)量。好的分布式系統(tǒng)總在追求“線(xiàn)性擴(kuò)展性”,也就是說(shuō)系統(tǒng)的某一指標(biāo)可以隨著集群中的機(jī)器數(shù)量呈線(xiàn)性增長(zhǎng)。
衡量系統(tǒng)可擴(kuò)展性的常見(jiàn)指標(biāo)是加速比(Speedup),也就是一個(gè)系統(tǒng)進(jìn)行擴(kuò)展后相對(duì)擴(kuò)展前的性能提升。
一個(gè)分布式系統(tǒng)是否可以保證每個(gè)指標(biāo)都達(dá)到理性水平?
答案是否定的,無(wú)論是高可用,高性能,還是高擴(kuò)展性,都會(huì)受到資源占用的限制,說(shuō)白了就是受到成本的限制。
然而,雖然出于硬件成本、開(kāi)發(fā)效率等因素的約束,我們無(wú)法在性能、可用性、可靠性和資源占用做到面面俱到。所以在不同的業(yè)務(wù)場(chǎng)景中,設(shè)計(jì)者們需要有所取舍。
接下來(lái),我?guī)阋黄鹂匆幌碌湫偷碾娚?、IoT、電信、HPC(高性能計(jì)算)、大數(shù)據(jù)、云計(jì)算、區(qū)塊鏈等業(yè)務(wù)或系統(tǒng)對(duì)不同指標(biāo)的訴求。
- 電商系統(tǒng)。對(duì)于一個(gè)電商系統(tǒng)而言,系統(tǒng)設(shè)計(jì)者最看重的是吞吐量,為了處理更多的用戶(hù)訪(fǎng)問(wèn)或訂單業(yè)務(wù),甚至不惜犧牲一些硬件成本。
- IoT。對(duì)于一個(gè)IoT系統(tǒng)而言,設(shè)計(jì)者最看重的是資源占用指標(biāo),因?yàn)樵谝恍┕δ軜O簡(jiǎn)的IoT設(shè)備上RAM、ROM的可用資源通常都是KB級(jí)的。
- 電信業(yè)務(wù)。對(duì)于電信業(yè)務(wù)而言,最重要的無(wú)疑是響應(yīng)時(shí)間、完成時(shí)間,以及可用性。因?yàn)?,你在打電?huà)時(shí)不希望你的聲音半天才被對(duì)方聽(tīng)到,也不希望半天才聽(tīng)到對(duì)方的回應(yīng),更不希望你的電話(huà)無(wú)法撥出。
- HPC。HPC系統(tǒng)最顯著的特點(diǎn)是任務(wù)執(zhí)行時(shí)間極長(zhǎng),一個(gè)天體物理任務(wù)的分析和計(jì)算通常耗時(shí)數(shù)周甚至數(shù)月。因此,通過(guò)水平擴(kuò)展來(lái)提高系統(tǒng)的加速比,是HPC系統(tǒng)設(shè)計(jì)者需要關(guān)注的。
- 大數(shù)據(jù)。大數(shù)據(jù)任務(wù)的處理時(shí)間可能相對(duì)HPC系統(tǒng)來(lái)講比較短,但常見(jiàn)的完成時(shí)間也達(dá)到了小時(shí)級(jí),所以擴(kuò)展性也是大數(shù)據(jù)系統(tǒng)首先要考慮的。
- 云計(jì)算。對(duì)于一個(gè)云計(jì)算系統(tǒng)而言,常見(jiàn)任務(wù)是虛擬主機(jī)或容器的創(chuàng)建、資源調(diào)整、銷(xiāo)毀等操作,如何減少這些操作的完成時(shí)間,從而提升用戶(hù)體驗(yàn)是設(shè)計(jì)者們要重點(diǎn)關(guān)注的。另外,云計(jì)算系統(tǒng)本質(zhì)上賣(mài)的是資源,那么降低系統(tǒng)本身的資源開(kāi)銷(xiāo),也是系統(tǒng)設(shè)計(jì)的重中之重。
- 區(qū)塊鏈。區(qū)塊鏈的吞吐量比較低,比特幣的TPS只有7次每秒,單平均一次交易的確認(rèn)就需要10分鐘左右,因此吞吐量和完成時(shí)間通常是區(qū)塊鏈系統(tǒng)設(shè)計(jì)者的首要目標(biāo)。