日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Paxos、Raft分布式一致性算法应用场景

發(fā)布時間:2024/4/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Paxos、Raft分布式一致性算法应用场景 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文是Paxos、Raft分布式一致性最佳實踐的第一篇文章,說明分布式一致性問題與分布式一致性算法的典型應用場景,幫助后面大家更好的理解Paxos、Raft等分布式一致性算法。

?

一、分布式一致性 (Consensus)

分布式一致性問題,簡單的說,就是在一個或多個進程提議了一個值應當是什么后,使系統(tǒng)中所有進程對這個值達成一致意見。

這樣的協(xié)定問題在分布式系統(tǒng)中很常用,比如:

  • 領導者選舉(leader election):進程對leader達成一致;
  • 互斥(mutual exclusion):進程對進入臨界區(qū)的進程達成一致;
  • 原子廣播(atomic broadcast):進程對消息傳遞(delivery)順序達成一致。

對于這些問題有一些特定的算法,但是,分布式一致性問題試圖探討這些問題的一個更一般的形式,如果能夠解決分布式一致性問題,則以上的問題都可以解決。

分布式一致性問題的定義如下圖所示:

分布式一致性問題

為了達成一致,每個進程都提出自己的提議(propose),最終通過分布式一致性算法,所有正確運行的進程決定(decide)相同的值。

分布式一致性實例

如果在一個不出現(xiàn)故障的系統(tǒng)中,很容易解決分布式一致性問題。但是實際分布式系統(tǒng)一般是基于消息傳遞的異步分布式系統(tǒng),進程可能會慢、被殺死或者重啟,消息可能會延遲、丟失、重復、亂序等。

在一個可能發(fā)生上述異常的分布式系統(tǒng)中如何就某個值達成一致,形成一致的決議,保證不論發(fā)生以上任何異常,都不會破壞決議的一致性,這些正是一致性算法要解決的問題。

二、分布式一致性算法典型應用場景

我們在分布式存儲系統(tǒng)中經(jīng)常使用多副本的方式實現(xiàn)容錯,每一份數(shù)據(jù)都保存多個副本,這樣部分副本的失效不會導致數(shù)據(jù)的丟失。每次更新操作都需要更新數(shù)據(jù)的所有副本,使多個副本的數(shù)據(jù)保持一致。那么問題來了,如何在一個可能出現(xiàn)各種故障的異步分布式系統(tǒng)中保證同一數(shù)據(jù)的多個副本的一致性 (Consistency) 呢?

以最簡單的兩副本為例,首先來看看傳統(tǒng)的主從同步方式。

傳統(tǒng)的主從同步

寫請求首先發(fā)送給主副本,主副本同步更新到其它副本后返回。這種方式可以保證副本之間數(shù)據(jù)的強一致性,寫成功返回之后從任意副本讀到的數(shù)據(jù)都是一致的。但是可用性很差,只要任意一個副本寫失敗,寫請求將執(zhí)行失敗。

主從同步的弱可用性

如果采用異步復制的方式,主副本寫成功后立即返回,然后在后臺異步的更新其它副本。

主從異步復制

寫請求首先發(fā)送給主副本,主副本寫成功后立即返回,然后異步的更新其它副本。這種方式可用性較好,只要主副本寫成功,寫請求就執(zhí)行成功。但是不能保證副本之間數(shù)據(jù)的強一致性,寫成功返回之后從各個副本讀取到的數(shù)據(jù)不保證一致,只有主副本上是最新的數(shù)據(jù),其它副本上的數(shù)據(jù)落后,只提供最終一致性。

異步復制失敗

如果出現(xiàn)斷網(wǎng)導致后臺異步復制失敗,則主副本和其它副本將長時間不一致,其它副本上的數(shù)據(jù)一直無法更新,直到網(wǎng)絡重新連通。

主副本寫成功后立即宕機

如果主副本在寫請求成功返回之后和更新其它副本之前宕機失效,則會造成成功寫入的數(shù)據(jù)丟失,一致性被破壞。

熟悉Oracle的朋友應該對上述同步方式非常熟悉,上述同步和異步復制方式分別對應Oracle Data Guard的一種數(shù)據(jù)保護模式。

同步復制為最高保護模式 (Maximum Protection),異步復制為最高性能模式 (Maximum Performance),還有一種最高可用性模式 (Maximum Availability) 介于兩者之間,在正常情況下,它和最高保護模式一樣,但一旦同步出現(xiàn)故障,立即切換成最高性能模式。

傳統(tǒng)的主從同步無法同時保證數(shù)據(jù)的一致性和可用性,此問題是典型的分布式系統(tǒng)中一致性和可用性不可兼得的例子,分布式系統(tǒng)中著名的CAP理論從理論上證明了這個問題。

而Paxos、Raft等分布式一致性算法則可在一致性和可用性之間取得很好的平衡,在保證一定的可用性的同時,能夠對外提供強一致性,因此Paxos、Raft等分布式一致性算法被廣泛的用于管理副本的一致性,提供高可用性。

三、CAP理論

CAP理論是分布式系統(tǒng)、特別是分布式存儲領域中被討論的最多的理論。其中C代表一致性 (Consistency),A代表可用性 (Availability),P代表分區(qū)容錯性 (Partition tolerance)。CAP理論告訴我們C、A、P三者不能同時滿足,最多只能滿足其中兩個。

CAP理論

  • 一致性 (Consistency):一個寫操作返回成功,那么之后的讀請求都必須讀到這個新數(shù)據(jù);如果返回失敗,那么所有讀操作都不能讀到這個數(shù)據(jù)。所有節(jié)點訪問同一份最新的數(shù)據(jù)。
  • 可用性 (Availability):對數(shù)據(jù)更新具備高可用性,請求能夠及時處理,不會一直等待,即使出現(xiàn)節(jié)點失效。
  • 分區(qū)容錯性 (Partition tolerance):能容忍網(wǎng)絡分區(qū),在網(wǎng)絡斷開的情況下,被分隔的節(jié)點仍能正常對外提供服務。

理解CAP理論最簡單的方式是想象兩個副本處于分區(qū)兩側,即兩個副本之間的網(wǎng)絡斷開,不能通信。

  • 如果允許其中一個副本更新,則會導致數(shù)據(jù)不一致,即喪失了C性質。
  • 如果為了保證一致性,將分區(qū)某一側的副本設置為不可用,那么又喪失了A性質。
  • 除非兩個副本可以互相通信,才能既保證C又保證A,這又會導致喪失P性質。

一般來說使用網(wǎng)絡通信的分布式系統(tǒng),無法舍棄P性質,那么就只能在一致性和可用性上做一個艱難的選擇。

CAP理論的表述很好地服務了它的目的,開闊了分布式系統(tǒng)設計者的思路,在多樣化的取舍方案下設計出多樣化的系統(tǒng)。在過去的十幾年里確實涌現(xiàn)了不計其數(shù)的新系統(tǒng),也隨之在一致性和可用性的相對關系上產生了相當多的爭論。

既然在分布式系統(tǒng)中一致性和可用性只能選一個。那Paxos、Raft等分布式一致性算法是如何做到在保證一定的可用性的同時,對外提供強一致性呢。

在CAP理論提出十二年之后,其作者又出來辟謠。“三選二”的公式一直存在著誤導性,它會過分簡單化各性質之間的相互關系:

  • 首先,由于分區(qū)很少發(fā)生,那么在系統(tǒng)不存在分區(qū)的情況下沒什么理由犧牲C或A。
  • 其次,C與A之間的取舍可以在同一系統(tǒng)內以非常細小的粒度反復發(fā)生,而每一次的決策可能因為具體的操作,乃至因為牽涉到特定的數(shù)據(jù)或用戶而有所不同。
  • 最后,這三種性質都可以在程度上衡量,并不是非黑即白的有或無。可用性顯然是在0%到100%之間連續(xù)變化的,一致性分很多級別,連分區(qū)也可以細分為不同含義,如系統(tǒng)內的不同部分對于是否存在分區(qū)可以有不一樣的認知。

所以一致性和可用性并不是水火不容,非此即彼的。Paxos、Raft等分布式一致性算法就是在一致性和可用性之間做到了很好的平衡的見證。

四、多副本狀態(tài)機

將多副本管理的模型抽象出來,可得到一個通用的模型:多副本狀態(tài)機 (Replicated State Machine) 。

多副本狀態(tài)機是指多臺機器具有完全相同的狀態(tài),并且運行完全相同的確定性狀態(tài)機。

通過使用這樣的狀態(tài)機,可以解決很多分布式系統(tǒng)中的容錯問題。因為多副本狀態(tài)機通常可以容忍半數(shù)節(jié)點故障,且所有正常運行的副本節(jié)點狀態(tài)都完全一致,所以可以使用多副本狀態(tài)機來實現(xiàn)需要避免單點故障的組件。

高可用"單點"的集中式架構

多副本狀態(tài)機在分布式系統(tǒng)中被用于解決各種容錯問題。如集中式的選主或是互斥算法中的協(xié)調者 (Coordinator)。集中式的領導者或互斥算法邏輯簡單,但最大的問題是協(xié)調者的單點故障問題,通過采用多副本狀態(tài)機來實現(xiàn)協(xié)調者實現(xiàn)了高可用的“單點”,回避了單點故障。

GFS,HDFS,RAMCloud等典型地使用一個獨立的多副本狀態(tài)機來管理領導者選舉與保存集群配置信息,以備節(jié)點宕機后信息能夠保持。

Chubby與ZooKeeper以及Boxwood等都是使用多副本狀態(tài)機的例子。

多副本狀態(tài)機的每個副本上都保存有完全相同的操作日志,保證所有狀態(tài)機副本按照相同的順序執(zhí)行相同的操作,這樣由于狀態(tài)機是確定性的,則會得到相同的狀態(tài)。

多副本狀態(tài)機結構

每個服務器在日志中保存一系列命令,所有的狀態(tài)機副本按照同樣的順序執(zhí)行,分布式一致性算法管理著來自客戶端的包含狀態(tài)機命令的日志復制,每條日志以同樣的順序保存同樣的命令,因此每個狀態(tài)機執(zhí)行同樣的命令序列。因為狀態(tài)機是確定的,每個都計算出同樣的狀態(tài)與同樣的輸出。

保證復制到各個服務器上的日志的一致性正是分布式一致性算法的工作。一致性算法保證所有狀態(tài)機副本上的操作日志具有完全相同的順序,如果狀態(tài)機的任何一個副本在本地狀態(tài)機上執(zhí)行了一個操作,則絕對不會有別的副本在操作序列相同位置執(zhí)行一個不同的操作。

服務器上的一致性模塊,接收來自客戶端的命令,并且添加到他們的日志中。它與其它服務器的一致性模塊通訊,以確保每個日志最終以同樣的順序保存同樣的請求,即使有些服務器失敗。一旦命令被適當?shù)貜椭?#xff0c;每臺服務器的狀態(tài)機以日志的順序執(zhí)行,將輸出返回給客戶端。結果多臺服務器就像來自單個高度一致的高可用狀態(tài)機。

?

鏈接:https://zhuanlan.zhihu.com/p/31727291

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Paxos、Raft分布式一致性算法应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。