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