共計(jì) 2738 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。
本篇文章為大家展示了 Paxos 算法在大型系統(tǒng)中常見的應(yīng)用場(chǎng)景是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
在分布式算法領(lǐng)域,有個(gè)非常重要的算法叫 Paxos, 它的重要性有多高呢,Google 的 Chubby [1]中提到
all working protocols for asynchronous consensus we have so far encountered have Paxos at their core.
關(guān)于 Paxos 算法的詳述在維基百科中有更多介紹,中文版介紹的是 choose value 的規(guī)則 [2],英文版介紹的是 Paxos 3 phase commit 的流程[3],中文版不是從英文版翻譯而是獨(dú)立寫的,所以非常具有互補(bǔ)性。Paxos 算法是由 Leslie Lamport 提出的,他在 Paxos Made Simple[4] 中寫道
The Paxos algorithm, when presented in plain English, is very simple.
當(dāng)你研究了很長(zhǎng)一段時(shí)間 Paxos 算法還是有點(diǎn)迷糊的時(shí)候,看到上面這句話可能會(huì)有點(diǎn)沮喪。但是公認(rèn)的它的算法還是比較繁瑣的,尤其是要用程序員嚴(yán)謹(jǐn)?shù)乃季S將所有細(xì)節(jié)理清的時(shí)候,你的腦袋里更是會(huì)充滿了問號(hào)。Leslie Lamport 也是用了長(zhǎng)達(dá) 9 年的時(shí)間來完善這個(gè)算法的理論。
實(shí)際上對(duì)于一般的開發(fā)人員,我們并不需要了解 Paxos 所有細(xì)節(jié)及如何實(shí)現(xiàn),只需要知道 Paxos 是一個(gè)分布式選舉算法就夠了。本文主要介紹一下 Paxos 常用的應(yīng)用場(chǎng)合,或許有一天當(dāng)你的系統(tǒng)增大到一定規(guī)模,你知道有這樣一個(gè)技術(shù),可以幫助你正確及優(yōu)雅的解決技術(shù)架構(gòu)上一些難題。
1. database replication, log replication 等,如 bdb 的數(shù)據(jù)復(fù)制就是使用 paxos 兼容的算法。Paxos 最大的用途就是保持多個(gè)節(jié)點(diǎn)數(shù)據(jù)的一致性。
2. naming service, 如大型系統(tǒng)內(nèi)部通常存在多個(gè)接口服務(wù)相互調(diào)用。
1) 通常的實(shí)現(xiàn)是將服務(wù)的 ip/hostname 寫死在配置中,當(dāng) service 發(fā)生故障時(shí)候,通過手工更改配置文件或者修改 DNS 指向的方法來解決。缺點(diǎn)是可維護(hù)性差,內(nèi)部的單元越多,故障率越大。
2) LVS 雙機(jī)冗余的方式,缺點(diǎn)是所有單元需要雙倍的資源投入。
通過 Paxos 算法來管理所有的 naming 服務(wù),則可保證 high available 分配可用的 service 給 client。象 ZooKeeper 還提供 watch 功能,即 watch 的對(duì)象發(fā)生了改變會(huì)自動(dòng)發(fā) notification, 這樣所有的 client 就可以使用一致的,高可用的接口。
3.config 配置管理
1) 通常手工修改配置文件的方法,這樣容易出錯(cuò),也需要人工干預(yù)才能生效,所以節(jié)點(diǎn)的狀態(tài)無(wú)法同時(shí)達(dá)到一致。
2) 大規(guī)模的應(yīng)用都會(huì)實(shí)現(xiàn)自己的配置服務(wù),比如用 http web 服務(wù)來實(shí)現(xiàn)配置中心化。它的缺點(diǎn)是更新后所有 client 無(wú)法立即得知,各節(jié)點(diǎn)加載的順序無(wú)法保證,造成系統(tǒng)中的配置不是同一狀態(tài)。
4.membership 用戶角色 /access control list, 比如在權(quán)限設(shè)置中,用戶一旦設(shè)置某項(xiàng)權(quán)限比如由管理員變成普通身份,這時(shí)應(yīng)在所有的服務(wù)器上所有遠(yuǎn)程 CDN 立即生效,否則就會(huì)導(dǎo)致不能接受的后果。
5. 號(hào)碼分配。通常簡(jiǎn)單的解決方法是用數(shù)據(jù)庫(kù)自增 ID, 這導(dǎo)致數(shù)據(jù)庫(kù)切分困難,或程序生成 GUID, 這通常導(dǎo)致 ID 過長(zhǎng)。更優(yōu)雅的做法是利用 paxos 算法在多臺(tái) replicas 之間選擇一個(gè)作為 master, 通過 master 來分配號(hào)碼。當(dāng) master 發(fā)生故障時(shí),再用 paxos 選擇另外一個(gè) master。
這里列舉了一些常見的 Paxos 應(yīng)用場(chǎng)合,對(duì)于類似上述的場(chǎng)合,如果用其它解決方案,一方面不能提供自動(dòng)的高可用性方案,同時(shí)也遠(yuǎn)遠(yuǎn)沒有 Paxos 實(shí)現(xiàn)簡(jiǎn)單及優(yōu)雅。
Yahoo! 開源的 ZooKeeper [5]是一個(gè)開源的類 Paxos 實(shí)現(xiàn)。它的編程接口看起來很像一個(gè)可提供強(qiáng)一致性保證的分布式小文件系統(tǒng)。對(duì)上面所有的場(chǎng)合都可以適用。但可惜的是,ZooKeeper 并不是遵循 Paxos 協(xié)議,而是基于自身設(shè)計(jì)并優(yōu)化的一個(gè) 2 phase commit 的協(xié)議,因此它的理論 [6] 并未經(jīng)過完全證明。但由于 ZooKeeper 在 Yahoo! 內(nèi)部已經(jīng)成功應(yīng)用在 HBase, Yahoo! Message Broker, Fetch Service of Yahoo! crawler 等系統(tǒng)上,因此完全可以放心采用。
另外選擇 Paxos made live [7]中一段實(shí)現(xiàn)體會(huì)作為結(jié)尾。
* There are significant gaps between the description of the Paxos algorithm and the needs of a real-world system. In order to build a real-world system, an expert needs to use numerous ideas scattered in the literature and make several relatively small protocol extensions. The cumulative effort will be substantial and the final system will be based on an unproven protocol.
* 由于 chubby 填補(bǔ)了 Paxos 論文中未提及的一些細(xì)節(jié),所以最終的實(shí)現(xiàn)系統(tǒng)不是一個(gè)理論上完全經(jīng)過驗(yàn)證的系統(tǒng)
* The fault-tolerance computing community has not developed the tools to make it easy to implement their algorithms.
* 分布式容錯(cuò)算法領(lǐng)域缺乏幫助算法實(shí)現(xiàn)的的配套工具, 比如編譯領(lǐng)域盡管復(fù)雜,但是 yacc, ANTLR 等工具已經(jīng)將這個(gè)領(lǐng)域的難度降到最低。
* The fault-tolerance computing community has not paid enough attention to testing, a key ingredient for building fault-tolerant systems.
* 分布式容錯(cuò)算法領(lǐng)域缺乏測(cè)試手段
這里要補(bǔ)充一個(gè)背景,就是要證明分布式容錯(cuò)算法的正確性通常比實(shí)現(xiàn)算法還困難,Google 沒法證明 Chubby 是可靠的,Yahoo! 也不敢保證它的 ZooKeeper 理論正確性。大部分系統(tǒng)都是靠在實(shí)踐中運(yùn)行很長(zhǎng)一段時(shí)間才能謹(jǐn)慎的表示,目前系統(tǒng)已經(jīng)基本沒有發(fā)現(xiàn)大的問題了。
上述內(nèi)容就是 Paxos 算法在大型系統(tǒng)中常見的應(yīng)用場(chǎng)景是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。