天天看點

分布式事務基礎理論——CAP理論CAP理論CAP的組合方式總結

CAP理論

全稱:Consistency & Availability & Partition tolerance,分别是一緻性、可用性、分區容忍性,這是分布式架構當中最基礎的理論。

以電商場景為案例幫助我們了解概念:

這是一個典型的讀寫分離場景

分布式事務基礎理論——CAP理論CAP理論CAP的組合方式總結

Consistency

一緻性是指寫操作後的讀操作可以讀取到最新的資料,當資料分布在多個節點,從任意節點讀取的到的資料都是最新的。

以上圖為例,商品資訊如果需要做一緻性保證的話,就要做滿足如下要求:

  • 商品服務寫入主資料庫成功,向從資料庫的查詢也必須是最新的資料
  • 商品服務吸入主資料庫失敗,從資料也不能查詢到新資料

如何保證一緻性:

  • 寫入主資料後要保證資料能同步到從資料庫
  • 當資料寫入主資料庫中之後,在資料向從資料庫同步的過程中,需要将從資料庫鎖定,待同步完成之後才能放開,以免出現資料寫入主資料庫之後,從資料庫查詢的還是舊資料

分布式系統實作一緻性的特點:

  • 由于從在資料的同步過程,寫操作的響應會有一定的延遲
  • 為了保證讀取資料時最新的,也就是保證一緻性,會對資源進行暫時的鎖定,待資料完成後釋放鎖定的資源
  • 如果請求資料在同步資料的時間段内,則優雅的傳回錯誤資訊,但是一定不能傳回舊資料

Availability

可用性實質任何事務操作都可以的到響應結果,不會出現響應逾時或者相應錯誤,優先保證服務的正常進行。

以上圖為例,商品資訊如果需要滿足可用性的話,就要做滿足如下要求:

  • 從資料庫接收到資料查詢的請求,要立即能夠響應資料查詢結果,即使是舊資料
  • 讀取從資料不允許出現響應逾時或者響應失敗

如何保證可用性:

  • 寫入主資料庫後一定要保證将資料同步到從資料
  • 由于要保證從資料的讀取不能出現響應逾時或者響應失敗,不能将從資料庫中的資源鎖定
  • 即使資料沒有同步完成,從資料庫的讀取也要能傳回查詢結果,即使是舊資料,如果連舊資料都沒有,則要傳回一個優雅的預設資訊,堅決不能出現響應逾時或者響應失敗

分布式系統可用性的特點:

  • 所有請求都有響應,優先保證資料的傳回,不會出現響應逾時或者傳回錯誤

Partition tolerance

通常分布式系統的各個節點都部署在不同的子網(各地伺服器),這就是網絡分區,難免會出現由于網絡問題導緻的節點間通信失敗,此時系統仍然要能夠堆外提供服務,這就是分區容忍性。

以上圖為例,商品資訊如果需要滿足分區容忍性的話,就要做滿足如下要求:

  • 主資料庫向從資料庫同部資料失敗不影響讀寫操作(也就是即使同步失敗,仍然能保證主資料庫的寫操作和從資料庫的讀請求)
  • 其中一個節點挂掉不影響其他節點堆外服務

如何實作分區容忍性:

  • 盡量使用異步架構取代同步操作,實作松耦合,不能因為一個業務調用鍊中的某一個節點異常,導緻主業務操作失敗。
  • 盡量增加各個節點的執行個體,多主多從,保證每一個節點中一定有活着的服務

分區容忍性是分布式系統的基本能力

CAP的組合方式

所有分布式事務場景中不會同時具備CAP三個特性,由之前CAP介紹中可知,C和A是沖突的不能共存的,P是最基本的能力。

AP

放棄一緻性,追求分區容忍性和可用性,這是大多數場景下分布式系統設計的選擇。

例如:

  • 訂單退款,退款成功了,但是錢會在幾個工作日内到賬,這個過程其實就是放棄了一緻性,追求可用性
  • 電商網站商品釋出,雖然商品已經釋出成功了,但是由于資料同步或者是緩存沒有及時更新,商品清單可能要過幾十秒甚至幾分鐘才能重新整理出新的商品

CP

放棄可用性,追求強一緻性和分區容忍性,分布式系統中經常用到的代表中間件zookeeper就是最求強一緻的代表

例如:

  • 銀行轉賬,隻要提示轉賬成功,那該次轉賬操作一定是完成的(現在注意到手機銀行轉賬已經是2PC模式了QAQ)

CA

放棄容忍性,即不進行分區,隻滿足一緻性和可用性。實際上這已經是一種垂直架構了,沒有分布式的特性了。

不采用主從資料庫,資料庫可以響應每次查詢請求,通過事務隔離級别實作每個查詢都可以傳回最新的資料。

總結

CAP是一個已經被證明的理論:一個分布式系統系統最多同時能滿足一緻性、可用性、分區容忍性的兩種(其實CA沒有P不算是分布式),可以作為架構設計的、技術選型的基礎考量标準。對于現在大多數網際網路應用場景,結合衆多、部署分布,而且現在的叢集規模越來越大,是以節點故障、網絡故障是常态,要保證服務的高可用的同時,并要達到良好的響應性能,是以一般都會選擇AP。

繼續閱讀