80后聊架構(gòu):架構(gòu)設(shè)計(jì)中兩個(gè)重要指標(biāo),延時(shí)與吞吐量(Latency vs Throughput) | 架構(gòu)師之路
《架構(gòu)師之路:架構(gòu)設(shè)計(jì)中的100個(gè)知識(shí)點(diǎn)》三:延時(shí)與吞吐量
有朋友問(wèn)我說(shuō),架構(gòu)優(yōu)化時(shí),什么時(shí)候要重點(diǎn)優(yōu)化延時(shí),什么時(shí)候要重點(diǎn)優(yōu)化吞吐量?
畫外音:補(bǔ)充閱讀材料在最后。
延時(shí)(Latency)與吞吐量(Throughput)是架構(gòu)設(shè)計(jì)中非常重要,又非常容易搞混的兩個(gè)指標(biāo)。
什么是延時(shí)?
延時(shí)是指完成某個(gè)動(dòng)作所需要的時(shí)間。
返回一個(gè)HTTP請(qǐng)求的時(shí)間是200毫秒,我們說(shuō)請(qǐng)求的延時(shí)是200毫秒。
生一個(gè)孩子的時(shí)間是10個(gè)月,我們說(shuō)生孩子延時(shí)是10個(gè)月。
什么是吞吐量?
吞吐量是指單位時(shí)間內(nèi)完成某個(gè)動(dòng)作的次數(shù)。
一個(gè)請(qǐng)求的處理時(shí)間是200毫秒,單線程每秒鐘可以處理5個(gè)請(qǐng)求,我們就說(shuō)其的吞吐量是每秒5次。
10個(gè)月能生一個(gè)孩子,我們就說(shuō)生孩子的吞吐量是每10月1個(gè)。
延時(shí)和吞吐量有什么關(guān)系?
一般來(lái)說(shuō),降低延時(shí)可以提升吞吐量。
例如:200毫秒處理一個(gè)請(qǐng)求,優(yōu)化為100毫秒處理一個(gè)請(qǐng)求,吞吐量就由5提升為10了。
但是,不降低延時(shí)也可以提升吞吐量。
例如:?jiǎn)尉€程200毫秒處理一個(gè)請(qǐng)求,線程數(shù)增加到10,吞吐量就由5提升為50了。
畫外音:假如CPU不是瓶頸。
有時(shí)候,延時(shí)是很難降低,此時(shí)不能靠降低延時(shí)增加吞吐量。
例如:生孩子的延時(shí)就必須是10個(gè)月。
此時(shí),提升吞吐量的方法只能多個(gè)家庭并發(fā)一起生。
回到開(kāi)篇的問(wèn)題,架構(gòu)優(yōu)化時(shí),什么時(shí)候要重點(diǎn)優(yōu)化延時(shí),什么時(shí)候要重點(diǎn)優(yōu)化吞吐量?
對(duì)于大規(guī)模系統(tǒng)的架構(gòu)設(shè)計(jì)而言:
- 延時(shí),延時(shí)更多是性能(performance)指標(biāo),關(guān)乎單用戶體驗(yàn)。
- 吞吐量,吞吐量是擴(kuò)展性(scalability)指標(biāo),關(guān)乎同時(shí)能服務(wù)多少客戶。
系統(tǒng)的性能,是有天花板的,延時(shí)不能無(wú)限優(yōu)化,不可能降到0。
系統(tǒng)的擴(kuò)展性,理論上是無(wú)限的,架構(gòu)合理的話,吞吐量可以無(wú)限提升,能同時(shí)為無(wú)限多的用戶同時(shí)服務(wù)。
一句話來(lái)回答這個(gè)問(wèn)題:
- 一個(gè)用戶慢,就去優(yōu)化延時(shí)。
- 多個(gè)用戶扛不住,就去優(yōu)化吞吐量。