1. 程式人生 > >分散式基礎通訊協議:paxos,totem和gossip

分散式基礎通訊協議:paxos,totem和gossip

背景:

在分散式中,最難解決的一個問題就是多個節點間資料同步問題。為了解決這樣的問題,湧現出了各種奇思妙想。只有在解決了如何進行資訊同步的基礎之上才衍生出形形色色的應用。這裡開始介紹幾種分散式通訊協議。

簡單即有效——totem協議:

totem協議也許你還比較陌生,但是corosync就是totem協議的一個開源實現。比較火的HA軟體pacemaker就是基於corosync來提供各種服務的。說起totem協議,最簡單的形象就是,他將多個節點組成一個令牌環。多個節點手拉手形成一個圈,大家依次的傳遞token。只有獲取到token的節點才有傳送訊息的權利。簡單有效的解決了在分散式系統中各個節點的同步問題,因為只有一個節點會在一個時刻傳送訊息,不會出現衝突。當然,如果有節點發生意外時,令牌環就會斷掉,此時大家不能夠通訊,而是重新組建出一個新的令牌環。

進化的二段提交——paxos協議:

說起paxos,需要稍微提提二段提交。簡單來說,二階段提交就是1.一個節點詢問其他節點,我是不是可以進行訊息提交。2.如果收到所有人的同意,則告訴大家,開始提交吧。這個協議在實際中並不能很好的解決分散式中資訊同步問題。例如只要有節點失效,就會發生得不到所有人同意的結果,在超時後,這一次提交失敗,等一系列問題。但是paxos在對二段提交進行了優化後,得到了一個比較好的解決辦法。 paxos協議引入了多數派,以及訊息編號的概念。在1準備時,詢問2/n+1的參與者,要求他們保證不會接受小於編號n的提交。 2.如果得到了2/n+1的回覆,則可以開始告訴2/n+1的參與者進行訊息的提交。 可以明顯的看出,這就是對二段提交的一個優化版。就是這麼一個比較巧妙的思想,解決了一些二階段提交帶來的問題。 順便說一句,這個協議的作者Leslie Lamport。他剛剛獲得2013年圖靈獎。

奇思妙想——gossip協議:

gossip協議是一個神奇的協議。它常用於P2P的通訊協議,這個協議就是模擬人類中傳播謠言的行為而來。簡單的描述下這個協議,首先要傳播謠言就要有種子節點。種子節點每秒都會隨機向其他節點發送自己所擁有的節點列表,以及需要傳播的訊息。任何新加入的節點,就在這種傳播方式下很快地被全網所知道。這個協議的神奇就在於它從設計開始就沒想到資訊一定要傳遞給所有的節點,但是隨著時間的增長,在最終的某一時刻,全網會得到相同的資訊。當然這個時刻可能僅僅存在於理論,永遠不可達。

基礎協議的對比:

簡單的介紹了這幾種協議,下面我們來看看他們的對比:
基礎協議 paxos totem gossip
資料同步 第一階段:
  proposer 選擇一個提案編號 n 並將 prepare 請求傳送給acceptors 中的一個多數派;acceptor 收到 prepare 訊息後,如果提案的編號大於它已經回覆的所有 prepare 訊息,則 acceptor 將自己上次的批准回覆給 proposer並承諾不再批准小於 n 的提案。
第二階段:
當一個 proposor 收到了多數 acceptors 對 prepare 的回覆後,就進入批准階段。它要向回覆 prepare 請求的acceptors 傳送 accept 請求,包括編號 n 和根據 P2c 決定的 value(如果根據 P2c 沒有決定 value,那麼它可以自由決定 value)。在不違背自己向其他 proposer 的承諾的前提下,acceptor 收到 accept 請求後即批准這個請求。
1.通訊方式。
當叢集有節點要發起通訊時,需要等待token。當拿到token後,先廣播這次需要傳送的資料,然後傳遞token來確認所有人都接收到訊息。
如果確認成功,釋放token。

2.節點的加入和退出。
當叢集中有節點加入時,加入的節點廣播一個加入資訊,所有人都開始廣播自己的資訊,當所有人都獲得同伴資訊,開始由id最小的人提交一個token,交由所有節點確認。
如果都確認後,則節點正式加入,開始正常執行。
當叢集有節點退出時,由於令牌環斷鏈,觸發token超時,則同樣開始廣播資訊,然後由最小id提交token,經過確認後恢復正常。
gossip協議有多種實現,這裡說一個例子當節點啟動時,讀配置檔案,然後向一個seed傳送資訊,進行資訊同步,然後開始沒秒都隨機選擇一個seed節點來同步資訊

1、隨機取一個當前活著的節點,並向它傳送同步請求
2、向隨機一臺不可達的機器傳送同步請求
3、如果第一步中所選擇的節點不是seed,或者當前活著的節點數少於seed數,則向隨意一臺seed傳送同步請求
資料一致性  強一致性 強一致性 最終一致性
相關應用 zookeeper corosync Cassandra
優點 可以很好的解決通訊一致性問題,在叢集規模上比corosync要略大一些 簡單方便,按照協議實現後就可以直接使用 協議本身簡單,組網規模幾乎不受限制,通訊效能好
缺點 理論性太強,如果要實際使用,還是需要進行優化 使用了廣播包,對於跨域傳送有影響,而且令牌環本身帶來的問題使得組網規模不大 不能提供傳統的資料一致性服務,在傳輸中佔用較多的網路流量


相關推薦

分散式基礎通訊協議:paxos,totemgossip

背景: 在分散式中,最難解決的一個問題就是多個節點間資料同步問題。為了解決這樣的問題,湧現出了各種奇思妙想。只有在解決了如何進行資訊同步的基礎之上才衍生出形形色色的應用。這裡開始介紹幾種分散式通訊協議。 簡單即有效——totem協議: totem協議也許你還比較陌生,但是corosync就是to

趣談網路協議-通訊協議綜述-DHCPPXE

動態主機配置協議HDCP(Dynamic Host Configuration Protocol)  DHCP協議的請求流程 DHCP的工作流程1.客戶端會以廣播的方式傳送一個請求2.伺服器收到資料報之後也會以廣播的方式迴應,迴應的資料包裡面包含了要分配的IP3.客戶端以廣播的

Kafka 溫故(三):Kafka的內部機制深入(持久化,分散式通訊協議)

一.Kafka的持久化 1.資料持久化:     發現線性的訪問磁碟(即:按順序的訪問磁碟),很多時候比隨機的記憶體訪問快得多,而且有利於持久化;     傳統的使用記憶體做為磁碟的快取     Kafka直接將資料寫

01分散式基礎(二)-分散式通訊協議分析

分散式通訊協議分析 網路協議: TCP/IP 和UDP/IP TCP/IP TCP的五層模型 OSI的七層模型 3次握手協議 4次揮手協議 TCP通訊原理 分散式Java應用

01分散式基礎(四)-分散式通訊協議-http

分散式通訊協議-http HTTP協議的概述 報文 狀態碼 快取 HTTPS 第一步, 使用對稱加解密 第二步,金鑰是公開的,所有的客戶端都可以拿到 第三步 針對不同的客戶端使用不同的金鑰 第四步:使用非對

分散式架構基礎-TCP/IP 通訊協議

一個http請求,在整個網路中的請求過程 當應用程式用TCP傳送資料時,資料被送入協議棧中,然後逐個通過每一層直到被當作一串位元流送入網路,其中每一層對收到的資料都要增加一些首部資訊。 當目的主機收到一個乙太網資料幀時,資料就開始從協議棧中由底向上升,同

# 2017-2018-1 20155318 《信息安全系統設計基礎》 實驗五 通訊協議設計

應用程序 .cn 代碼 下使用 申請 只讀 genrsa 關閉 accept 2017-2018-1 20155318 《信息安全系統設計基礎》 實驗五 通訊協議設計 Linux下OpenSSL的安裝與測試 任務要求:在Ubuntu中完成 http://www.cnblo

2017-2018-1 20155317《信息安全系統設計基礎》 實驗五 通訊協議設計

pthread set 申請 gac process 在一起 href main fun 2017-2018-1 20155317《信息安全系統設計基礎》 實驗五 通訊協議設計 實驗要求 任務 安裝OpenSSL環境,並編寫測試代碼驗證無誤研究OpenSSL算法,測試

20155325 2017-2018 1 《信息安全系統設計基礎》實驗五 通訊協議設計

inux tps rime 影響 收信 alt 完整 man 輸出 實驗五 通訊協議設計-1 實驗要求 在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作業 提交運行結果截圖 實驗截圖 碼雲鏈接 link

Raft算法Gossip協議

壓力 清除 獲取 定時 加入集群 特點 images 發送 兩種 簡單介紹下集群數據同步,集群監控用到的兩種常見算法。 Raft算法 raft 集群中的每個節點都可以根據集群運行的情況在三種狀態間切換:follower, candidate 與 leader。leade

深入剖析 Web 伺服器與 PHP 應用之間的通訊機制 - 掌握 CGI FastCGI 協議的執行原理

本文首發於 深入剖析 Web 伺服器與 PHP 應用之間的通訊機制 - 掌握 CGI 和 FastCGI 協議的執行原理,轉載請註明出處! 身為一名使用 PHP 語言開發後端服務的程式猿,我們每天都和 PHP 以及 Web 伺服器產生無數次的親密接觸。得益於它們,我們才能

詳細剖析I2CSPI通訊協議的區別

原文連結:http://m.elecfans.com/article/610220.html 1. 概述I2C與SPI協議 IIC vs SPI現今,在低端數字通訊應用領域,我們隨處可見IIC (Inter-Integrated Circuit) 和 SPI (Serial

01分散式基礎(三)-分散式通訊-序列化

分散式通訊-序列化 java序列化機制Serialize介面 java本身的序列化機制存在的問題 序列化和反序列化的概念 怎麼去實現一個序列化操作 擴充套件 serialVersionUID的作用 靜態

分散式一致性協議Paxos

轉自:https://blog.csdn.net/qq_35440678/article/details/78080431 什麼是paxos協議? Paxos用於解決分散式系統中一致性問題。分散式一致性演算法(Consensus Algorithm)是一個分散式計算領域的基礎性

day27 網路通訊協議, tcpudp, 緩衝區, subprocess

  1. 網際網路協議: 本質是一系列的網路協議   連線兩臺計算機之間的internet實際上是一系列統一的標準, 這些標準稱為網際網路協議, 網際網路的本質也是一系列協議, 總稱"網際網路協議" (Internet Protocol Suite

01分散式基礎(六)-分散式通訊框架-webservice

分散式通訊框架-webservice 什麼是webservice 為什麼要使用webservice 什麼時候要去使用webservice webservice中的一些概念 WSDL(web service definition lang

01分散式基礎(五)-分散式通訊框架-rmi

分散式通訊框架-RMI 回顧 分散式通訊框架-RMI RPC 什麼是RPC 一個RPC框架包含的要素 RMI的概述 如何實現一個RMI程式 如果自己要去實現一個RMI

20165328 20165319《資訊安全系統設計基礎》實驗五通訊協議設計

任務一 •在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作業 •提交執行結果截圖 瞭解學習openssl: OpenSSL簡介 OpenSSL是一個SSL協議的開源實現,採用C語言作為開發語言,具備了跨平

20165304資訊安全系統設計基礎》實驗五 通訊協議設計

資訊安全系統設計基礎》實驗五 通訊協議設計 實驗要求: 任務一:Linux下OpenSSL的安裝與使用 1、基於Socket實現TCP通訊,一人實現伺服器,一人實現客戶端 2、研究OpenSSL演算法,測試對稱演算法中的AES,非對稱演算法中的RSA,Hash演算法中的MD5 3、選用合適的演算法,基於混

20165301 20165304 20165314《資訊安全系統設計基礎》實驗五通訊協議設計

任務一 •在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作業 •提交執行結果截圖 瞭解學習openssl: OpenSSL簡介 OpenSSL是一個SSL協議的開源實現,採用C語言作為開發語言,具備了跨平臺的能力,支援Unix/Linux