從分布式事務(wù)到跨鏈
陸續(xù)讀了一遍周志明老師的《鳳凰架構(gòu)》。讀到分布式事務(wù)那章,我想起了早年的一次面試經(jīng)歷。
我自己本身是自學(xué)編程,然后搗鼓各種網(wǎng)站服務(wù)的野路子出身。有一次換工作,投了大廠的一個職位,得到了面試機會。
記得當(dāng)時面試官問了我一個某種業(yè)務(wù)場景下如何保證數(shù)據(jù)的一致性的問題。說實話我自己原來的經(jīng)驗都是小網(wǎng)站小服務(wù),基本沒考慮過這種問題,數(shù)據(jù)不一致了?那就修唄。但我不敢這樣給面試官回答呀,面試官問的是要如何保證數(shù)據(jù)的一致性,我這個保證不了。
于是我按照我零零散散看的一些書里的概念,什么事務(wù),分布式事務(wù)扯了一通。最后面試官面露失望,告訴我這個在互聯(lián)網(wǎng)場景里不可行,說我沒有大型互聯(lián)網(wǎng)服務(wù)的經(jīng)驗,不太合適。
然后我謙虛的問了一句,那應(yīng)該用什么辦法?面試官說互聯(lián)網(wǎng)還是要追求效率,我們只要保證“最終一致性(Eventual Consistency)“就行了。我又追問一句,比如怎么做呢?面試官說比如數(shù)據(jù)不一致了可以觸發(fā)個后臺服務(wù)修。我內(nèi)心。。。也只怪自己讀書少,沒學(xué)會這個詞。
摸爬滾打互聯(lián)網(wǎng),云服務(wù)里十多年,然后我又搗鼓起了區(qū)塊鏈。那天在一個跨鏈的技術(shù)討論會上,我還說通用的跨鏈方案,實際上非常像分布式事務(wù)的解決方案。
如果把區(qū)塊鏈看作一個分布式數(shù)據(jù)庫,跨鏈就是要保證在一個數(shù)據(jù)庫里進行某項操作后,在另外一個數(shù)據(jù)庫中執(zhí)行另外一個操作必然成功。如果是純粹的 Token 場景,一個鏈上 lock 某種 Token,在另外一個鏈上 mint 出來,大概率不會失敗。但如果涉及復(fù)雜的操作,就很難保證。
而現(xiàn)在大多數(shù)的通用跨鏈方案,基本都做了一個假設(shè),跨鏈的應(yīng)用需要保證,在第一個鏈上進行一項操作后,要在第二個鏈上進行的后續(xù)操作必須保證成功。但顯然這個假設(shè)過于強烈。
如果按照分布式事務(wù)的思路來設(shè)計跨鏈。比如 SAGA 事務(wù)的思路是每個操作都需要設(shè)計一個補償操作,一旦事物執(zhí)行失敗,則需要通過補償操作來進行補償。這個思路其實可以在跨鏈方案中借鑒,并且也足夠通用,可以設(shè)計出對應(yīng)用開發(fā)者友好的接口。
當(dāng)然,跨鏈方案另外的難度在于兩個鏈之間的證明,這個屬于另外一個話題了。但分布式系統(tǒng)的道理是共通的。
周老師這本書屬于那種百科全書式書籍,幾乎涉及了分布式系統(tǒng)架構(gòu)的所有主要方面。這樣的書很容易寫成辭典式的書籍,讀起來沒有味道,但周老師這本書卻非常耐讀,文字風(fēng)格我也很喜歡,每一章都能從理論講到實踐,既可以引起思考,也可以指導(dǎo)實踐,非常推薦。前面用“幾乎”是因為這本書中主要少了區(qū)塊鏈相關(guān)的內(nèi)容,期待周老師在新版本中加入?yún)^(qū)塊鏈的內(nèi)容。

