來(lái)源:北大青鳥(niǎo)總部 2023年04月20日 13:53
隨著互聯(lián)網(wǎng)的大量普及,越來(lái)越多的企業(yè)在不斷迭代產(chǎn)品的同時(shí),也在進(jìn)行技術(shù)架構(gòu)升級(jí),將早期的單體式架構(gòu)升級(jí)成分布式架構(gòu)。升級(jí)改造的成本是非常之大的,那么為什么各大企業(yè)仍趨之若鶩的要做架構(gòu)改造呢?
主要原因有三點(diǎn):
1)單體式系統(tǒng)帶來(lái)的成本太高了,互聯(lián)網(wǎng)涌入網(wǎng)民的增多導(dǎo)致需要更好的計(jì)算能力、網(wǎng)絡(luò)能力、存儲(chǔ)能力,而只是通過(guò)擴(kuò)展小型機(jī)、大型機(jī)來(lái)提高單機(jī)性能,太貴了,一般的企業(yè)承受不起。
2)數(shù)據(jù)為王的時(shí)代需要更多的數(shù)據(jù)進(jìn)行分析,企業(yè)們需要更經(jīng)濟(jì)實(shí)惠的方式來(lái)存儲(chǔ)數(shù)據(jù)、分析數(shù)據(jù),分布式系統(tǒng)多節(jié)點(diǎn)顯然是更好的選擇;
3)在用戶(hù)為王的互聯(lián)網(wǎng)時(shí)代,互聯(lián)網(wǎng)產(chǎn)品均要求7*24小時(shí)能提供服務(wù),保障系統(tǒng)的高可用,通過(guò)增加機(jī)器來(lái)做好容災(zāi)準(zhǔn)備的方式也演變成了分布式系統(tǒng)的方式。
綜上所述,我們需要分布式系統(tǒng)。分布式系統(tǒng)的定義是由一組通過(guò)網(wǎng)絡(luò)進(jìn)行通信、為完成共同的任務(wù)而協(xié)調(diào)工作的計(jì)算機(jī)節(jié)點(diǎn)組成的系統(tǒng),簡(jiǎn)單來(lái)說(shuō),就是通過(guò)網(wǎng)絡(luò)把很多鏈接的計(jì)算機(jī)連接起來(lái),協(xié)同工作,打造一個(gè)高性能、高可用的系統(tǒng),對(duì)外提供服務(wù)。
分布式系統(tǒng)的學(xué)習(xí)包括兩個(gè)模塊--分布式計(jì)算&分布式存儲(chǔ)。在分布式計(jì)算中,我們需要學(xué)習(xí)的知識(shí)點(diǎn)有四個(gè):
1)服務(wù)如何找到另一個(gè)服務(wù)?
2)如何判斷服務(wù)的請(qǐng)求發(fā)給哪一個(gè)實(shí)例?
3)如何避免系統(tǒng)的雪崩?
4)如何進(jìn)行監(jiān)控告警?。
在分布式存儲(chǔ)中,我們需要學(xué)習(xí)的知識(shí)點(diǎn)也有四個(gè):
1)如何判斷數(shù)據(jù)存儲(chǔ)規(guī)則?
2)如何數(shù)據(jù)分片?
3)如何復(fù)制數(shù)據(jù)?
4)如何做分布式事務(wù)?
分布式系統(tǒng)的分布式計(jì)算中,第一個(gè)問(wèn)題是服務(wù)如何找到另一個(gè)服務(wù)呢?這塊主要是結(jié)合微服務(wù)的思想在進(jìn)行落地。通過(guò)將服務(wù)劃分為生產(chǎn)者producer(提供響應(yīng)的服務(wù))、消費(fèi)者consumer(發(fā)起請(qǐng)求的服務(wù)),再通過(guò)服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn),生產(chǎn)者節(jié)點(diǎn)將自己所能提供的服務(wù)、自己的IP地址端口等給到注冊(cè)中心,消費(fèi)者節(jié)點(diǎn)到注冊(cè)中心根據(jù)自己的訴求獲取需要的服務(wù)。
第二個(gè)問(wèn)題是在服務(wù)找到之后,消費(fèi)者節(jié)點(diǎn)應(yīng)該將用戶(hù)的請(qǐng)求發(fā)往部署著生產(chǎn)者節(jié)點(diǎn)的哪一個(gè)服務(wù)呢?如果是有狀態(tài)的服務(wù)(即同一個(gè)服務(wù)下不同機(jī)器的數(shù)據(jù)不一樣),通過(guò)路由來(lái)確認(rèn)當(dāng)前要訪問(wèn)的請(qǐng)求數(shù)據(jù)是在哪一個(gè)實(shí)例上,再進(jìn)行請(qǐng)求的分發(fā)即可;如果是無(wú)狀態(tài)的服務(wù)(即同一個(gè)服務(wù)不同機(jī)器的數(shù)據(jù)一樣),通過(guò)hash、權(quán)重分配、輪詢(xún)等規(guī)則將請(qǐng)求進(jìn)行分發(fā)即可。
第三個(gè)問(wèn)題是如何避免服務(wù)的雪崩(即部署某個(gè)服務(wù)的某臺(tái)機(jī)器出了問(wèn)題,大量的請(qǐng)求發(fā)過(guò)來(lái),導(dǎo)致其他的機(jī)器承受不住,最后該服務(wù)的所有機(jī)器都掛了)?在分布式系統(tǒng)內(nèi)有兩個(gè)辦法,1、快速減少系統(tǒng)負(fù)載來(lái)避免雪崩的方式,即熔斷服務(wù)、降級(jí)服務(wù)、限流服務(wù);2、通過(guò)快速增加機(jī)器節(jié)點(diǎn),承受更多的服務(wù)請(qǐng)求,即彈性擴(kuò)容。
最后一個(gè)問(wèn)題是如何對(duì)分布式系統(tǒng)進(jìn)行監(jiān)控告警?在分布式系統(tǒng)內(nèi)部,由于服務(wù)眾多、機(jī)器眾多,如果不了解系統(tǒng)整體的情況、服務(wù)與服務(wù)之間如何關(guān)聯(lián),當(dāng)出現(xiàn)問(wèn)題時(shí)排查問(wèn)題就會(huì)變得非常艱難。通過(guò)在部署服務(wù)的每臺(tái)機(jī)器上安裝探針,采集數(shù)據(jù),進(jìn)行分布式的trace追蹤,再結(jié)合一定的告警機(jī)器,可保障服務(wù)的高可用,在出現(xiàn)問(wèn)題時(shí)快速排查、解決問(wèn)題。
分布式系統(tǒng)的分布式存儲(chǔ)中,第一個(gè)問(wèn)題是用什么樣的規(guī)則決定如何存儲(chǔ)數(shù)據(jù)?業(yè)內(nèi)流行的有三個(gè)理論,即ACID(即atomicity原子性、consistency一致性、isolation隔離性、durability持久性)、BASE(即BasicallyAvailable基本可用、SoftState軟狀態(tài)、EventuallyConsistent最終一致性)、CAP(即Consistency一致性、Availability可用性、Partition分區(qū)容錯(cuò)性)。這取決于不同的業(yè)務(wù)場(chǎng)景,在交易場(chǎng)景中,大部分企業(yè)會(huì)采取ACID原則,即交易操作不能接受任何錯(cuò)誤,每個(gè)操作的步驟必須是原子的、操作與操作的數(shù)據(jù)是隔離的、操作完成后的數(shù)據(jù)是持久化的;在大部分場(chǎng)景中,企業(yè)一般采用BASE原則,即每個(gè)業(yè)務(wù)系統(tǒng)最開(kāi)始的時(shí)候由于大業(yè)務(wù)量等情況,數(shù)據(jù)不要求強(qiáng)一致性,但可以通過(guò)采取一定的方式使得數(shù)據(jù)最后是一致的。
第二個(gè)問(wèn)題是如何做數(shù)據(jù)分片?我們知道互聯(lián)網(wǎng)系統(tǒng)會(huì)產(chǎn)生大量的數(shù)據(jù),而單機(jī)是不可能存儲(chǔ)所有的數(shù)據(jù),因此需要解決數(shù)據(jù)如何存儲(chǔ)在不同的機(jī)器上。在分布式系統(tǒng)中常用的規(guī)則就是Hash、一致性hash、按范圍分片規(guī)則來(lái)將數(shù)據(jù)存儲(chǔ)在不同的機(jī)器上。
第三個(gè)問(wèn)題是如何做數(shù)據(jù)復(fù)制?為了保障服務(wù)的高可用,除了機(jī)器的冷備準(zhǔn)備之外,還需要對(duì)數(shù)據(jù)做處理,保障業(yè)務(wù)請(qǐng)求訪問(wèn)到任何一個(gè)節(jié)點(diǎn)的數(shù)據(jù)都是一致的、準(zhǔn)確的。常用的解決方案有主從復(fù)制、一致性協(xié)議Raft等。
第四個(gè)問(wèn)題是如何做分布式事務(wù)?在單機(jī)系統(tǒng)中,通過(guò)時(shí)間戳加序號(hào)的方式就可以實(shí)現(xiàn)事務(wù)功能,然而在分布式系統(tǒng)中,因?yàn)橄到y(tǒng)拆分成了微服務(wù)、微服務(wù)又分為多個(gè)節(jié)點(diǎn)進(jìn)行部署,系統(tǒng)中的時(shí)間不能完全同步,這個(gè)時(shí)候可以采用整體系統(tǒng)選一臺(tái)機(jī)器按單機(jī)的模式生產(chǎn)事務(wù)ID,同城多中心和異地多中心去該臺(tái)機(jī)器獲取事務(wù)ID,實(shí)現(xiàn)分布式事務(wù)一致性。
至此,分布式系統(tǒng)的學(xué)習(xí)就要告一段落了,我們?cè)賮?lái)回顧下本文從為什么需要分布式系統(tǒng)開(kāi)始,介紹了當(dāng)下互聯(lián)網(wǎng)時(shí)代存在的問(wèn)題、分布式系統(tǒng)的定義、分布式系統(tǒng)計(jì)算核心知識(shí)點(diǎn)、分布式系統(tǒng)存儲(chǔ)知識(shí)點(diǎn)。目前頭部互聯(lián)網(wǎng)公司如阿里頭條騰訊百度美團(tuán)等之外、金融行業(yè)如銀行保險(xiǎn)等、傳統(tǒng)行業(yè)如醫(yī)療教育健康等等,各行各業(yè)都開(kāi)始進(jìn)行技術(shù)架構(gòu)重構(gòu),轉(zhuǎn)單體式應(yīng)用為分布式,因此掌握了分布式系統(tǒng)之后,在秋招、金九銀十跳槽季中,一定會(huì)有助力去到心儀的公司噢~