黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 分布式一致性算法:paxos算法

分布式一致性算法:paxos算法

更新時間:2022-06-16 10:06:58 來源:動力節點 瀏覽723次

隨著大型網站的各種高并發訪問、海量數據處理等場景越來越多,如何實現網站的高可用、易伸縮、可擴展、安全等目標就顯得越來越重要。為了解決這樣一系列問題,大型網站的架構也在不斷發展。提高大型網站的高可用架構,不得不提的就是分布式。在關于分布式事務、兩階段提交協議、三階提交協議一文中主要用于解決分布式一致性問題的集中協議,那么這篇文章主要講解業內公認的比較難的也是最行之有效的paxos算法。

什么是paxos算法

Paxos 算法是分布式一致性算法用來解決一個分布式系統如何就某個值(決議)達成一致的問題。

人們在理解paxos算法是會遇到一些困境,那么接下來,我們帶著以下幾個問題來學習paxos算法:

1.paxos到底在解決什么問題?

2.paxos到底如何在分布式存儲系統中應用?

3.paxos的核心思想是什么?

paxos解決了什么問題

在關于分布式一致性的探究中我們提到過,分布式的一致性問題其實主要是指分布式系統中的數據一致性問題。所以,為了保證分布式系統的一致性,就要保證分布式系統中的數據是一致的。

在一個分布式數據庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那么他們最后能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個“一致性算法”以保證每個節點看到的指令一致。

所以,paxos算法主要解決的問題就是如何保證分布式系統中各個節點都能執行一個相同的操作序列。

上圖中,C1是一個客戶端,N1、N2、N3是分布式部署的三個服務器,初始狀態下N1、N2、N3三個服務器中某個數據的狀態都是S0。當客戶端要向服務器請求處理操作序列:op1op2op3時(op表示operation)(這里把客戶端的寫操作簡化成向所有服務器發送相同的請操作序列,實際上可能通過Master/Slave模式處理)。如果想保證在處理完客戶端的請求之后,N1、N2、N3三個服務器中的數據狀態都能從S0變成S1并且一致的話(或者沒有執行成功,還是S0狀態),就要保證N1、N2、N3在接收并處理操作序列op1op2op3時,嚴格按照規定的順序正確執行opi,要么全部執行成功,要不就全部都不執行。

所以,針對上面的場景,paxos解決的問題就是如何依次確定不可變操作opi的取值,也就是確定第i個操作什么,在確定了opi的內容之后,就可以讓各個副本執行opi操作。

Paxos算法詳解

Paxos是一個十分巧妙的一致性算法,但是他也十分難以理解,就連他的作者Lamport都被迫對他做過多種講解。我認為對paxos算法講解的最清楚的就是維基百科了。但是要看懂維基百科中的介紹需要很強的數學思維(paxos畢竟是一個算法),而且有很多關于定理的推論、證明等過程。那么本篇文章主要站在程序的角度,通俗的,循序漸進的講解到底什么是paxos算法。

我們先把前面的場景簡化,把我們現在要解決的問題簡化為如何確定一個不可變變量的取值(每一個不可變變量可以標識一個操作序列中的某個操作,當確保每個操作都正確之后,就可以按照順序執行這些操作來保證數據能夠準確無誤的從一個狀態轉變成另外一個狀態了)。

接下來,請跟我一步一步的學習paxos算法。

要學習paxos算法,我們就要從他要解決的問題出發,假如沒有paxos算法,當我們面對如何確定一個不可變變量的取值這樣一個問問題的時候,我們應該如何解決呢?

這里暫不介紹paxos中的角色的概念,讀者可以自行從維基百科中了解。不了解的話也可以直接往下看,看著看著就了解了。

問題抽象

我們把確定一個不可變變量的取值問題定義成:

設計一個系統,來存儲名稱為var的變量。

var的取值可以是任意二進制數

系統內部由多個Accepter組成,負責管理和存儲var變量。

系統對外提供api,用來設置var變量的值propose(var,V) =><ok,f> or<error>

將var的值設置為V,系統會返回ok和系統中已經確定的取值f,或者返回error。

外部有多個Proposer機器任意請求系統,調用系統API(propose(var,V) =><ok,f> or<error> )來設置var變量的值。

系統對外提供api,用來設置var變量的值propose(var,V) => or

將var的值設置為V,系統會返回ok和系統中已經確定的取值f,或者返回error。

外部有多個Proposer機器任意請求系統,調用系統API(propose(var,V) => or )來設置var變量的值。

系統需要保證var的取值滿足一致性

如果var沒有被設置過,那么它的初始值為null

一旦var的值被設置成功,則不可被更改,并且可以一直都能獲取到這個值

系統需要滿足容錯特性

可以容忍任意proposer出現故障可以容忍少數acceptor故障(半數以下)

暫時忽略網絡分化問題和acceptor故障導致var丟失的問題。

到這里,問題已經抽象完成了,讀者可以再仔細看看上面的系統描述。如果這樣設置一個系統,是不是就可以保證變量var的不可變性了呢?

這里還是再簡單講解一下,上面的系統確實可以保證變量var的不可變性。

因為var的初始值為null,當有proposer請求接口propose(var,v)設置var的值的時候,系統會將var設置為v,并返回f(f==v)。

var變量被初始化以后,再有proposer請求propose(var,v)設置var的值的時候,系統會直接返回系統中已有的var的值f,而放棄proposer提供的v。

以上就是關于“分布式一致性算法:paxos算法”的介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容細致全面,從入門到精通,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助哦。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国内精品免费久久久久妲己 | 成人亚洲性情网站www在线观看 | 国产高清在线精品一区在线 | 任你躁在线精品免费视频网站 | 中文字幕日本不卡一二三区 | 成人黄漫画免费观看网址 | 亚洲免费看片 | 日韩高清在线观看 | 日韩在线观看第一页 | 精品国产一区二区三区www | 久操视频在线播放 | 特级中国aaa毛片 | 18女人免费毛片a级 18女人毛片水真多免费 | 亚洲精品视频导航 | 久久99精品波多结衣一区 | 日本一区二区三区欧美在线观看 | 多人伦交性欧美精品欧 | 欧美极度另类极品 | 欧美日韩一本二本 | 亚洲人成网站在线观看播放动漫 | 免费国产成人高清在线观看麻豆 | 成年网站在线观看 | 另类视频在线观看 | 成年人网站免费看 | 成人黄色片网站 | 五月婷在线观看 | 怡春院日本一区二区久久 | 三级在线免费观看 | 久久美女性网 | 日韩色影视 | 亚洲天天操 | 波少野结衣色在线 | 婷婷伊人久久 | 国产精品一区高清在线观看 | 欧美在线视频你懂的 | 男女在线观看视频 | 国产v国产v片大片线观看网站 | 英国一级黄色片 | 国产激情视频在线播放 | 1717国产精品视频免费 | 69人成网站色www |