CAP与Base理论
分布一致性的提出
在分布式系統中要解決的一個重要問題就是數據的復制。在我們的日常開發經驗中,相信很多開發人員都遇到過這樣的問題:假設客戶端C1將系統中的一個值K由V1更新為V2,但客戶端C2無法立即讀取到K的最新值,需要在一段時間之后才能讀取到。這很正常,因為數據庫復制之間存在延時。
分布式系統對于數據的復制需求一般都來自于以下兩個原因:
1、為了增加系統的可用性,以防止單點故障引起的系統不可用
2、提高系統的整體性能,通過負載均衡技術,能夠讓分布在不同地方的數據副本都能夠為用戶提供服務
數據復制在可用性和性能方面給分布式系統帶來的巨大好處是不言而喻的,然而數據復制所帶來的一致性挑戰,也是每一個系統研發人員不得不面對的。
所謂分布一致性問題,是指在分布式環境中引入數據復制機制之后,不同數據節點之間 可能出現的,并無法依靠計算機應用程序自身解決的數據不一致的情況。簡單講,數據一致性就是指在對一個副本數據進行更新的時候,必須確保也能夠更新其他的 副本,否則不同副本之間的數據將不一致。
那么如何解決這個問題?一種思路是"既然是由于延時動作引起的問題,那我可以將寫入的動作阻塞,直到數據復制完成后,才完成寫入動作"。 沒錯,這似乎能解決問題,而且有一些系統的架構也確實直接使用了這個思路。但這個思路在解決一致性問題的同時,又帶來了新的問題:寫入的性能。如果你的應 用場景有非常多的寫請求,那么使用這個思路之后,后續的寫請求都將會阻塞在前一個請求的寫操作上,導致系統整體性能急劇下降。
總得來說,我們無法找到一種能夠滿足分布式系統所有系統屬性的分布式一致性解決方案。因此,如何既保證數據的一致性,同時又不影響系統運行的性能,是每一個分布式系統都需要重點考慮和權衡的。
于是,一致性級別由此誕生:
1、強一致性
這種一致性級別是最符合用戶直覺的,它要求系統寫入什么,讀出來的也會是什么,用戶體驗好,但實現起來往往對系統的性能影響大
2、弱一致性
這種一致性級別約束了系統在寫入成功后,不承諾立即可以讀到寫入的值,也不久承諾多久之后數據能夠達到一致,但會盡可能地保證到某個時間級別(比如秒級別)后,數據能夠達到一致狀態
3、最終一致性
最終一致性是弱一致性的一個特例,系統會保證在一定時間內,能夠達到一個數據一致的狀態。這里之所以將最終一致性單獨提出來,是因為它是弱一致性中非常推崇的一種一致性模型,也是業界在大型分布式系統的數據一致性上比較推崇的模型
?
網絡分區
當網絡由于發生異常情況,導致分布式系統中部分節點之間的網絡延時不斷增大,最終導致組成分布式系統的所有節點中,只有部分節點之間能夠正常通信,而另一些節點則不能----我們將這個現象稱為網絡分區。當網絡分區出現時,分布式系統會出現局部小集群,在極端情況下,這些局部小集群會獨立完成原本需要整個分布式系統才能完成的功能,包括對數據的事物處理,這就對分布式一致性提出了非常大的挑戰。
網絡分區是指在分布式系統中,不同的節點分布在不同的子網絡(機房或異地網絡) 中,由于一些特殊的原因導致這些子網絡出現網絡不連通的狀況,但各個子網絡的內部網絡是正常的,從而導致整個系統的網絡環境被切分成了若干個孤立的區域。 需要注意的是,組成一個分布式系統的每個節點的加入與退出都可以看作是一個特殊的網絡分區。
?
CAP
CAP指的是在一個分布式系統中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼。
分布式系統的CAP理論:理論首先把分布式系統中的三個特性進行了如下歸納:● 一致性(C):在分布式環境下,一致性是指數據在多個副本之間能否保持一致的特性。在一致性的需求下,當一個系統在數據一致的狀態下執行更新操作后,應該保證系統的數據仍然處于一直的狀態。 ● 可用性(A):在集群中一部分節點故障后,集群整體是否還能響應客戶端的讀寫請求。(對數據更新具備高可用性) ● 分區容錯性(P):分布式系統在遇到任何網絡分區故障的時候,仍然需要能夠保證對外提供滿足一致性和可用性的服務,除非是整個網絡環境都發生了故障。 既然一個分布式系統無法同時滿足一致性、可用性、分區容錯性三個特點,所以我們就需要拋棄一樣: ?
?
?
BASE理論
BASE是Basically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的縮寫。
BASE理論是對CAP中一致性和可用性權衡的結果,其來源于對大規模互聯網系統分布式實踐的總結, 是基于CAP定理逐步演化而來的。
BASE理論的核心思想是:即使無法做到強一致性,但每個應用都可以根據自身業務特點,采用適當的方式來使系統達到最終一致性。
接下來看一下BASE中的三要素:
1、基本可用
基本可用是指分布式系統在出現不可預知故障的時候,允許損失部分可用性----注意,這絕不等價于系統不可用。比如:
(1)響應時間上的損失。正常情況下,一個在線搜索引擎需要在0.5秒之內返回給用戶相應的查詢結果,但由于出現故障,查詢結果的響應時間增加了1~2秒
(2)系統功能上的損失:正常情況下,在一個電子商務網站上進行購物的時候,消費者幾乎能夠順利完成每一筆訂單,但是在一些節日大促購物高峰的時候,由于消費者的購物行為激增,為了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面
2、軟狀態
軟狀態指允許系統中的數據存在中間狀態,并認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同節點的數據副本之間進行數據同步的過程存在延時
3、最終一致性
最終一致性強調的是所有的數據副本,在經過一段時間的同步之后,最終都能夠達到一個一致的狀態。因此,最終一致性的本質是需要系統保證最終數據能夠達到一致,而不需要實時保證系統數據的強一致性。
總的來說,BASE理論面向的是大型高可用可擴展的分布式系統,和傳統的事物ACID特性是相反的,它完全不同于ACID的強一致性模型,而是通過犧牲強一致性來獲得可用性,并允許數據在一段時間內是不一致的,但最終達到一致狀態。但同時,在實際的分布式場景中,不同業務單元和組件對數據一致性的要求是不同的,因此在具體的分布式系統架構設計過程中,ACID特性和BASE理論往往又會結合在一起。
?
?
來源:https://www.cnblogs.com/szlbm/p/5588543.html
轉載于:https://www.cnblogs.com/theRhyme/p/9188482.html
總結
以上是生活随笔為你收集整理的CAP与Base理论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 潘正磊谈微软研发团队管理和敏捷实践学习总
- 下一篇: 多行文本溢出省略号