1. 程式人生 > >Zookeeper技術:分散式架構詳解、分散式技術詳解、分散式事務

Zookeeper技術:分散式架構詳解、分散式技術詳解、分散式事務

一、分散式架構詳解

1、分散式發展歷程

1.1 單點集中式

特點:App、DB、FileServer都部署在一臺機器上。並且訪問請求量較少

1.2  應用服務和資料服務拆分

 特點:App、DB、FileServer分別部署在獨立伺服器上。並且訪問請求量較少

1.3  使用快取改善效能

 特點:資料庫中頻繁訪問的資料儲存在快取伺服器中,減少資料庫的訪問次數,降低資料庫的壓力

1.4 應用伺服器叢集

 特點:多臺應用伺服器通過負載均衡同時對外提供服務,解決單臺伺服器處理能力上限的問題

1.5 資料庫讀寫分離

特點:

資料庫進行讀寫分離(主從)設計,解決資料庫的處理壓力

1.6 反向代理和CDN加速

 特點:採用反向代理和CDN加快系統的訪問速度

1.7 分散式檔案系統和分散式資料庫

 特點:資料庫採用分散式資料庫,檔案系統採用分散式檔案系統

隨著業務的發展,最終資料庫讀寫分離也將無法滿足需求,需要採用分散式資料庫和分散式檔案系統來支撐

分散式資料庫是資料庫拆分後的最後方法,只有在單表規模非常龐大的時候才使用,更常用的資料庫拆分手段是業務分庫,將不同業務的資料庫部署在不同的機器上

二、 分散式技術詳解

1. 併發性

2. 分佈性

  大任務拆分成多個任務部署到多臺機器上對外提供服務

3. 缺乏全域性時鐘  

  時間要統一

4. 對等性

  一個服務部署在多臺機器上是一樣的,無任何差別

5. 故障肯定會發生

   硬碟壞了 CPU燒了....

三、分散式事務

1. ACID

原子性(Atomicity):一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被恢復(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

一致性(Consistency):在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。

比如A有500元,B有300元,A向B轉賬100,無論怎麼樣,A和B的總和總是800元

隔離性(Isolation):資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和序列化(Serializable)。

永續性(Durability):事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。

2. 2P/3P

2P= Two Phase commit   二段提交(RDBMS(關係型資料庫管理系統)經常就是這種機制,保證強一致性)

3P= Three Phase commit  三段提交

說明:2P/3P是為了保證事務的ACID(原子性、一致性、隔離性、永續性)

2.1 2P的兩個階段

階段1:提交事務請求(投票階段)詢問是否可以提交事務

階段2:執行事務提交(commit、rollback) 真正的提交事務

2.2 3P的三個階段

階段1:是否提交-詢問是否可以做事務提交

階段2:預先提交-預先提交事務

階段3:執行事務提交(commit、rollback)真正的提交事務


說明:3P把2P的階段一拆分成了前面兩個階段

3. CAP理論

一致性(Consistency):分散式資料庫的資料保持一致

可用性(Availability):任何一個節點掛了,其他節點可以繼續對外提供服務

分割槽容錯性(網路分割槽)Partition tolerance:一個數據庫所在的機器壞了,如硬碟壞了,資料丟失了,可以新增一臺機器,然後從其他正常的機器把備份的資料同步過來

CAP理論的特點:CAP只能滿足其中2條

CA(放棄P):將所有的資料放在一個節點。滿足一致性、可用性。

AP(放棄C):放棄強一致性,用最終一致性來保證。

CP(放棄A):一旦系統遇見故障,受到影響的伺服器需要等待一段時間,在恢復期間無法對外提供服務。

舉例說明CAP理論:

有3臺機器分別有3個數據庫分別有兩張表,資料都是一樣的

Machine1-db1-tbl_person、tbl_order

Machine2-db2-tbl_person、tbl_order

Machine3-db3-tbl_person、tbl_order

1)當向machine1的db1的表tbl_person、tbl_order插入數資料時,同時要把插入的資料同步到machine2、machine3,這就是一致性

2)當其中的一臺機器宕機了,可以繼續對外提供服務,把宕機的機器重新啟動起來可以繼續服務,這就是可用性

3)當machine1的機器壞了,資料全部丟失了,不會有任何問題,因為machine2和machine3上還有資料,重新加一臺機器machine4,把machine2和machine3其中一臺機器的備份資料同步過來就可以了,這就是分割槽容錯性

4. BASE理論

基本可用(bascially available)、軟狀態(soft state)、最終一致性(Eventually consistent)

基本可用:在分散式系統出現故障,允許損失部分可用性(服務降級、頁面降級)

軟狀態:允許分散式系統出現中間狀態。而且中間狀態不影響系統的可用性。

1、這裡的中間狀態是指不同的data replication之間的資料更新可以出現延時的最終一致性

2、如CAP理論裡面的示例,當向machine1的db1的表tbl_person、tbl_order插入數資料時,同時要把插入的資料同步到machine2、machine3,當machine3的網路有問題時,同步失敗,但是過一會網路恢復了就同步成功了,這個同步失敗的狀態就稱為軟狀態,因為最終還是同步成功了。

最終一致性:data replications經過一段時間達到一致性。

5. Paxos演算法

5.1 介紹Paxos演算法之前我們先來看一個小故事

拜占庭將軍問題

拜占庭帝國就是5~15世紀的東羅馬帝國,拜占庭即現在土耳其的伊斯坦布林。我們可以想象,拜占庭軍隊有許多分支,駐紮在敵人城外,每一分支由各自的將軍指揮。假設有11位將軍,將軍們只能靠通訊員進行通訊。在觀察敵人以後,忠誠的將軍們必須制訂一個統一的行動計劃——進攻或者撤退。然而,這些將軍裡有叛徒,他們不希望忠誠的將軍們能達成一致,因而影響統一行動計劃的制訂與傳播。

問題是:將軍們必須有一個協議,使所有忠誠的將軍們能夠達成一致,而且少數幾個叛徒不能使忠誠的將軍們作出錯誤的計劃——使有些將軍進攻而另一些將軍撤退。

假設有9位忠誠的將軍,5位判斷進攻,4位判斷撤退,還有2個間諜惡意判斷撤退,雖然結果是錯誤的撤退,但這種情況完全是允許的。因為這11位將軍依然保持著狀態一致性。

總結:

1)11位將軍進攻城池

2)同時進攻(議案、決議)、同時撤退(議案、決議)

3)不管撤退還是進攻,必須半數的將軍統一意見才可以執行

4)將軍裡面有叛徒,會干擾決議生成

5.2 下面就來介紹一下Paxos演算法

Google Chubby的作者Mike Burrows說過這個世界上只有一種一致性演算法,那就是Paxos,其它的演算法都是殘次品。 

Paxos:多數派決議(最終解決一致性問題)

Paxos演算法有三種角色:Proposer,Acceptor,Learner

Proposer:提交者(議案提交者)

          提交議案(判斷是否過半),提交批准議案(判斷是否過半)

Acceptor:接收者(議案接收者)

          接受議案或者駁回議案,給proposer迴應(promise)

Learner:學習者(打醬油的)

         如果議案產生,學習議案。

設定1:如果Acceptor沒有接受議案,那麼他必須接受第一個議案

設定2:每個議案必須有一個編號,並且編號只能增長,不能重複。越往後越大。

設定3:接受編號大的議案,如果小於之前接受議案編號,那麼不接受

設定4:議案有2種(提交的議案,批准的議案)

1)Prepare階段(議案提交)

a)Proposer希望議案V。首先發出Prepare請求至大多數Acceptor。Prepare請求內容為序列號K

b)Acceptor收到Prepare請求為編號K後,檢查自己手裡是否有處理過Prepare請求。

c)如果Acceptor沒有接受過任何Prepare請求,那麼用OK來回復Proposer,代表Acceptor必須接受收到的第一個議案(設定1

d)否則,如果Acceptor之前接受過任何Prepare請求(如:MaxN),那麼比較議案編號,如果K<MaxN,則用reject或者error回覆Proposer

e)如果K>=MaxN,那麼檢查之前是否有批准的議案,如果沒有則用OK來回復Proposer,並記錄K

f)如果K>=MaxN,那麼檢查之前是否有批准的議案,如果有則回覆批准的議案編號和議案內容(如:<AcceptN, AcceptV>, AcceptN為批准的議案編號,AcceptV為批准的議案內容)

2)Accept階段(批准階段)

a)Proposer收到過半Acceptor發來的回覆,回覆都是OK,且沒有附帶任何批准過的議案編號和議案內容。那麼Proposer繼續提交批准請求,不過此時會連議案編號K和議案內容V一起提交(<K, V>這種資料形式)

b)Proposer收到過半Acceptor發來的回覆,回覆都是OK,且附帶批准過的議案編號和議案內容(<pok,議案編號,議案內容>)。那麼Proposer找到所有回覆中超過半數的那個(假設為<pok,AcceptNx,AcceptVx>)作為提交批准請求(請求為<K,AcceptVx>)傳送給Acceptor。

c)Proposer沒有收到過半Acceptor發來的回覆,則修改議案編號K為K+1,並將編號重新發送給Acceptors(重複Prepare階段的過程)

d)Acceptor收到Proposer發來的Accept請求,如果編號K<MaxN則不迴應或者reject。

e)Acceptor收到Proposer發來的Accept請求,如果編號K>=MaxN則批准該議案,並設定手裡批准的議案為<K,接受議案的編號,接受議案的內容>,回覆Proposer。

f)經過一段時間Proposer對比手裡收到的Accept回覆,如果超過半數,則結束流程(代表議案被批准),同時通知Leaner可以學習議案。

g) 經過一段時間Proposer對比手裡收到的Accept回覆,如果未超過半數,則修改議案編號重新進入Prepare階段。

5.3 Paxos示例

示例1:先後提議的場景

角色:

proposer:參謀1,參謀2

acceptor:將軍1,將軍2,將軍3(決策者)

1)參謀1發起提議,派通訊兵帶信給3個將軍,內容為(編號1);

2)3個將軍收到參謀1的提議,由於之前還沒有儲存任何編號,因此把(編號1)儲存下來,避免遺忘;同時讓通訊兵帶信回去,內容為(ok);

3)參謀1收到至少2個將軍的回覆,再次派通訊兵帶信給3個將軍,內容為(編號1,進攻時間1);

4)3個將軍收到參謀1的時間,把(編號1,進攻時間1)儲存下來,避免遺忘;同時讓通訊兵帶信回去,內容為(Accepted);

5)參謀1收到至少2個將軍的(Accepted)內容,確認進攻時間已經被大家接收;

6)參謀2發起提議,派通訊兵帶信給3個將軍,內容為(編號2);

7)3個將軍收到參謀2的提議,由於(編號2)比(編號1)大,因此把(編號2)儲存下來,避免遺忘;又由於之前已經接受參謀1的提議,因此讓通訊兵帶信回去,內容為(編號1,進攻時間1);

8)參謀2收到至少2個將軍的回覆,由於回覆中帶來了已接受的參謀1的提議內容,參謀2因此不再提出新的進攻時間,接受參謀1提出的時間;

示例2:交叉場景

角色:

proposer:參謀1,參謀2

acceptor:將軍1,將軍2,將軍3(決策者)

1)參謀1發起提議,派通訊兵帶信給3個將軍,內容為(編號1);

相關推薦

Spring 框架基礎(06)Mvc架構模式簡介,執行流程

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、SpringMvc框架簡介 1、Mvc設計理念 MVC是一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個元件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯,MVC分層有助於管理和架

MySQL基礎篇(05)邏輯架構圖解和InnoDB儲存引擎

> 本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/mysql-data-base) || [GitEE·點這裡](https://github.com/cicadasmile/mysql-data-base) # 一、MySQL邏輯架構 ##

分散式架構下為什麼要分層[ 技術架構 ]

前言 分散式架構下如果你的服務沒有分層,那麼不應該叫分散式架構。有了分層更好的解決服務依賴問題。提高管理效率,開發效率,運維效率

【本人禿頂程式設計師】五年成為阿里技術專家,架構師需要懂那些技術

很早很早之前,我對於架構的概念一點都不理解,依稀記得,架構( architecture)這個詞,來自於建築領域。 這對於我這個沒寫過幾行程式碼的人來說,瞬間就有了一種“不明覺厲”的崇拜感。 架構,感覺好厲害的樣子,從名稱上來說,好像是設計根骨,設計底層,設計最核心的東西的人。 架

Zookeeper技術分散式架構分散式技術分散式事務

一、分散式架構詳解 1、分散式發展歷程 1.1 單點集中式 特點:App、DB、FileServer都部署在一臺機器上。並且訪問請求量較少 1.2  應用服務和資料服務拆分  特點:App、DB、FileServer分別部署在獨立伺服器上。並且訪問請求量較少 1.3

Zookeeper技術分布式架構分布式技術分布式事務

cas 序列號 隔離性 googl 管理系 實現 分布式數據庫 備份 分布式文件系 一、分布式架構詳解 1、分布式發展歷程 1.1 單點集中式 特點:App、DB、FileServer都部署在一臺機器上。並且訪問請求量較少 1.2? 應用服務和數據服務拆分 ?特點:App、

分散式訊息系列RocketMQ的簡介與演進架構設計關鍵特性與應用場景

終身學習是程式設計師的必備能力,一群人在一起走得更遠,一起學習,共抗惰性。今天,我們來重點了解RocketMQ的簡介與演進、架構設計、關鍵特性及應用場景等內容。 本文內容大綱: RocketMQ的簡介與演進 RocketMQ的架構設計 RocketMQ的關鍵特性 RocketMQ的應用場景 01

新手入門零基礎理解大型分散式架構的演進歷史技術原理最佳實踐

本文引用了阿豪的微信公眾號文章分享,感謝原作者的分享。 1、前言 隨著社會的發展、網際網路技術的進步,以前的大型機服務端架構很顯然由於高成本、難維護等原因漸漸地變得不再那麼主流了,替代它的就是當下最火的網際網路分散式架構。 從若干年前大行其道的傳統大型機到如今的分散式架構,技術發展已經經歷了好幾個階段,

阿里P8架構師談分散式資料庫資料一致性的原理技術實現方案!

  背景 可用性(Availability)和一致性(Consistency)是分散式系統的基本問題,先有著名的CAP理論定義過分散式環境下二者不可兼得的關係,又有神祕的Paxos協議號稱是史上最簡單的分散式系統一致性演算法並獲得圖靈獎,再有開源產品ZooKeeper實現的Z

一文計算機視覺五大技術影象分類物件檢測目標跟蹤語義分割和例項分割

【 導讀】目前,計算機視覺是深度學習領域最熱門的研究領域之一。計算機視覺實際上是一個跨領域的交叉學科,包括電腦科學(圖形、演算法、理論、系統、體系結構),數學(資訊檢索、機器學習),工程學(機器人、語音、自然語言處理、影象處理),物理學(光學 ),生物學(神經科學)和心理學(認知科學)等等。許

架構設計分散式服務,庫表拆分模式

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent) # 一、服務間隔離 ## 1、分散

即時通訊音視訊開發(十)實時語音通訊的迴音消除技術

前言 即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。 系列文章 《即時通訊音視訊開發(八):常見的實時語音通訊編碼標準》 《即時通訊

【python】類class的屬性類資料屬性例項資料屬性特殊的類屬性屬性隱藏(二)

自上一篇python中的類,物件,方法,屬性初認識(一)認識了類的基本架構,下面繼續對類進行詳解,更加深入瞭解類的屬性、方法、訪問控制這三個方面的類容。 緊接上一篇類的例項: 一、資料屬性 1、在上面的person類中,“tall”、“name”、"age"和"weight "都被稱為類的資料屬性,

全面認識openstackOpenStack架構

OpenStack既是一個社群,也是一個專案和一個開源軟體,提供開放原始碼軟體,建立公共和私有云,它提供了一個部署雲的操作平臺或工具集,其宗旨在於:幫助組織執行為虛擬計算或儲存服務的雲,為公有云、私有云,也為大雲、小云提供可擴充套件的、靈活的雲端計算。 OpenS

分散式架構基礎:Java RMI

GitHub: github.com/jayknoxqu/r… RMI簡介 ​ Java RMI,即 遠端方法呼叫(Remote Method Invocation),一種用於實現遠端過程呼叫(RPC)(Remote procedure call)的Java API, 能直接傳輸序列化後的Java物件和分

Presto基於MPP架構的部署及使用技術-OLAP商業環境實戰

1 安裝配置 安裝presto後,需另建一個資料夾用於儲存日誌、本地元資料等的資料目錄。 config.properties :Presto 服務配置。 node.properties :環境變數配置

分散式架構基礎之Java RMI

RMI簡介 ​Java RMI或遠端方法呼叫是用於遠端過程呼叫的Java API,它可以直接傳輸序列化Java物件和分散式垃圾收集。它的實現依賴於Java虛擬機器(JVM),因此它只支援從一個JVM到另一個JVM的呼叫。   rmi的實現 (1) 直接使用Regist

大型網際網路必備架構技術高效能+分散式+開源框架+微服務

高效能、分散式架構 文末附免費學習資料!!! 分散式架構思維 大型網際網路架構演進過程 架構師應具備的分散式知識 主流分散式架構設計詳解 分散式協調和分流 Zookeeper分散式環境指揮官 Nginx高併發分流進階實戰 非同步與訊息中介軟體 RabbitMq

分散式快取技術redis學習系列(八)——JedisCluster原始碼解讀叢集初始化slot(槽)的分配值的存取

redis叢集環境,客戶端使用JedisCluster獲取連線並操作redis服務,上一篇 分散式快取技術redis學習系列(七)——spring整合jediscluster 簡單介紹了spring使用JedisCluster,這篇從JedisCluster原始