為了理解兩種方式的不同,我們來看一個不太嚴(yán)謹(jǐn)?shù)睦?。假定有一個算法服務(wù)的副本,保持一個獨(dú)立的數(shù)字作為它的狀態(tài)(初始值為0),并對這個值進(jìn)行加法和乘法運(yùn)算。主動-主動方式應(yīng)該會輸出所進(jìn)行的變換,比如“+1”,“*2”等。每一個副本都會應(yīng)用這些變換,從而得到同樣的解集。主動-被動方式將會有一個獨(dú)立的主體執(zhí)行這些變換并輸出結(jié)果日志,比如“1”,“3”,“6”等。這個例子也清楚的展示了為什么說順序是保證各副本間一致性的關(guān)鍵:一次加法和乘法的順序的改變將會導(dǎo)致不同的結(jié)果。
分布式日志可以理解為一致性問題模型的數(shù)據(jù)結(jié)構(gòu)。因?yàn)槿罩敬砹撕罄m(xù)追加值的一系列決策。你需要重新審視Paxos算法簇,盡管日志模塊是他們最常見的應(yīng)用。 在Paxos算法中,它通常通過使用稱之為多paxos的協(xié)議,這種協(xié)議將日志建模為一系列的問題,在日志中每個問題都有對應(yīng)的部分。在ZAB, RAFT等其它的協(xié)議中,日志的作用尤為突出,它直接對維護(hù)分布式的、一致性的日志的問題建模。
我懷疑的是,我們就歷史發(fā)展的觀點(diǎn)是有偏差的,可能是由于過去的幾十年中,分布式計(jì)算的理論遠(yuǎn)超過了其實(shí)際應(yīng)用。在現(xiàn)實(shí)中,共識的問題是有點(diǎn)太簡單了。計(jì)算機(jī)系統(tǒng)很少需要決定單個值,他們幾乎總是處理成序列的請求。這樣的記錄,而不是一個簡單的單值寄存器,自然是更加抽象。
此外,專注于算法掩蓋了 抽象系統(tǒng)需要的底層的日志。我懷疑,我們最終會把日志中更注重作為一個商品化的基石,不論其是否以同樣的方式 實(shí)施的,我們經(jīng)常談?wù)撘粋€哈希表而不是糾結(jié)我們 得到是不是具體某個細(xì)節(jié)的哈希表,例如線性或者帶有什么什么其它變體哈希表。日志將成為一種大眾化的接口,為大多數(shù)算法和其實(shí)現(xiàn)提升提供最好的保證和最佳的性能。