分布式系統(tǒng)及其一致性算法

一,分布式系統(tǒng)
1遣钳,簡(jiǎn)介。(what) 這是一個(gè)較為寬泛的概念,它的產(chǎn)生和出現(xiàn)是為了解決和應(yīng)對(duì)以往系統(tǒng)的問(wèn)題
百科: 分布式系統(tǒng)(distributed system)蕴茴,是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)劝评。正是由于軟件的特性,所以分布式系統(tǒng)具有內(nèi)聚性和透明性倦淀。
內(nèi)聚性: 系統(tǒng)內(nèi)的節(jié)點(diǎn)蒋畜、服務(wù)的目的、分工撞叽、規(guī)則明確姻成。
透明性: 分布式系統(tǒng)對(duì)外提供服務(wù),調(diào)用該系統(tǒng)的外部用戶不用考慮它是怎樣工作的愿棋,只要根據(jù)規(guī)則進(jìn)行使用就行科展,也不需要里面包含多少臺(tái)服務(wù)器,在什么地方
簡(jiǎn)單理解: 是一套互相連接共同對(duì)外提供服務(wù)的系統(tǒng)糠雨,系統(tǒng)內(nèi)部結(jié)點(diǎn)采用某種方式進(jìn)行通信才睹;常見(jiàn)的大的如大型電商系統(tǒng),小的如數(shù)據(jù)庫(kù)集群甘邀、緩存集群琅攘。

2,使用分布式系統(tǒng)原因松邪?(why)
* 分布式系統(tǒng)出現(xiàn)之前的單機(jī)系統(tǒng)坞琴,一旦服務(wù)器的操作系統(tǒng)、硬盤逗抑、網(wǎng)絡(luò)出現(xiàn)問(wèn)題就會(huì)導(dǎo)致服務(wù)的中斷剧辐,數(shù)據(jù)的丟失等問(wèn)題。
* 單機(jī)系統(tǒng)的性能再高锋八、存儲(chǔ)能力再擴(kuò)展浙于、也是有限的。而分布式系統(tǒng)可以以大量的服務(wù)器來(lái)分散帶寬挟纱、存儲(chǔ)羞酗、計(jì)算的壓力
* 由于跨遠(yuǎn)區(qū)域甚至跨國(guó)、網(wǎng)絡(luò)的延遲有時(shí)候是客觀的紊服,所以說(shuō)服務(wù)器集中在一個(gè)地方很難再較大的區(qū)域內(nèi)提供較好的服務(wù)和體驗(yàn)

3檀轨,分布式系統(tǒng)在實(shí)際操作環(huán)境之中的問(wèn)題;
由于分布式系統(tǒng)不完美的運(yùn)行環(huán)境欺嗤,所以有些問(wèn)題尚待解決参萄。例如,系統(tǒng)之間的每個(gè)節(jié)點(diǎn)都有可能出現(xiàn)單個(gè)節(jié)點(diǎn)出現(xiàn)故障突然間不工作了煎饼,節(jié)點(diǎn)間會(huì)有或大或小讹挎,忽大忽小的網(wǎng)絡(luò)延遲,節(jié)點(diǎn)間也有可能出現(xiàn)網(wǎng)絡(luò)中斷。從技術(shù)角度來(lái)看筒溃,可能出現(xiàn)的問(wèn)題基本上認(rèn)為是早晚會(huì)發(fā)生的马篮,說(shuō)到底,很多問(wèn)題就是成本和收益的平衡怜奖。因此浑测,一個(gè)分布式系統(tǒng)要想正常的對(duì)外提供服務(wù),它的設(shè)計(jì)本身就的考慮這些問(wèn)題的解決歪玲。在算法層面上迁央,分布式一致性算法就是為了輔助和解決這些問(wèn)題,確保系統(tǒng)盡可能的能夠正常的對(duì)外提供服務(wù)

二滥崩,分布式一致性算法
簡(jiǎn)介岖圈;
主要是從系統(tǒng)角度分析分布式系內(nèi)部節(jié)點(diǎn)本身及其節(jié)點(diǎn)之間出現(xiàn)問(wèn)題的解決,
例如夭委,一個(gè)系統(tǒng)之間包含5個(gè)節(jié)點(diǎn)幅狮,由于網(wǎng)絡(luò)問(wèn)題,其中3個(gè)節(jié)點(diǎn)與另外2個(gè)節(jié)點(diǎn)失去連接株灸,此刻系統(tǒng)如何處理崇摄?是否繼續(xù)提供服務(wù)支持?如果繼續(xù)提供服務(wù)支持慌烧,那么他們之間的數(shù)據(jù)就是不一致的逐抑,后面節(jié)點(diǎn)的網(wǎng)絡(luò)恢復(fù)后,怎么解決數(shù)據(jù)不一致問(wèn)題屹蚊?
其次厕氨,節(jié)點(diǎn)間的網(wǎng)絡(luò)延遲,磁盤讀寫汹粤,CPU處理能力都不盡相同命斧,那么保存到這個(gè)系統(tǒng)中的數(shù)據(jù)什么樣的情況下認(rèn)為保存成功?同時(shí)還要以一種高效的形式來(lái)實(shí)現(xiàn)嘱兼。

常見(jiàn)的分布式系統(tǒng)的一致性算法:
Paxos Raft ZAB
ZAB(zookeeper atomic Broadcast):
主要以下特點(diǎn):
* 把節(jié)點(diǎn)分為兩種:主節(jié)點(diǎn)(leader)和從節(jié)點(diǎn)(follower)
* 有一個(gè)主節(jié)點(diǎn)国葬,所有的寫操作(這里的寫操作可以認(rèn)為是新增和修改)都在主節(jié)之上,如果有一個(gè)從節(jié)點(diǎn)收到寫操作請(qǐng)求芹壕,也會(huì)轉(zhuǎn)移到主節(jié)點(diǎn)處理汇四。
* 其他節(jié)點(diǎn)都是從節(jié)點(diǎn),可以通過(guò)從節(jié)點(diǎn)進(jìn)行讀操作
* 主節(jié)點(diǎn)通過(guò)選舉所得踢涌,主節(jié)點(diǎn)失蹤后通孽,其余從節(jié)點(diǎn)自動(dòng)選取新的主節(jié)點(diǎn)

寫操作具體實(shí)施:
常規(guī)寫流程如下:
1. 客戶向主節(jié)點(diǎn)請(qǐng)求寫數(shù)據(jù)X
2. 主節(jié)點(diǎn)為該條數(shù)據(jù)X生成唯一的遞增id,叫ZXID X(id)
3. 主節(jié)點(diǎn)把X(id)發(fā)送給所有從節(jié)點(diǎn)睁壁,跟他們確認(rèn)能不能正常的將數(shù)據(jù)記錄下來(lái)背苦,這個(gè)操作叫做Propose提議
4. 超過(guò)一半的從節(jié)點(diǎn)向主節(jié)點(diǎn)回復(fù)沒(méi)有問(wèn)題互捌,這個(gè)操作叫做ACK應(yīng)答
5. 主節(jié)點(diǎn)收到一半以上從節(jié)點(diǎn)肯定回答后,給所有從節(jié)點(diǎn)發(fā)送確認(rèn)提交請(qǐng)求行剂,即表示你們可以將這條數(shù)據(jù)保存下來(lái)了疫剃,同時(shí)自己也正式保存這條數(shù)據(jù),這個(gè)過(guò)程叫做commit

節(jié)點(diǎn)掛掉的各個(gè)情況:
1. 少部分節(jié)點(diǎn)掛掉沒(méi)有任何影響
2. 一半節(jié)點(diǎn)掛掉硼讽,系統(tǒng)不能提供服務(wù);一般這種情況的概率較小
3. 少部分節(jié)點(diǎn)掛掉牲阁、一段時(shí)間后又恢復(fù)了之后:
* 先通過(guò)主節(jié)點(diǎn)同步最新的數(shù)據(jù)固阁;因?yàn)樽约簰斓粢欢螘r(shí)間后,很有可能沒(méi)有最新的數(shù)據(jù)城菊。
* 數(shù)據(jù)同步之后正式成為子節(jié)點(diǎn)開(kāi)始工作备燃。

同理:新添加的子節(jié)點(diǎn)到現(xiàn)有的集群也是這個(gè)模式
4. 在主節(jié)點(diǎn)掛掉期間,系統(tǒng)暫時(shí)不對(duì)外提供服務(wù)凌唬,開(kāi)始新的節(jié)點(diǎn)選舉
ZAB節(jié)點(diǎn)選舉機(jī)制:發(fā)消息到每一個(gè)自己能連得上的節(jié)點(diǎn):包含自己的節(jié)點(diǎn)編號(hào)myid和保存數(shù)據(jù)的最大ZXID
選舉規(guī)則:
* 誰(shuí)的ZXID最大并齐,誰(shuí)就是主節(jié)點(diǎn)。why客税?因?yàn)檫@表示他的數(shù)據(jù)最新况褪。盡量保證數(shù)據(jù)的一直性。
* ZXID一樣時(shí)更耻,誰(shuí)的myid最大测垛,誰(shuí)就是新的主節(jié)點(diǎn)。
* 每個(gè)節(jié)點(diǎn)收到其他節(jié)點(diǎn)的數(shù)據(jù)后秧均,與自己的數(shù)據(jù)進(jìn)行判斷食侮,如果對(duì)方的比自己大,那就認(rèn)同對(duì)方為主節(jié)點(diǎn)
* 得到一半以上(注意目胡;這里又是一半以上)節(jié)點(diǎn)認(rèn)同的候選節(jié)點(diǎn)成為新的主節(jié)點(diǎn)

====》最后 新的主節(jié)點(diǎn)選取出來(lái)以后锯七,進(jìn)入集群成為數(shù)據(jù)同步節(jié)點(diǎn),先檢查節(jié)點(diǎn)內(nèi)部那些數(shù)據(jù)比自己舊誉己,然后將數(shù)據(jù)同步過(guò)去眉尸。然后對(duì)外提供服務(wù)

Raft算法:
Raft算法與ZAB算法類似,也分為主節(jié)點(diǎn)和從節(jié)點(diǎn)巫延;區(qū)別在于主節(jié)點(diǎn)選取機(jī)制上有所不同效五。
Raft選舉機(jī)制:
1. 發(fā)現(xiàn)主節(jié)點(diǎn)失蹤一段時(shí)間之后,所有從節(jié)點(diǎn)向其他從節(jié)點(diǎn)發(fā)送消息炉峰,讓他們選取自己為新的主節(jié)點(diǎn)畏妖。
2. 還沒(méi)有參加選舉的從節(jié)點(diǎn)如果收到其他節(jié)點(diǎn)的選舉請(qǐng)求,就選取自己收取到的第一個(gè)節(jié)點(diǎn)疼阔,后面在有誰(shuí)請(qǐng)求自己支持選取戒劫,就告知自己已經(jīng)支持另一個(gè)節(jié)點(diǎn)了半夷。
3. 如果一個(gè)節(jié)點(diǎn)發(fā)現(xiàn)另一個(gè)節(jié)點(diǎn)的支持率比自己高迅细,那么自己就無(wú)條件的支持另一個(gè)節(jié)點(diǎn)巫橄,并同時(shí)讓自己的簇?fù)硪仓С至硪粋€(gè)節(jié)點(diǎn)。
4. 如果一輪選舉沒(méi)有選取出新的主節(jié)點(diǎn)茵典,那么就開(kāi)始下一輪選舉湘换,知道一個(gè)節(jié)點(diǎn)得到大多數(shù)的擁簇。

備注:
關(guān)于ZXID說(shuō)明:主節(jié)點(diǎn)上沒(méi)提交的數(shù)據(jù)在從節(jié)點(diǎn)上也算做未提交统阿,因此沒(méi)提交的數(shù)據(jù)的ZXID不算數(shù)彩倚。

關(guān)于選舉說(shuō)明:選舉一定是在主節(jié)點(diǎn)掛掉之后才進(jìn)行的。分布式一致性算法可以再保證部分節(jié)點(diǎn)掛掉的情況下扶平,數(shù)據(jù)的一致性帆离;但是在大部分節(jié)點(diǎn)同時(shí)掛掉的情況下不保證。如果超過(guò)半數(shù)節(jié)點(diǎn)同時(shí)掛掉结澄,那么該系統(tǒng)則不對(duì)再外提供服務(wù)哥谷。
當(dāng)然,在寫數(shù)據(jù)時(shí)麻献,強(qiáng)制確認(rèn)所有節(jié)點(diǎn)都寫入了新數(shù)據(jù)會(huì)更安全和一致们妥,但是系統(tǒng)的可用性和性能就大大降低了;
譬如一個(gè)節(jié)點(diǎn)掛掉勉吻,那么整個(gè)系統(tǒng)就不能夠正常的工作了王悍。

Q&A
Q:為什么要保證一半以上的從節(jié)點(diǎn)回復(fù)?
A為了保證數(shù)據(jù)的一致性

Q:如果他們網(wǎng)絡(luò)恢復(fù)之后餐曼,正常節(jié)點(diǎn)與非正常節(jié)點(diǎn)(多數(shù)節(jié)點(diǎn)與少數(shù)節(jié)點(diǎn)間)數(shù)據(jù)已誰(shuí)為準(zhǔn)压储?
A:分布式一致性算法采用大多數(shù)認(rèn)同的方式

Q:判定主節(jié)點(diǎn)已死的依據(jù)是什么?因?yàn)橥ㄟ^(guò)節(jié)點(diǎn)選舉的機(jī)制源譬,那么主節(jié)點(diǎn)的壓力比較大集惋。
A:通過(guò)心跳檢測(cè)來(lái)判斷;針對(duì)心跳偵聽(tīng)時(shí)間的配置較為嚴(yán)苛踩娘,間隔太大容易響應(yīng)慢刮刑,間隔太小容易出現(xiàn)假死。所以針對(duì)這種情況分兩方面考慮:1养渴,針對(duì)外部系統(tǒng)通過(guò)緩存雷绢、延遲調(diào)用等方式解決;2理卑,對(duì)內(nèi)在運(yùn)維上需要對(duì)于服務(wù)器做自動(dòng)化監(jiān)控預(yù)警告警方面的處理翘紊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市藐唠,隨后出現(xiàn)的幾起案子帆疟,更是在濱河造成了極大的恐慌鹉究,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踪宠,死亡現(xiàn)場(chǎng)離奇詭異自赔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)柳琢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門绍妨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人柬脸,你說(shuō)我怎么就攤上這事痘绎。” “怎么了肖粮?”我有些...
    開(kāi)封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尔苦。 經(jīng)常有香客問(wèn)我涩馆,道長(zhǎng),這世上最難降的妖魔是什么允坚? 我笑而不...
    開(kāi)封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任魂那,我火速辦了婚禮稠项,結(jié)果婚禮上涯雅,老公的妹妹穿的比我還像新娘。我一直安慰自己展运,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锈遥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爬立。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天万哪,我揣著相機(jī)與錄音懦尝,去河邊找鬼知纷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛陵霉,可吹牛的內(nèi)容都是我干的琅轧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼踊挠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼乍桂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起效床,我...
    開(kāi)封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤睹酌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后剩檀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體憋沿,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年沪猴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辐啄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡运嗜,死狀恐怖壶辜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情担租,我是刑警寧澤砸民,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站奋救,受9級(jí)特大地震影響岭参,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尝艘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一冗荸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧利耍,春花似錦蚌本、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至轴猎,卻和暖如春嵌莉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捻脖。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工锐峭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留中鼠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓沿癞,卻偏偏與公主長(zhǎng)得像援雇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椎扬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容