一、簡介
在過去,每個應用程序都是運行在一台計算機上的單程序單CPU。今天,情況變了。在大數據和雲計算領域,應用程序是由運行在不斷變化的計算機上的許多獨立程序組成的。程序員不能夠專注編寫業務代碼,反而要花費大量的時間維護各個服務之間的關係。為了解決程序員能夠專注於業務代碼的實現,zookeeper相關的應用應世而生。
它支持分佈式系統的調度任務,協調任務是涉及多個進程的任務。這樣的任務是可以為了合作是為了規範爭論。合作意味着各個進程需要共同努力,而主進程採取行動使其他進程能夠正常運行。例如:在典型的主從架構中,主通知從進行工作。因此,主人可以分配任務給園丁。但是,我們確實希望有一個主進程,但是每個子進程又能稱為主進程,因此,多個進程需要實現互斥。
一個典型的分佈式數據一致性的解決方案,分佈式應用程序可以基於它實現諸如數據發佈/訂閲、負載均衡、命名服務、分佈式協調/通知、集羣管理、Master 選舉、分佈式鎖和分佈式隊列等功能。
二、數據結構
zookeeper 提供的名稱空間非常類似於標準文件系統,key-value 的形式存儲。名稱 key 由 / 分割的一系列路徑元素,zookeeper 名稱空間中的每個節點都是一個路徑標識。
三、CAP 理論
CAP理論是分佈式系統設計中的一個重要理論,它指出了在分佈式系統中,一致性(Consistency)、可用性(Availability)和分區容錯性(Partition Tolerance)這三個因素無法同時完全滿足。CAP理論最早由Eric Brewer在2000年的ACM研討會上提出,並在2003年由MIT的Seth Gilbert和Nancy Lynch正式證明。
- 一致性(Consistency)
在分佈式環境中,一致性是指多個副本之間是否能夠保持一致的特性,等同於所有節點訪問同一 份最新的數據副本。在一致性的需求下,當一個系統在數據一致的狀態下執行更新操作後,應該保證系統數據依然處於一致的狀態。 - 可用性(Availability)
每次請求能獲取到正確的響應,但是不保證獲取的數據為最新數據。 -
分區容錯性(Partition tolerance)
分佈式系統在遇到任何網絡分區故障的時候,依然要能夠保證提供滿足一致性和 可用性的服務,除非整個網絡環境都發生了故障。一個分佈式系統中最多隻能滿足兩點:
分區容錯性(Partition tolerance)是必須的。
zookeeper是滿足了CP。
SpringCloud中的eruka實現了AP。
四、BASE 理論
BASE理論 是分佈式系統設計中的一個重要理論框架,它強調在分佈式系統中通過權衡一致性、可用性和實時性來構建高性能、高可用性和高靈活性的系統。BASE理論由 eBay 的架構師Dan Pritchett在2008年提出,是對CAP理論的一種擴展和補充。BASE理論的核心思想包括基本可用(Basically Available)、軟狀態(Soft State)和最終一致性(Eventually Consistent)三個方面。
- 基本可用(Basically Available)
1、響應時間上損失:正常情況下的搜索引擎0.5秒後就返回給用户結果,而基本可用的搜索引擎可以在2秒作用返回結果。
2、功能損失:在正常情況下,用户可以順利完成每一筆訂單。但是到了大促銷期間,為了保證購物系統的穩定性,可以將其他服務引導到降級頁面。 - 軟狀態(Soft State)
1、硬狀態是指所有節點的數據副本的數據必須完全一致。
2、軟狀態是允許系統在多個不同節點的數據副本可以存在數據延時。 - 最終一致性(Eventually Consistent)
1、因果一致性(Causal consistency)
2、讀己之所寫(Read your writes)
3、會話一致性(Session consistency)
4、單調讀一致性(Monotonic read consistency)
5、單調寫一致性(Monotonic write consistency)