如何解決分布式數據庫的原子性的問題
當我們在支付網絡中進行交易時,我們希望100%地確保交易將完全完成并到達最終目的地,這樣就不會有人賠錢。為了保證其有效性,每個數據庫事務都應該滿足四個主要條件,這四個條件構成了所謂的ACID模型。事務必須是原子的、一致的、隔離的、持久的。
我們想談談這些特性之一——原子性。原子性意味著數據庫事務必須遵循“全或無”規(guī)則。原子事務可以全部執(zhí)行,也可以完全不執(zhí)行,這對于確保數據一致性至關重要。
傳統(tǒng)的解決方案
讓我們從分布式數據庫中使用的解決方案開始。
· 單階段提交是實現(xiàn)原子性最直接的方法。事務管理器發(fā)送,參與者按照指示進行更改。這種模式效率低下,而且存在許多固有的威脅和缺陷。
· 兩階段提交更為全面,因為每個事務都分為兩個階段。首先,事務管理器查詢每個參與者,以確定是否應該提交事務。他們創(chuàng)建必要的臨時條目并投票承諾。如果所有參與者都同意付款,則經理將提交請求發(fā)送給他們。
· 三相提交版本將第一階段分為兩部分,具有更高的安全性。經理還會從詢問參與者的投票情況開始,但只有在所有參與者都同意的情況下,他才會給出準備指令。然后,參與者創(chuàng)建條目(分配)并確認他們對下一階段的準備。只有在管理器接收到所有確認之后才執(zhí)行最后一個階段。
單個DB節(jié)點中的原子性是通過前饋分類器實現(xiàn)的。當用戶請求在數據庫中反映一個事務時,條目首先是持久的,然后寫入磁盤分類賬。如果系統(tǒng)在進程中途失敗,事務可以在重新啟動時從磁盤回滾或恢復。
離線網絡中的原子事務
閃電網絡和其他的離線網絡使用各種具體的解決方案來防止交易過程中由于某人的錯誤而造成的資金損失。
HTLC
最新的解決方案大多使用HTLC(散列timelock契約)。它允許在預先設定的時間鎖前展示原始秘密,然后花錢。讓我們看一下閃電網絡中的事務流程流。首先,接收節(jié)點生成秘密并計算其散列。然后將散列發(fā)送到發(fā)送方節(jié)點,作為生成HTLC的基礎。發(fā)送方生成合約并將其發(fā)送到node1,即路由上的下一個節(jié)點,該節(jié)點使用遞減的TImelock創(chuàng)建一個合契約(使用相同的散列)。這個新生成的合約由node1通過路由進一步發(fā)送到node2, node2再次重復動作并減少時間鎖。它一直傳遞到接收方,接收方使用自己在開始時生成的秘密簽署資金支出(解鎖支付),并從發(fā)送合同的節(jié)點接收資金。
HTLA
Interledger是一個開放的協(xié)議套件,用于通過各種賬簿進行轉賬。傳輸可以使用兩種模式之一執(zhí)行:通用模式和原子模式。在通用模式下,原子性的賬間操作由HTLA提供,是HTLC的一種修改。即使區(qū)塊鏈不支持HTLC,也可以使用HTLA。在這種情況下,連接器(負責路由的特殊賬間節(jié)點)可以使用其他方法復制HTLC——有條件的支付通道(使用HTLCs)、賬上持有/托管(使用HTLCs)、簡單的支付通道、信任線等,以確保滿足所有合同要求(例如支付時間、金額、支付解鎖條件)。
PM
Sprite通道是一項建議新版本的付費通道以解決與原子性相關的一些閃電問題的項目。HTLC通過添加預映像管理器(PM)進行了顯著升級。開發(fā)人員希望PM成為HTLC的仲裁者,并將合同到期的決策從任何單個節(jié)點委托給軟件。Sprite通道應該有一個統(tǒng)一的合同有效期。如果一個預圖已經及時發(fā)布,那么所有的爭議都是可以接受的,因為一方不可能及時發(fā)布預圖,而另一方不可能不發(fā)布。(雙方有效期相同)但是,如果在錯誤的時間發(fā)布了預圖,那么付款是沒有爭議的。
HTLR
Celer網絡是通過離線技術實現(xiàn)公共區(qū)塊鏈規(guī)模和性能最大化的解決方案。在這里,PM已經成為一個散列的TImelock注冊表(HTLR),主要具有相同的特性。HTLR有兩個依賴端點:isterminate和QueryResult,這兩個特性最終可以合并。
Notaries
在原子模式下,Interledger使用參與者選擇的公證人來協(xié)調轉賬。通過公證進行的支付類似于使用HTLC進行的閃電支付。唯一的區(qū)別是,在披露秘密之前,接收方節(jié)點必須將合同移交給公證員進行驗證,公證員是隨機從其總登記冊中挑選出來的特殊實體,必須對支付批準進行投票。
Observers
這個角色出現(xiàn)在GEO協(xié)議概念中,它提供了一種解決原子性問題的新方法。項目團隊正在創(chuàng)建一個分散的對等脫鏈網絡,允許交換資產。如果參與者在進行事務時遇到問題,就會涉及到觀察者。觀察者不能影響事務方向并更改其中的任何內容。它們不用于驗證每個事務,只對用戶的請求進行干預。
GEO對常規(guī)事務使用類似于兩階段提交的框架。所有的參與者都要簽署一些東西,比如準備付款,如果每個人都有簽名清單,付款就會執(zhí)行。如果有一個參與國說沒有文件,觀察員就在兩個階段之間采取行動。在這種情況下,觀察者從任何節(jié)點獲取簽名列表,并將其發(fā)送給所有參與者,或者在不可能且事務在適當的時間過期時什么也不做。
去中心化網絡原子性的發(fā)展受到新概念的推動,這些新概念各有優(yōu)缺點。
· 散列TImelock合約的優(yōu)點是減少節(jié)點脫機時的損失以及發(fā)送方和接收方的安全性。問題是,資金必須凍結在渠道中,參與者必須經常上網,以避免損失。
· 對HTLC進行了修改,得到了HTLA,可以在不同的注冊中心使用HTLC,解決了節(jié)點脫機問題。
· 全新的解決方案是observers和notaries。我們在執(zhí)行時應特別小心,因為observers/notaries的集中可能會損害網絡,但適當設計的制度可能使其去中心化。