it分布式系統學習
由于IT的廣泛應用,越來越多的企業在不斷地對其產品迭代的同時,也在對其技術結構進行升級,將早期的單一結構升級為分布式結構。更新改造的成本是很大的,那么為什么各大企業仍然趨之若鶩地在做架構改造?
有三個主要原因:
單片機系統帶來的成本過高,因特網用戶的大量涌入,導致需要更好的計算能力、網絡能力、存儲器能力,而僅僅通過擴充小型機、大型機來提高單片機的性能,成本過高,一般企業難以承受。
2)數據為王的時代要求更多的數據分析,企業需要更經濟的方式來存儲數據、分析數據,顯然,分布式系統多節點是更好的選擇;
3)在用戶為王的因特網時代,因特網產品都需要7*24小時的服務,以保證系統的高可用性,通過增加設備,做好容災準備的方法也可以發展成為一種分布式系統。
如前所述,我們需要分布式系統。分布系統的定義是由一組計算機節點組成的系統,它們通過網絡進行通信,協同工作,完成共同的任務,簡單地說,就是通過網絡將多臺連結的計算機連結起來,協同工作,形成一個高效、高效的外部服務系統。
分布系統的學習由分布計算與分布存儲兩大模塊組成。對于分布式計算,需要了解四個知識點:
1)服務如何定位其他服務?
如何判斷將服務請求發送給哪個實例?
3)如何避免系統性雪崩?
四、如何進行監控報警工作?
我們還需要學習的分布式存儲的四個知識點:
如何判定資料儲存的規則?
如何對數據進行分片?
三、數據如何被復制?
4)分布式事務如何實現?
在分布式計算的分布式系統中,第一個問題就是如何找到其他服務?這一塊主要是結合微服務的理念在落地。把服務分成(提供響應的服務)和消費者consumer(發起請求的服務),然后通過服務注冊,服務發現,生產者節點將其能夠提供的服務、其IP地址端口等發送到注冊中心,消費者節點則從注冊中心獲得所需的服務,以滿足其要求。
其次,在服務發現之后,用戶節點應該將用戶請求發送給部署了生產者節點的哪個服務呢?若服務處于有狀態(即同一服務下不同機器的數據不同),則通過路由確認當前正在訪問的請求數據位于哪個實例,然后再進行請求的分發;如果服務處于無狀態(即同一服務不同機器的數據相同),則可以通過hash、加權分配、輪詢等規則來分發請求。
還有一個問題是如何避免服務出現雪崩(例如,某一臺部署服務的機器出現了故障,發出了大量請求,導致其他機器無法運行,最終該服務的所有機器都掛了)?分布系統中有兩種方法:1)快速降低系統負荷,以避免雪崩的方式,即服務熔斷,服務降級,限制流量;2)快速增加機器節點,承受更多服務請求,即彈性擴展。
如何對分布式系統進行監控告警是最后一個問題?對于分布式系統來說,當發生問題時,由于服務數量多、機器多,如果不了解系統的總體情況、服務和服務之間的關系,那么查找問題的過程是非常困難的。將探針安裝到部署服務的每一臺機器上,收集數據,進行分布式的trace跟蹤,再與特定的報警機器相結合,就能保證服務的高可用性,在出現問題時能迅速地進行查找、解決。
在分布式存儲系統中,首先要解決的問題是,如何根據規則來存儲數據?有三種理論在業界很受歡迎:ACID(即atomicity原子性、consistency一致性、isolation隔離性、durability持續性)、BASE(即BasicallyAvailable基本可用、SoftState軟狀態、EventuallyConsistent最終一致性)、CAP(即Consistency一致性、Availability可用性、Partition分區容錯性)。根據業務場景的不同,在交易場景中,大多數企業會遵循ACID原則,即交易操作不能接受任何錯誤,每一操作的步驟都必須是原子的、操作與操作之間的數據是隔離的、操作完成后的數據是持久的;在大多數情況下,企業通常采用BASE原則,即每一業務系統在開始時由于大量業務量等原因,數據并不需要很強的一致性,但是可以以某種方式使數據保持一致。
其次,如何進行數據分片處理?因特網系統會產生大量的數據,單機是不可能全部存儲數據的,所以就有必要研究如何將數據存儲在不同的機器上。分布系統中使用最多的規則是Hash規則、一致性hash規則、分片規則,這些規則用于在不同的機器上存儲數據。
三是如何進行數據復制操作?為保證服務的高可用性,除機器冷備準備外,還需要對數據進行處理,以保證業務請求訪問任意節點的數據的一致性和準確性。常見的解決方案有主從復制,一致性協議,等等。
四是如何處理分布式事務的問題?而在分布式系統中,由于系統被分解為微服務,微服務又被分成多個部署節點,系統中的時間無法完全同步,此時可采用整體系統選擇一臺機器,按單機的模式來生產事務ID,而多中心同城多中心和異地多中心則可實現事務ID,從而達到分布式事務一致性。