分布式系統(tǒng)的技術(shù)棧

構(gòu)建分布式系統(tǒng)的目的是增加系統(tǒng)容量,提高系統(tǒng)的可用性,轉(zhuǎn)換成技術(shù)方面,也就是完成下面兩件事。

大流量處理。通過(guò)集群技術(shù)把大規(guī)模并發(fā)請(qǐng)求的負(fù)載分散到不同的機(jī)器上。
關(guān)鍵業(yè)務(wù)保護(hù)。提高后臺(tái)服務(wù)的可用性,把故障隔離起來(lái)阻止多米諾骨牌效應(yīng)(雪崩效應(yīng))。如果流量過(guò)大,需要對(duì)業(yè)務(wù)降級(jí),以保護(hù)關(guān)鍵業(yè)務(wù)流轉(zhuǎn)。

說(shuō)白了就是干兩件事。一是提高整體架構(gòu)的吞吐量,服務(wù)更多的并發(fā)和流量,二是為了提高系統(tǒng)的穩(wěn)定性,讓系統(tǒng)的可用性更高。

提高架構(gòu)的性能

咱們先來(lái)看看,提高系統(tǒng)性能的常用技術(shù)。


緩存系統(tǒng)。加入緩存系統(tǒng),可以有效地提高系統(tǒng)的訪問(wèn)能力。從前端的瀏覽器,到網(wǎng)絡(luò),再到后端的服務(wù),底層的數(shù)據(jù)庫(kù)、文件系統(tǒng)、硬盤(pán)和 CPU,全都有緩存,這是提高快速訪問(wèn)能力最有效的手段。對(duì)于分布式系統(tǒng)下的緩存系統(tǒng),需要的是一個(gè)緩存集群。這其中需要一個(gè) Proxy 來(lái)做緩存的分片和路由。

負(fù)載均衡系統(tǒng)。負(fù)載均衡系統(tǒng)是水平擴(kuò)展的關(guān)鍵技術(shù),它可以使用多臺(tái)機(jī)器來(lái)共同分擔(dān)一部分流量請(qǐng)求。

異步調(diào)用。異步系統(tǒng)主要通過(guò)消息隊(duì)列來(lái)對(duì)請(qǐng)求做排隊(duì)處理,這樣可以把前端的請(qǐng)求的峰值給“削平”了,而后端通過(guò)自己能夠處理的速度來(lái)處理請(qǐng)求。這樣可以增加系統(tǒng)的吞吐量,但是實(shí)時(shí)性就差很多了。同時(shí),還會(huì)引入消息丟失的問(wèn)題,所以要對(duì)消息做持久化,這會(huì)造成“有狀態(tài)”的結(jié)點(diǎn),從而增加了服務(wù)調(diào)度的難度。

數(shù)據(jù)分區(qū)和數(shù)據(jù)鏡像。數(shù)據(jù)分區(qū)是把數(shù)據(jù)按一定的方式分成多個(gè)區(qū)(比如通過(guò)地理位置),不同的數(shù)據(jù)區(qū)來(lái)分擔(dān)不同區(qū)的流量。這需要一個(gè)數(shù)據(jù)路由的中間件,會(huì)導(dǎo)致跨庫(kù)的 Join 和跨庫(kù)的事務(wù)非常復(fù)雜。而數(shù)據(jù)鏡像是把一個(gè)數(shù)據(jù)庫(kù)鏡像成多份一樣的數(shù)據(jù),這樣就不需要數(shù)據(jù)路由的中間件了。你可以在任意結(jié)點(diǎn)上進(jìn)行讀寫(xiě),內(nèi)部會(huì)自行同步數(shù)據(jù)。然而,數(shù)據(jù)鏡像中最大的問(wèn)題就是數(shù)據(jù)的一致性問(wèn)題。對(duì)于一般公司來(lái)說(shuō),在初期,會(huì)使用讀寫(xiě)分離的數(shù)據(jù)鏡像方式,而后期會(huì)采用分庫(kù)分表的方式。

提高架構(gòu)的穩(wěn)定性

接下來(lái),咱們?cè)賮?lái)看看提高系統(tǒng)系統(tǒng)穩(wěn)定性的一些常用技術(shù)。


服務(wù)拆分。服務(wù)拆分主要有兩個(gè)目的:一是為了隔離故障,二是為了重用服務(wù)模塊。但服務(wù)拆分完之后,會(huì)引入服務(wù)調(diào)用間的依賴(lài)問(wèn)題。

服務(wù)冗余。服務(wù)冗余是為了去除單點(diǎn)故障,并可以支持服務(wù)的彈性伸縮,以及故障遷移。然而,對(duì)于一些有狀態(tài)的服務(wù)來(lái)說(shuō),冗余這些有狀態(tài)的服務(wù)帶來(lái)了更高的復(fù)雜性。其中一個(gè)是彈性伸縮時(shí),需要考慮數(shù)據(jù)的復(fù)制或是重新分片,遷移的時(shí)候還要遷移數(shù)據(jù)到其它機(jī)器上。

限流降級(jí)。當(dāng)系統(tǒng)實(shí)在扛不住壓力時(shí),只能通過(guò)限流或者功能降級(jí)的方式來(lái)停掉一部分服務(wù),或是拒絕一部分用戶,以確保整個(gè)架構(gòu)不會(huì)掛掉。這些技術(shù)屬于保護(hù)措施。

高可用架構(gòu)。通常來(lái)說(shuō)高可用架構(gòu)是從冗余架構(gòu)的角度來(lái)保障可用性。比如,多租戶隔離,災(zāi)備多活,或是數(shù)據(jù)可以在其中復(fù)制保持一致性的集群??傊褪菫榱瞬怀鰡吸c(diǎn)故障。

高可用運(yùn)維。高可用運(yùn)維指的是 DevOps 中的 CI/CD(持續(xù)集成 / 持續(xù)部署)。一個(gè)良好的運(yùn)維應(yīng)該是一條很流暢的軟件發(fā)布管線,其中做了足夠的自動(dòng)化測(cè)試,還可以做相應(yīng)的灰度發(fā)布,以及對(duì)線上系統(tǒng)的自動(dòng)化控制。這樣,可以做到“計(jì)劃內(nèi)”或是“非計(jì)劃內(nèi)”的宕機(jī)事件的時(shí)長(zhǎng)最短。

分布式系統(tǒng)的關(guān)鍵技術(shù)

而通過(guò)上面的分析,我們可以看到,引入分布式系統(tǒng),會(huì)引入一堆技術(shù)問(wèn)題,需要從以下幾個(gè)方面來(lái)解決。

服務(wù)治理。服務(wù)拆分、服務(wù)調(diào)用、服務(wù)發(fā)現(xiàn)、服務(wù)依賴(lài)、服務(wù)的關(guān)鍵度定義……服務(wù)治理的最大意義是需要把服務(wù)間的依賴(lài)關(guān)系、服務(wù)調(diào)用鏈,以及關(guān)鍵的服務(wù)給梳理出來(lái),并對(duì)這些服務(wù)進(jìn)行性能和可用性方面的管理。

架構(gòu)軟件管理。服務(wù)之間有依賴(lài),而且有兼容性問(wèn)題,所以,整體服務(wù)所形成的架構(gòu)需要有架構(gòu)版本管理、整體架構(gòu)的生命周期管理,以及對(duì)服務(wù)的編排、聚合、事務(wù)處理等服務(wù)調(diào)度功能。

自動(dòng)化運(yùn)維。有了 DevOps 后,我們就可以對(duì)服務(wù)進(jìn)行自動(dòng)伸縮、故障遷移、配置管理、狀態(tài)管理等一系列的自動(dòng)化運(yùn)維技術(shù)了。

資源調(diào)度管理。應(yīng)用層的自動(dòng)化運(yùn)維需要基礎(chǔ)層的調(diào)度支持,也就是云計(jì)算 IaaS 層的計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等資源調(diào)度、隔離和管理。

整體架構(gòu)監(jiān)控。如果沒(méi)有一個(gè)好的監(jiān)控系統(tǒng),那么自動(dòng)化運(yùn)維和資源調(diào)度管理只可能成為一個(gè)泡影,因?yàn)楸O(jiān)控系統(tǒng)是你的眼睛。沒(méi)有眼睛,沒(méi)有數(shù)據(jù),就無(wú)法進(jìn)行高效的運(yùn)維。所以說(shuō),監(jiān)控是非常重要的部分。這里的監(jiān)控需要對(duì)三層系統(tǒng)(應(yīng)用層、中間件層、基礎(chǔ)層)進(jìn)行監(jiān)控。

流量控制。最后是我們的流量控制,負(fù)載均衡、服務(wù)路由、熔斷、降級(jí)、限流等和流量相關(guān)的調(diào)度都會(huì)在這里,包括灰度發(fā)布之類(lèi)的功能也在這里。

此時(shí),你會(huì)發(fā)現(xiàn),要做好這么多的技術(shù),或是要具備這么多的能力,簡(jiǎn)直就是一個(gè)門(mén)檻,是一個(gè)成本巨高無(wú)比的技術(shù)棧,看著就都頭暈。要實(shí)現(xiàn)出來(lái)得投入多少人力、物力和時(shí)間啊。是的,這就是分布式系統(tǒng)中最大的坑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容