1. 程式人生 > >[zookeeper]-分散式架構

[zookeeper]-分散式架構

 

一、前言

  在大資料系統中,分散式系統已經成為一個無法避免的元件,如zookeeper已經成為了工業屆的標準。所以對於大資料的研究,也必須要研究分散式系統的特點。

二、集中式系統

  由一臺或多臺計算機組成的中心節點,資料集中儲存在這個中心節點中,並且整個系統的所有業務單元都集中部署在這個中心節點上,系統的所有功能均由其集中處理。其部署簡單,不用考慮多個節點間的分散式協作問題。

三、分散式系統

  分散式系統是一個由硬體或軟體元件分佈在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通訊和協調的系統。其擁有如下特點

  3.1 分佈性

  分散式系統中的多臺計算機都會在空間中隨意分佈,同時,機器的分佈情況也會隨時變動。

  3.2 對等性

  分散式系統中的計算機沒有主/從之分,既沒有控制整個系統的主機,也沒有被控制的從機,組成分散式系統的所有計算機節點都是對等的,副本指的是分散式系統對資料和服務提供的一種冗餘方式,為了對外提供高可用的服務,我們往往會對資料和服務進行副本處理。資料副本是指在不同的節點上持久化同一份資料,當某一個節點上儲存的資料丟失時,可以從副本上讀取到該資料,這是解決分散式系統資料丟失問題最為有效的手段。服務副本是隻多個節點提供同樣的服務,每個節點都有能力接受來自外部的請求並進行相應的處理。

  3.3 併發性

  同一分散式系統中的多個節點,可能會併發地操作一些共享資源,諸如資料庫或分散式儲存等,如何高效地協調分散式併發操作也成為了分散式系統架構與設計中最大的挑戰之一。

  3.4 缺乏全域性時鐘

  典型的分散式系統由一系列在空間上隨意分佈的多個程序組成,具有明顯的分佈性,這些程序之間通過交換訊息來進行互相通訊,因此,在分散式系統中,很難定義兩個時間究竟誰先誰後,原因就是因為分散式系統缺乏一個全域性的時鐘序列控制。

  3.5 故障總是會發生

  組成分散式系統的所有計算機,都有可能發生任何形式的故障,任何在設計階段考慮到的異常情況,一定會在系統實際執行中發生。

四、分散式環境的問題

  4.1 通訊異常

  從集中式到分散式,必然引入了網路因素,而由於網路本身的不可靠性,因此就引入了額外的問題。分散式系統各節點之間的網路通訊能夠正常進行,其延時也會遠大於單機操作,在訊息的收發過程中,訊息丟失和訊息延遲變得十分普遍。

  4.2 網路分割槽

  當網路發生異常情況時,導致分散式系統中部分節點之間的網路延時不斷增大,最終導致組成分散式胸的所有節點中,只有部分節點之間能夠正常通訊,而另一些節點則不能,這種現象稱之為網路分割槽,當網路分割槽出現時,分散式系統會出現區域性小叢集,在極端情況下,這些區域性小叢集會獨立完成原本需要整個分散式系統才能完成的功能,包括對資料的事務處理,這就對分散式一致性提出了非常大的挑戰。

  4.3 三態

  由於網路可能會出現各種各樣的問題,因此分散式系統的每一次請求與響應,存在特有的三態概念:成功、失敗、超時。當網路在異常情況下,可能會出現超時現象,通常由以下兩種情況:1. 由於網路原因,該請求並沒有被成功地傳送到接收方,而是在傳送過程就發生了訊息丟失現象。2. 該請求成功的被接收方接受後,並進行了處理,但是在將響應反饋給傳送方時,發生了訊息丟失現象。

  4.4 節點故障

  節點故障是指組成分散式系統的伺服器節點出現宕機或僵死現象,每個節點都有可能出現故障,並且煤炭都在發生。

五、從ACID到CAP/BASE

  5.1 ACID

  事務是由一系列對系統中資料進行訪問與更新的操作所組成的一個程式執行單元,狹義上的食物特指資料庫事務。一方面,當多個應用程式併發訪問資料庫時,食物可以在這些應用程式之間提供一個隔離方法,以防止彼此的操作相互干擾,另一方面,食物為資料庫操作序列提供了一個從失敗中恢復到正常狀態的方法,同時提供了資料庫即使在宜昌狀態下仍能保持資料一致性的方法。事務具有原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、永續性(Durability),簡稱ACID。

  ① 原子性,指事務必須是一個原子的操作序列單元,事務中包含的各項操作在一次執行過程中,只允許出現以下兩種狀態之一,全部成功執行,全部不執行。任何一項操作失敗都將導致整個事務失敗,同時其他已經被執行的操作都將被撤銷並回滾,只有所有操作全部成功,整個事務才算是成功完成。

  ② 一致性,指事務的執行不能破壞資料庫資料的完整性和一致性,一個事務在執行之前和執行之後,資料庫都必須處於一致性狀態,即事務執行的結果必須是使資料庫從一個一致性狀態轉變到另一個一致性狀態,因此當資料庫只包含成功事務提交的結果時,就能說資料庫處於一致性狀態,而如果資料庫系統在執行過程中發生故障,有些事務尚未完成就被迫中斷,這些未完成的事務對資料庫所做的修改有一部分已寫入物理資料庫,這時資料庫就處於一種不正確的狀態,或者說是不一致的狀態。

  ③ 隔離性,指在併發環境中,併發的事務是相互隔離的,一個事務的執行不能被其他事務干擾,即不同的事務併發操作相同的資料時,每個事務都有各自完整的資料空間,即一個事務內部的操作及使用的資料對其他併發事務是隔離的,併發執行的各個事務之間不能相互干擾。

  ④ 永續性,指一個事務一旦提交,他對資料庫中對應資料的狀態變更就應該是永久的,即一旦某個事務成功結束,那麼它對資料庫所做的更新就必須被永久的儲存下來,即使發生系統崩潰或者宕機故障,只要資料庫能夠重新啟動,那麼一定能夠將其恢復到事務成功結束時的狀態。

  5.2 分散式事務

  分散式事務是指事務的參與者、支援事務的伺服器、資源伺服器以及事務管理器分別位於分散式系統的不同節點上,通常一個分散式事務中會涉及對多個數據源或業務系統的操作。一個分散式事務可以看做是由多個分散式的操作序列組成,通常可以把這一系列分散式的操作序列稱為子事務。由於在分散式事務中,各個子事務的執行是分散式的,因此要實現一種能夠保證ACID特性的分散式事務處理系統就顯得格外複雜。

  5.3 CAP

  CAP理論告訴我們,一個分散式系統不可能同時滿足一致性、可用性、分割槽容錯性這三個基本需求,最多隻能同時滿足其中的兩個。

  ① 一致性,指資料在多個副本之間是否能夠保持一致的特性,在一致性的需求下,當一個系統在資料一致的狀態下執行更新操作後,應該保證系統的資料仍然處於一致狀態。對於一個將資料副本分佈在不同分散式節點上的系統來來說,如果對第一個結點的資料進行了更新操作並且成功後,卻沒有使得第二個節點上的資料得到相應的更新,於是在對第二個結點的資料進行讀取操作時,獲取的仍然是老資料(髒資料),這就是典型的分散式資料不一致的情況,在分散式系統中,如果能夠做到針對一個數據項的更新操作執行成功後,所有的使用者都可以讀取到期最新的值,那麼這樣的系統就被認為具有強一致性。

  ② 可用性,指系統提供的服務必須一直處於可用的狀態,對於使用者的每一操作請求總是能夠在有限的時間內返回結果。

  ③ 分割槽容錯性,分散式系統在遇到任何網路分割槽故障時,仍然需要能夠保證對外提供滿足一致性和可用性的服務,除非是整個網路環境都發生了故障。

  5.4 BASE

  BASE是基本可用(Basically Available)、Soft state(弱狀態)、Eventually consistent(最終一致性)三個短語的簡寫。

  ① 基本可用,指分散式系統在出現不可預知故障時,允許損失部分可用性,如響應時間上的損失或功能上的損失。

  ② 弱狀態,也稱為軟狀態,指允許系統中的二資料存在中間狀態,並認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同節點的資料副本之間進行資料同步的過程存在延時。

  ③ 最終一致性,指系統中所有的資料副本,在經過一段時回見的同步後,最終能夠達到一個一致的狀態,因此最終一致性的本質是需要系統保證資料能夠達到一致,而不需要實時保證系統資料的強一致性。

六、總結

  這篇博文主要介紹了分散式的一些相關知識,更詳細的知識之後會給出