chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

解決分布式系統(tǒng)“幽靈復現(xiàn)”問題的四大方案

454398 ? 來源:機器之一 ? 作者:阿里技術 ? 2020-10-13 16:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

“幽靈復現(xiàn)”的問題本質屬于分布式系統(tǒng)的“第三態(tài)”問題,即在網(wǎng)絡系統(tǒng)里面,對于一個請求都有三種返回結果:成功,失敗,超時未知。對于超時未知,服務端對請求命令的處理結果可以是成功或者失敗,但必須是兩者中之一,不能出現(xiàn)前后不一致情況。

1、“幽靈復現(xiàn)”問題

我們知道,當前業(yè)界有很多分布式一致性復制協(xié)議,比如Paxos,Raft,Zab及Paxos的變種協(xié)議,被廣泛用于實現(xiàn)高可用的數(shù)據(jù)一致性。Paxos組通常有3或5個互為冗余的節(jié)點組成,它允許在少數(shù)派節(jié)點發(fā)生停機故障的情況下,依然能繼續(xù)提供服務,并且保證數(shù)據(jù)一致性。作為一種優(yōu)化,協(xié)議一般會在節(jié)點之間選舉出一個Leader專門負責發(fā)起Proposal,Leader的存在,避免了常態(tài)下并行提議的干擾,這對于提高Proposal處理的效率有很大提升。

但是考慮在一些極端異常,比如網(wǎng)絡隔離,機器故障等情況下,Leader可能會經過多次切換和數(shù)據(jù)恢復,使用Paxos協(xié)議處理日志的備份與恢復時,可以保證確認形成多數(shù)派的日志不丟失,但是無法避免一種被稱為“幽靈復現(xiàn)”的現(xiàn)象??紤]下面一種情況:

如上表所示,在第一輪中,A成為指定Leader,發(fā)出1-10的日志,不過后面的6-10沒有形成多數(shù)派,隨機宕機。隨后,第二輪中,B成為指定Leader,繼續(xù)發(fā)出6-20的日志(B沒有看到有6-10日志的存在),這次,6以及20兩條日志形成了多數(shù)派。隨機再次發(fā)生切換,A回來了,從多數(shù)派拿到的最大LogId為20,因此決定補空洞,事實上,這次很大可能性是要從6開始,一直驗證到20。我們逐個看下會發(fā)生什么:

針對Index 6的日志,A重新走一輪basic paxos就會發(fā)現(xiàn)更大proposeid形成決議的6,從而放棄本地的日志6,接受已經多數(shù)派認可的日志;

針對Index 7到Index 10,因為多數(shù)派沒有形成有效落盤,因此A隨機以本地日志發(fā)起提議并形成多數(shù)派;

針對Index 11到Index 19,因為均沒有形成有效落盤數(shù)據(jù),因此,以noop形成補空洞;

針對Index 20,這個最簡單,接受已經多數(shù)派認可的日志;

在上面的四類情況分析中,1,3,4的問題不大。主要在場景2,相當于在第二輪并不存在的7~10,然后在第三列又重新出現(xiàn)了。按照Oceanbase的說法,在數(shù)據(jù)庫日志同步場景的情況,這個問題是不可接受的,一個簡單的例子就是轉賬場景,用戶轉賬時如果返回結果超時,那么往往會查詢一下轉賬是否成功,來決定是否重試一下。如果第一次查詢轉賬結果時,發(fā)現(xiàn)未生效而重試,而轉賬事務日志作為幽靈復現(xiàn)日志重新出現(xiàn)的話,就造成了用戶重復轉賬。

2、基于 Multi-Paxos 解決“幽靈復現(xiàn)”問題

為了處理“幽靈復現(xiàn)”問題,基于Multi-Paxos實現(xiàn)的一致性系統(tǒng),可以在每條日志內容保存一個epochID,指定Proposer在生成這條日志時以當前的ProposalID作為epochID。按logID順序回放日志時,因為leader在開始服務之前一定會寫一條StartWorking日志,所以如果出現(xiàn)epochID相對前一條日志變小的情況,說明這是一條“幽靈復現(xiàn)”日志,要忽略掉這條日志(說明一下,我認這里順序是先補空洞,然后寫StartWorkingID,然后提供服務)。

以上個例子來說明,在Round 3,A作為leader啟動時,需要日志回放重確認,index 1~5 的日志不用說的,epochID為1,然后進入epochID為2階段,index 6 會確認為epochID為2的StartWorking日志,然后就是index 7~10,因為這個是epochID為1的日志,比上一條日志epochID小,會被忽略掉。而Index 11~19的日志,EpochID應該是要沿襲自己作為Leader看到的上上一輪StartWorkingID(當然,ProposeID還是要維持在3的),或者因為是noop日志,可以特殊化處理,即這部分日志不參與epochID的大小比較。然后index 20日志也會被重新確認。最后,在index 21寫入StartWorking日志,并且被大多數(shù)確認后,A作為leader開始接收請求。

3、基于Raft解決“幽靈復現(xiàn)”問題

3.1 關于Raft日志恢復

首先,我們聊一下Raft的日志恢復,在 Raft 中,每次選舉出來的Leader一定包含已經Committed的數(shù)據(jù)(抽屜原理,選舉出來的Leader是多數(shù)中數(shù)據(jù)最新的,一定包含已經在多數(shù)節(jié)點上Commit的數(shù)據(jù)),新的Leader將會覆蓋其他節(jié)點上不一致的數(shù)據(jù)。雖然新選舉出來的Leader一定包括上一個Term的Leader已經Committed的Log Entry,但是可能也包含上一個Term的Leader未Committed的Log Entry。這部分Log Entry需要轉變?yōu)镃ommitted,相對比較麻煩,需要考慮Leader多次切換且未完成Log Recovery,需要保證最終提案是一致的,確定的,不然就會產生所謂的幽靈復現(xiàn)問題。

因此,Raft中增加了一個約束:對于之前Term的未Committed數(shù)據(jù),修復到多數(shù)節(jié)點,且在新的Term下至少有一條新的Log Entry被復制或修復到多數(shù)節(jié)點之后,才能認為之前未Committed的Log Entry轉為Committed。

為了將上一個Term未Committed的Log Entry轉為Committed,Raft 的解決方案如下:

Raft算法要求Leader當選后立即追加一條Noop的特殊內部日志,并立即同步到其它節(jié)點,實現(xiàn)前面未Committed日志全部隱式提交。

從而保證了兩個事情:

通過最大Commit原則保證不會丟數(shù)據(jù),即是保證所有的已經Committed的Log Entry不會丟;

保證不會讀到未Committed的數(shù)據(jù),因為只有Noop被大多數(shù)節(jié)點同意并提交了之后(這樣可以連帶往期日志一起同步),服務才會對外正常工作;Noop日志本身也是一個分界線,Noop之前的Log Entry被提交,之后的Log Entry將會被丟棄。

3.2 Raft解決“幽靈復現(xiàn)”問題

針對第一小節(jié)的場景,Raft中是不會出現(xiàn)第三輪A當選leader的情況,首先對于選舉,候選人對比的是最后一條日志的任期號(lastLogTerm)和日志的長度(lastLogIndex)。B、C的lastLogTerm(t2)和lastLogIndex(20)都比A的lastLogTerm(t1)和lastLogIndex(10)大,因此leader只能出現(xiàn)在B、C之內。假設C成為leader后,Leader運行過程中會進行副本的修復,對于A來說,就是從log index為6的位置開始,C將會把自己的index為6及以后的log entry復制給A,因此A原來的index 6-10的日志刪除,并保持與C一致。最后C會向follower發(fā)送noop的log entry,如果被大多數(shù)都接收提交后,才開始正常工作,因此不會出現(xiàn)index 7-10能讀到值的情況。

這里考慮另一個更通用的幽靈復現(xiàn)場景??紤]存在以下日志場景:

1)Round 1,A節(jié)點為leader,Log entry 5,6內容還沒有commit,A節(jié)點發(fā)生宕機。這個時候client 是查詢不到 Log entry 5,6里面的內容。

2)Round 2,B成為Leader, B中Log entry 3, 4內容復制到C中, 并且在B為主的期間內沒有寫入任何內容。

3)Round 3,A 恢復并且B、C發(fā)生重啟,A又重新選為leader, 那么Log entry 5, 6內容又被復制到B和C中,這個時候client再查詢就查詢到Log entry 5, 6 里面的內容了。

Raft里面加入了新Leader 必須寫入一條當前Term的Log Entry 就可以解決這個問題, 其實和MultiPaxos提到的寫入一個StartWorking 日志是一樣的做法, 當B成為Leader后,會寫入一個Term 3的noop日志,這里解決了上面所說的兩個問題:

Term 3的noop日志commit前,B的index 3,4的日志內容一定會先復制到C中,實現(xiàn)了最大commit原則,保證不會丟數(shù)據(jù),已經 commit 的 log entry 不會丟。

就算A節(jié)點恢復過來, 由于A的lastLogTerm比B和C都小,也無法成了Leader, 那么A中未完成的commit只是會被drop,所以后續(xù)的讀也就不會讀到Log Entry 5,6里面的內容。

4、基于Zab解決“幽靈復現(xiàn)”問題

4.1 關于Zab的日志恢復

Zab在工作時分為原子廣播和崩潰恢復兩個階段,原子廣播工作過程也可以類比raft提交一次事務的過程。

崩潰恢復又可以細分為Leader選舉和數(shù)據(jù)同步兩個階段。

早期的Zab協(xié)議選舉出來的Leader滿足下面的條件:

a) 新選舉的Leader節(jié)點含有本輪次所有競選者最大的zxid,也可以簡單認為Leader擁有最新數(shù)據(jù)。該保證最大程度確保Leader具有最新數(shù)據(jù)。

b) 競選Leader過程中進行比較的zxid,是基于每個競選者已經commited的數(shù)據(jù)生成。

zxid是64位高32位是epoch編號,每經過一次Leader選舉產生一個新的leader,新的leader會將epoch號+1,低32位是消息計數(shù)器,每接收到一條消息這個值+1,新leader選舉后這個值重置為0。這樣設計的好處在于老的leader掛了以后重啟,它不會被選舉為leader,因此此時它的zxid肯定小于當前新的leader。當老的leader作為follower接入新的leader后,新的leader會讓它將所有的擁有舊的epoch號的未被commit的proposal清除。

選舉出leader后,進入日志恢復階段,會根據(jù)每個Follower節(jié)點發(fā)送過來各自的zxid,決定給每個Follower發(fā)送哪些數(shù)據(jù),讓Follower去追平數(shù)據(jù),從而滿足最大commit原則,保證已commit的數(shù)據(jù)都會復制給Follower,每個Follower追平數(shù)據(jù)后均會給Leader進行ACK,當Leader收到過半Follower的ACK后,此時Leader開始工作,整個zab協(xié)議也就可以進入原子廣播階段。

4.2 Zab解決“幽靈復現(xiàn)”問題

對于第 1 節(jié)的場景,根據(jù)ZAB的選舉階段的機制保證,每次選舉后epoch均會+1,并作為下一輪次zxid的最高32位。所以,假設Round 1階段,A,B,C的EpochId是1,那么接下來的在Round 2階段,EpochId為2,所有基于這個Epoch產生的zxid一定大于A上所有的zxid。于是,在Round 3,由于B, C的zxid均大于A,所以A是不會被選為Leader的。A作為Follower加入后,其上的數(shù)據(jù)會被新Leader上的數(shù)據(jù)覆蓋掉??梢姡瑢τ谇闆r一,zab是可以避免的。

對于 3.2 節(jié)的場景,在Round 2,B選為leader后,并未產生任何事務。在Round 3選舉,由于A,B,C的最新日志沒變,所以A的最后一條日志zxid比B和C的大,因此A會選為leader,A將數(shù)據(jù)復制給B,C后,就會出現(xiàn)”幽靈復現(xiàn)“現(xiàn)象的。

為了解決“幽靈復現(xiàn)”問題,最新Zab協(xié)議中,每次leader選舉完成后,都會保存一個本地文件,用來記錄當前EpochId(記為CurrentEpoch),在選舉時,會先讀取CurrentEpoch并加入到選票中,發(fā)送給其他候選人,候選人如果發(fā)現(xiàn)CurrentEpoch比自己的小,就會忽略此選票,如果發(fā)現(xiàn)CurrentEpoch比自己的大,就會選擇此選票,如果相等則比較zxid。因此,對于此問題,Round 1中,A,B,C的CurrentEpoch為2;Round 2,A的CurrentEpoch為2,B,C的CurrentEpoch為3;Round 3,由于B,C的CurrentEpoch比A的大,所以A無法成為leader。

5、 進一步探討

在阿里云的女媧一致性系統(tǒng)里面,做法也是類似于Raft與Zab,確保能夠制造幽靈復現(xiàn)的角色無法在新的一輪選舉為leader,從而避免幽靈日志再次出現(xiàn)。從服務端來看“幽靈復現(xiàn)”問題,就是在failover情況下,新的leader不清楚當前的committed index,也就是分不清log entry是committed狀態(tài)還是未committed狀態(tài),所以需要通過一定的日志恢復手段,保證已經提交的日志不會被丟掉(最大 commit 原則),并且通過一個分界線(如MultiPaxos的StartWorking,Raft的noop,Zab的CurrentEpoch)來決定日志將會被commit還是被drop,從而避免模糊不一的狀態(tài)。“幽靈復現(xiàn)”的問題本質屬于分布式系統(tǒng)的“第三態(tài)”問題,即在網(wǎng)絡系統(tǒng)里面, 對于一個請求都有三種返回結果:成功,失敗,超時未知。對于超時未知,服務端對請求命令的處理結果可以是成功或者失敗,但必須是兩者中之一,不能出現(xiàn)前后不一致情況。在客戶端中,請求收到超時,那么客戶端是不知道當前底層是處于什么狀況的,成功或失敗都不清楚,所以一般客戶端的做法是重試,那么底層apply的業(yè)務邏輯需要保證冪等性,不然重試會導致數(shù)據(jù)不一致。
編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    分布式光伏發(fā)電接入配電網(wǎng)技術規(guī)定中關于“可”裝置的內容解析

    隨著分布式光伏發(fā)電裝機規(guī)模的快速增長,其對配電網(wǎng)安全穩(wěn)定運行的影響日益凸顯。《分布式光伏發(fā)電接入配電網(wǎng)技術規(guī)定》(GB/T 38946-2020)作為核心國標,首次系統(tǒng)性明確了“可”
    的頭像 發(fā)表于 02-06 16:39 ?2551次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)電接入配電網(wǎng)技術規(guī)定中關于“<b class='flag-5'>四</b>可”裝置的內容解析

    分布式能源管理物聯(lián)網(wǎng)解決方案

    ,構建全鏈路能源數(shù)據(jù)采集與管控體系,實現(xiàn)分布式能源的精細化管理與智能化運維。 方案架構 終端設備層:現(xiàn)場設備包括光伏逆變器、智能電表、電池管理系統(tǒng)(BMS)等各類能源設備,支持IEC61850、IEC101/103/104、DL
    的頭像 發(fā)表于 01-21 11:39 ?331次閱讀
    <b class='flag-5'>分布式</b>能源管理物聯(lián)網(wǎng)解決<b class='flag-5'>方案</b>

    分布式光伏”可“,究竟是什么?

    分布式光伏發(fā)電開發(fā)建設管理辦法(征求意見稿)》第六章運行管理第三十三條【調度運行】中也提到了“可”問題。 程瑜 18 7 0211 2087 “可”的相關政策有哪些? A:據(jù)不完全統(tǒng)計,目前,江蘇、陜西、江西、河南、安徽、
    的頭像 發(fā)表于 01-13 16:26 ?235次閱讀
    <b class='flag-5'>分布式</b>光伏”<b class='flag-5'>四</b>可“,究竟是什么?

    分布式光伏“可”裝置:可觀、可測、可控、可調的技術內核全解析

    分布式光伏“可觀、可測、可控、可調”可裝置,精準切中并網(wǎng)核心痛點,通過全維度功能構建,成為推動分布式光伏從“被動并網(wǎng)”向“主動協(xié)同”轉型的關鍵支撐。
    的頭像 發(fā)表于 11-24 11:20 ?536次閱讀
    <b class='flag-5'>分布式</b>光伏“<b class='flag-5'>四</b>可”裝置:可觀、可測、可控、可調的技術內核全解析

    【節(jié)能學院】Acrel-1000DP分布式光伏監(jiān)控系統(tǒng)在奉賢平高食品 4.4MW 分布式光伏中應用

    摘要:在“雙碳”和新型電力系統(tǒng)建設背景下,分布式光伏接入比例不斷提高,對配電網(wǎng)電壓、調度運行及調峰等環(huán)節(jié)造成強烈沖擊。本文設計包含平臺層、設備層二層架構體系的分布式光伏管控平臺,以及小容量工商業(yè)
    的頭像 發(fā)表于 08-23 08:04 ?3516次閱讀
    【節(jié)能學院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏監(jiān)控<b class='flag-5'>系統(tǒng)</b>在奉賢平高食品 4.4MW <b class='flag-5'>分布式</b>光伏中應用

    分布式光伏發(fā)電監(jiān)測系統(tǒng)技術方案

    分布式光伏發(fā)電監(jiān)測系統(tǒng)技術方案 柏峰【BF-GFQX】一、系統(tǒng)目標 :分布式光伏發(fā)電監(jiān)測系統(tǒng)旨在
    的頭像 發(fā)表于 08-22 10:51 ?3212次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)電監(jiān)測<b class='flag-5'>系統(tǒng)</b>技術<b class='flag-5'>方案</b>

    分布式光伏總出問題?安科瑞分布式光伏監(jiān)控系統(tǒng)來“救場”

    一、分布式光伏的痛點大揭秘 在 “雙碳” 目標的大力推動下,分布式光伏作為綠色能源領域的重要力量,正以前所未有的速度蓬勃發(fā)展,越來越多的企業(yè)和家庭選擇安裝分布式光伏系統(tǒng)。然而,隨著
    的頭像 發(fā)表于 07-16 16:50 ?845次閱讀
    <b class='flag-5'>分布式</b>光伏總出問題?安科瑞<b class='flag-5'>分布式</b>光伏監(jiān)控<b class='flag-5'>系統(tǒng)</b>來“救場”

    Ceph分布式存儲系統(tǒng)解析

    在當今數(shù)據(jù)爆炸的時代,企業(yè)對存儲系統(tǒng)的需求日益增長,傳統(tǒng)的集中式存儲已經無法滿足大規(guī)模數(shù)據(jù)處理的要求。分布式存儲系統(tǒng)應運而生,而Ceph作為開源分布式存儲
    的頭像 發(fā)表于 07-14 11:15 ?1020次閱讀

    雙電機分布式驅動汽車高速穩(wěn)定性機電耦合控制

    摘要:為了利用所設計的雙電機防滑差速驅動系統(tǒng)來提高分布式驅動汽車的動力學性能,在前期同軸耦合驅動控制理論研究的基礎上,開展該車的高速穩(wěn)定性機電耦合控制研究。建立并驗證包含所設計驅動系統(tǒng)在內的
    發(fā)表于 06-18 16:37

    分布式IO模組選購指南:2025主流品牌盤點與應用方案解析

    分布式IO模塊作為工業(yè)自動化和物聯(lián)網(wǎng)系統(tǒng)中的重要組成部分,近年來憑借其高效、靈活的特點,廣泛應用于智慧工廠、電力系統(tǒng)、樓宇自動化等領域。2025年,隨著工業(yè)4.0和工業(yè)物聯(lián)網(wǎng)(IIoT)的持續(xù)發(fā)展
    的頭像 發(fā)表于 06-10 16:57 ?1324次閱讀

    可測、可控、可調、可觀——分布式光伏監(jiān)控系統(tǒng)的“智慧驅”

    一、 分布式光伏的挑戰(zhàn)與系統(tǒng)的適配 1.分布式光伏電站(如戶用屋頂、工商業(yè)園區(qū)、小型地面電站等)具有以下特點: 分散性:設備分布廣,組件
    的頭像 發(fā)表于 05-22 09:42 ?1495次閱讀
    可測、可控、可調、可觀——<b class='flag-5'>分布式</b>光伏監(jiān)控<b class='flag-5'>系統(tǒng)</b>的“智慧<b class='flag-5'>四</b>驅”

    分布式光伏監(jiān)測難?并網(wǎng)型分布式光伏系統(tǒng)光伏功率預測方案

    一、分布式光伏發(fā)電系統(tǒng) ? 安科瑞 鄒玉麗 ? 分布式光伏發(fā)電系統(tǒng)的基本設備包括光伏電池組件、光伏方陣支架、直流匯流箱、直流配電柜、并網(wǎng)逆變器、交流配電柜等設備,另外還有供電
    的頭像 發(fā)表于 05-20 10:17 ?1231次閱讀
    <b class='flag-5'>分布式</b>光伏監(jiān)測難?并網(wǎng)型<b class='flag-5'>分布式</b>光伏<b class='flag-5'>系統(tǒng)</b>光伏功率預測<b class='flag-5'>方案</b>

    安科瑞分布式光伏監(jiān)控系統(tǒng):高效、安全、智能的綠色能源解決方案

    ?并網(wǎng)標準如何滿足?運維成本如何降低?安科瑞電氣股份有限公司憑借多年行業(yè)經驗,創(chuàng)新推出Acrel-1000DP分布式光伏監(jiān)控系統(tǒng),為光伏電站提供全生命周期解決方案。 一、分布式光伏發(fā)電
    的頭像 發(fā)表于 05-08 16:40 ?757次閱讀

    分布式光伏發(fā)運維系統(tǒng)實際應用案例分享

    安科瑞劉鴻鵬 摘?要 分布式光伏發(fā)電系統(tǒng)其核心特點是發(fā)電設備靠近用電負荷中心,通常安裝在屋頂、建筑立面或閑置空地上,截至2025年,分布式光伏發(fā)電系統(tǒng)在全球和中國范圍內取得了顯著發(fā)展,
    的頭像 發(fā)表于 04-09 14:46 ?1263次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)運維<b class='flag-5'>系統(tǒng)</b>實際應用案例分享

    淺談分布式光伏系統(tǒng)在工業(yè)企業(yè)的設計及應用

    ,通過對工業(yè)廠區(qū)屋頂分布式光伏系統(tǒng)應用案例的研究,對電力消納、系統(tǒng)設計方案進行了詳細論述,*后對未來的廠區(qū)屋頂分布式光伏
    的頭像 發(fā)表于 03-21 14:24 ?982次閱讀
    淺談<b class='flag-5'>分布式</b>光伏<b class='flag-5'>系統(tǒng)</b>在工業(yè)企業(yè)的設計及應用