筆記
軟件系統(tǒng)中高性能帶來的復(fù)雜度主要體現(xiàn)在兩方面,一方面是單臺計(jì)算機(jī)內(nèi)部為了高性能帶來的復(fù)雜度惑惶;另一方面是多臺計(jì)算機(jī)集群為了高性能帶來的復(fù)雜度谅辣。
操作系統(tǒng)發(fā)展到現(xiàn)在,如果我們要完成一個(gè)高性能的軟件系統(tǒng)询件,需要考慮如多進(jìn)程、多線程唆樊、進(jìn)程間通信宛琅、多線程并發(fā)等技術(shù)點(diǎn),而且這些技術(shù)并不是最新的就是最好的逗旁,也不是非此即彼的選擇嘿辟。
目前這樣的解決方案有 3 種:SMP(Symmetric Multi-Processor,對稱多處理器結(jié)構(gòu))片效、NUMA(Non-Uniform Memory Access红伦,非一致存儲(chǔ)訪問結(jié)構(gòu))、MPP(Massive Parallel Processing淀衣,海量并行處理結(jié)構(gòu))昙读。其中 SMP 是我們最常見的,目前流行的多核處理器就是 SMP 方案膨桥。
雖然計(jì)算機(jī)硬件的性能快速發(fā)展蛮浑,但和業(yè)務(wù)的發(fā)展速度相比,還是小巫見大巫了只嚣,尤其是進(jìn)入互聯(lián)網(wǎng)時(shí)代后沮稚,業(yè)務(wù)的發(fā)展速度遠(yuǎn)遠(yuǎn)超過了硬件的發(fā)展速度。
-
通過大量機(jī)器來提升性能册舞,并不僅僅是增加機(jī)器這么簡單壮虫。讓多臺機(jī)器配合起來達(dá)到高性能的目的,是一個(gè)復(fù)雜的任務(wù)环础。常見的幾種方式:
- 任務(wù)分配。任務(wù)分配的意思是指每臺機(jī)器都可以處理完整的業(yè)務(wù)任務(wù)剩拢,不同的任務(wù)分配到不同的機(jī)器上執(zhí)行线得。
- 任務(wù)分解。把原來大一統(tǒng)但復(fù)雜的業(yè)務(wù)系統(tǒng)徐伐,拆分成小而簡單但需要多個(gè)系統(tǒng)配合的業(yè)務(wù)系統(tǒng)
任務(wù)分配的意思是指每臺機(jī)器都可以處理完整的業(yè)務(wù)任務(wù)贯钩,不同的任務(wù)分配到不同的機(jī)器上執(zhí)行。
-
任務(wù)分解提升性能的原因:
- 簡單的系統(tǒng)更加容易做到高性能。
- 可以針對單個(gè)任務(wù)進(jìn)行擴(kuò)展角雷。
如果系統(tǒng)拆分得太細(xì)祸穷,為了完成某個(gè)業(yè)務(wù),系統(tǒng)間的調(diào)用次數(shù)會(huì)呈指數(shù)級別上升勺三,而系統(tǒng)間的調(diào)用通道目前都是通過網(wǎng)絡(luò)傳輸?shù)姆绞嚼坠觯阅苓h(yuǎn)比系統(tǒng)內(nèi)的函數(shù)調(diào)用要低得多。
最終決定業(yè)務(wù)處理性能的還是業(yè)務(wù)邏輯本身吗坚,業(yè)務(wù)邏輯本身沒有發(fā)生大的變化下祈远,理論上的性能是有一個(gè)上限的,系統(tǒng)拆分能夠讓性能逼近這個(gè)極限商源,但無法突破這個(gè)極限车份。
理解與思考
計(jì)算機(jī)硬件的發(fā)展會(huì)給軟件系統(tǒng)帶來一定的性能提升。但這種提升作用有限牡彻,無法支撐人們對軟件系統(tǒng)的總體的性能訴求扫沼。硬件性能的提升效用會(huì)很快被軟件系統(tǒng)的新需求所帶來的復(fù)雜性所吞沒。
集群帶來的是系統(tǒng)在處理能力和容量上的性能提升庄吼。在單個(gè)請求的響應(yīng)時(shí)間上缎除,集群不一定會(huì)帶來更高的性能,畢竟集群內(nèi)有網(wǎng)絡(luò)傳播損耗霸褒,而單機(jī)內(nèi)是內(nèi)存通信伴找。
集群在業(yè)務(wù)處理上的兩種方式,任務(wù)分配和任務(wù)分解废菱,其實(shí)也對應(yīng)著兩種擴(kuò)展方式技矮,水平擴(kuò)展和垂直擴(kuò)展。
因?yàn)樾阅艿脑蚴庵幔覀儾坏貌蝗フ{(diào)整架構(gòu)設(shè)計(jì)衰倦,這種調(diào)整本身會(huì)帶來復(fù)雜性。我不覺得李老師說的“降低復(fù)雜性”能夠回答架構(gòu)設(shè)計(jì)的目的旁理。大部分時(shí)候樊零,我們的設(shè)計(jì)是帶來了復(fù)雜性。但如果不做架構(gòu)設(shè)計(jì)孽文,我們開發(fā)出來的系統(tǒng)又不能滿足業(yè)務(wù)的要求驻襟。是不是這樣來回答為什么做設(shè)計(jì)更好:“在有限的資源條件下設(shè)計(jì)我們的架構(gòu),以滿足業(yè)務(wù)在功能芋哭、性能沉衣、高可用、可擴(kuò)展性减牺、安全及成本等方面的要求豌习〈婊眩”
任務(wù)分解的方式,是一種細(xì)化對資源管理和分配的手法肥隆。
做任何事情都有代價(jià)既荚。境界的高低在于怎樣準(zhǔn)確的權(quán)衡得失和正確的做取舍。
做優(yōu)化的時(shí)候栋艳,先看有沒有做錯(cuò)事情恰聘,多做事情,或者做無用的事情嘱巾,再來看做事的效率憨琳。如果在不需要的事情上用力做優(yōu)化,只會(huì)無功而返旬昭,徒耗精力篙螟。
思考題
所在的業(yè)務(wù)體系中,高性能的系統(tǒng)采用的是哪種方式问拘?目前是否有改進(jìn)和提升的空間遍略?
我們使用了spark平臺來處理數(shù)據(jù)。