天天看點

分布式系統必須要知道的CAP和BASE理論

前言:

沒有完美的架構,隻有滿足了業務需求的架構才是好架構。

什麼是分布式系統?

 分布式系統是相對于單台應用來說的,建站初期考慮到資金,使用者,技術等各方面原因,搭建了一套簡單的系統,所有的服務都部署到一台機器,包含負載均衡,反向代理,應用伺服器,資料庫等,後期由于系統的複雜性的提升和使用者的增加,需要采用叢集和拆分服務的方式,并且各個服務分别部署到不同的機器上,這裡所說的分布式系統應該包含兩種:

1 大系統下不同的服務的分布式部署  2 同一個服務的叢集部署  

分布式帶來的問題? 

1  分布式架構的選擇 

   如何讓部署到不同伺服器之間的服務通信,需要選擇一個合适的分布式架構,目前主流的dubbo,spring cloud以及各個大廠自研的架構都能很好的滿足分布式的日常開發需求,當然對于架構的選擇,需要結合業務,以及通信的協定,具體是七層協定HTTP還是四層的rpc,tcp,socket需要綜合衡量。

2 分布式鎖

   傳統的鎖以及jvm層面的鎖,在單jvm執行個體下能夠很好的工作,但是在分布式環境下,就需要借助于中間庫來實作,常用的分布式鎖中間價有:redis ,zookeeper ,memcache ,mysql等

3 分布式事務

   傳統的事務單機的,當涉及到多個服務或者多伺服器的時候,需要考慮使用2PC,3PC , 基于MQ的事務控制,TCC等,根據業務類型進行選擇,是強一緻性還是最終一緻性。

4 分布式id算法

 單業務的id算法,對于效率要求沒那麼高,分布式id算法主要關注幾點:全局唯一,趨勢遞增,業務隔離,高效 ,常用的算法有:UUID,資料庫自增,redis,雪花算法-Snowflake,百度-UidGenerator,美團Leaf等

5 分布式日志的處理

  傳統的日志都在一台機器或者幾台機器中友善查閱,但是在分布式環境下,由于海量的日志導緻排查日志異常困難,此時正常的做法是:集中化處理 ,常用的方案有ELK,Flume等,基本思路就是先收集,再分類,最後檢視。

6  分布式消息處理

   單機應用我們依賴于一些常用的容器,例如各種queue或者容器,分布式系統中,不僅需要考慮消息的傳遞,還需要考慮可達性,并且還有其他複雜的場景,例如釋出訂閱,ACK等,此時可以采用RabbitMQ,ZeroMQ等消息中間件來實作。

7 其他分布式需要考慮技術場景

   分布式緩存,分布式搜尋系統,一緻性hash算法,分布式服務架構,分布式任務排程,上傳,分布式會話,分布式存儲,監控,分布式配置中心等

CAP原則:

  CAP原則又稱CAP定理,指的是在一個分布式系統中,Consistency(一緻性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼,隻能至多滿足其中2個。

分布式系統必須要知道的CAP和BASE理論

1. C(Consistency). 一緻性 

    狀态和資料的一緻性,例如在分布式事務操作中,某一個操作的狀态沒有及時的同步到其他節點上,進而帶來一定的不一緻現象,這種成為時延一緻性,這種随着時間的推移最終會達到一緻性,是以大多數系統盡可能的縮短這種時延一緻性,或者采用補償的機制,達成最終一緻性。

2. A(Availability), 可用性,

在特定的時間内,請求正常的傳回,抛開時間粒度,說可用性沒有意義,對于和使用者互動的事務,30s傳回對于使用者是不可用的,258時間原則可以作為使用者體驗的參考。

3. P(Partition tolerance).分區容錯性

   在節點間通信失敗時保證系統不受影響. 對容錯的要求提高會降低對可用性或一緻性, 要麼停止系統用于錯誤恢複, 要麼繼續服務但是降低一緻性,例如系統部署到兩個不同的機房AB ,網絡的因素導緻AB無法互通,導緻AB成為兩個獨立的個體,是以p必然存在,即所謂的”腦裂“。故分布式設計的時候我們需要考慮CP或者AP ,我們需要在AC做出平衡。

BASE理論

  BASE 是 Basically Available(基本可用)、Soft state(軟狀态)和 Eventually consistent (最終一緻性),BASE理論是對CAP中AP的一個擴充,除非特定的事務類型,大多數的系統都是AP系統,滿足使用者的可用性和服務的可用性,C隻需達到最終一緻性即可。

 1. Basically Available(基本可用)

   指分布式系統在出現故障的時候,保證核心可用和主要功能可用,允許損失部分可用性,大多數系統會采用熔斷,降級,兜底的方案。

2. Soft state(軟狀态)

     事務存在的中間狀态,我們成為軟狀态,例如檔案上傳過程中,開始長傳,上傳中,上傳完成,所有的軟狀态都滿足時延一緻性。

  3. Eventually consistent (最終一緻性)

    最終一緻性是軟狀态的最終狀态,為了達到資料在各個系統的顯示一緻,并且保證各個資料副本也最終一緻,滿足時延一緻性的随着時間會自動同步,異常的我們可以采用補償機制,達到最終一緻性。

備注:CAP和BASE原理是ACID事務在分布式系統的理論基礎和延申,後續會講下具體說下ACID原理。

繼續閱讀