“時間”是歲月更迭中的永恒話題。圍繞時間的探討一直在區塊鏈以及其他分布式系統中進行。時間連接起進程與節點,我們也用時間的“粒度”來衡量連塊成鏈的去中心化網絡。
分布式系統中關于時間的難題在于,不同參與者的“物理時鐘”很難達成完全一致。分布式系統大師Lamport提供了去中心化的方法,將問題轉化為時間與順序的聯系,提出了邏輯時鐘的概念,就像為包括區塊鏈在內的分布式系統引入了“生物鐘”。
stakefish編譯Vac分析師、ENS開發者Dean Eigenmann的一篇文章,介紹Lamport關于時間、時鐘和順序的論述,為大家提示理解區塊鏈和分布式系統時間另一個角度。
關于分布式系統的系列文章,用哪個話題開篇比較合適呢?以太坊的隱私交易協議AZTEC?以難以掌握著稱的Paxos算法?這些話題還是留在以后寫。今天,我選了一個基礎話題作為開篇:分布式系統的時間話題。
北京數字經濟將全產業鏈開放:鼓勵金融機構之間通過區塊鏈等方式共享業務數據:金色財經報道,北京市經信局對《北京市數字經濟全產業鏈開放行動方案(征求意見稿)》公開征求意見,方案提出6個方面、22條改革措施。其中包括:集中突破區塊鏈等領域關鍵核心技術,超前布局量子計算等未來科技前沿領域,鼓勵金融機構之間通過區塊鏈、隱私計算方式共享業務數據,穩妥推進數字人民幣全場景試點應用。[2022/4/24 14:44:56]
本文解讀的是圖靈獎得主、計算機大師Leslie Lamport的知名論文《分布式系統內的時間、時鐘和事件順序(Time, clocks, and the ordering of events in a distributed system)》。很久之后重讀這篇文章并提煉關鍵概念,另有一番趣味。
不熟悉Leslie Lamport的朋友可以大概了解一下,他以創造LaTeX、TLA+、Paxos而聞名,還論述了拜占庭將軍問題。當然還有Lamport時鐘(第一個邏輯時鐘),在本文中我們也將對其基本概念進行介紹。
我國首個金融區塊鏈國際標準通過立項:6月22日至7月3日,國際電信聯盟電信標準化部門(ITU-T)第十六研究組(SG16)全會在線上召開。在該次會議上,由中國人民銀行數字貨幣研究所牽頭提出,并與中國信息通信研究院、華為等單位聯合發起的國際標準《金融分布式賬本技術應用指南》(Financial Distributed Ledger Technology Application Guideline)在ITU-T SG16成功立項。
目前,全球主要國家和國際組織紛紛加快布局區塊鏈的技術創新和應用探索。我國在區塊鏈領域具備良好基礎,正在加快推動區塊鏈技術和產業的創新發展,促進區塊鏈在社會經濟中發揮作用。在金融行業,區塊鏈已應用于貿易金融、票據交易、供應鏈金融、存證、對賬、資產證券化等多個領域。
一直以來,數研所高度重視并積極開展法定數字貨幣和區塊鏈的標準化工作,以全國金融標準化技術委員會法定數字貨幣標準工作組為基礎開展分布式賬本技術等金融科技標準的研究與編制工作,以規范分布式賬本的技術與應用。(全國金融標準化技術委員會)[2020/9/4]
先來看看分布式系統的定義。Lamport給出的定義是這樣的:
動態 | 深圳基于區塊鏈的網貸良性退出系統已在20家網貸機構投入應用:據深圳特區報消息,據深圳地方金融監管局透露,今年上半年,深圳在全國率先推出以區塊鏈技術為核心的P2P網貸機構良性退出統一投票表決系統,至今已在全市20家網貸機構投入應用,導入出借人8萬余人,待收本金102億余元。[2019/11/6]
“如果一個系統內信息傳遞的延遲,與單一進程里的事件間隔的時間相比是不能忽略不計的,則稱之為分布式系統。”
我喜歡這個定義,因為其專注在發出和收取消息之間的延遲上。
明確了定義,我們開始正式介紹。
為事件排序在本地再簡單不過了。你只需在發生的時候為每一個事件賦予一個時間戳就好了。我們能夠獲得所有事件的總體順序,也就意味著,所有事件都能夠按照特定順序排列。
但這個問題在分布式系統的情境下就困難多了。為什么呢?
一切皆因分布式系統的一個非常簡單的性質:在節點之間傳遞的消息在發出之后,在未來的任何時間點都可能到達0次、1次或多次。這樣的話,分布式系統的各個節點之間就不能就時間達成一致。舉例來說:
聲音 | 黃昭慈:遠光軟件區塊鏈業務布局主要圍繞電力行業應用上:近日,遠光軟件區塊鏈應用事業部總經理黃昭慈透露:“遠光軟件在區塊鏈業務布局主要圍繞電力行業應用上,此次備案主要包括分布式能源交易、商品溯源、供應鏈金融、數據存證以及企業應用服務平臺等5個產品。”[2019/4/12]
一個節點可以向另一個節點發送一條消息標注當前時間是12:00:00,但是接收者不知道消息用了多長時間傳遞,也就沒辦法確認到達時是否仍為12:00:00。如果這樣,節點之間來來回回傳一整天消息也無法確定信息是否同步。如果不能在時間上達成一致,我們也就不能在事件順序上達成共識。
那怎么解決這個問題?
在分布式系統內,多個節點通過互相發送信息進行交流。節點收到信息首先確認這個信息,然后執行他的下一個事件。這樣的順序,本來就顯示了一種“因果關系”:信息必須先被發出,才能被收到。
譯注:這種因果關系是一種時序關系,不是邏輯上的原因和結果的關系。
那么根據因果關系就能得出順序:發消息肯定在被他被接收之前。單看A、B兩個事件,我們就能給出“發生在……之前(happens before)”的關系來描述順序了。
現場 | CSDN創始人Jiang Tao:區塊鏈發展困難是因為沒有解決真正的市場需求:金色財經現場報道,1月29日,CSDN創始人Jiang Tao在“區塊鏈平昌論壇2019(Blockchain Pyeongchang Forum, BPF2019)”第二天的圓桌論壇上指出,當前區塊鏈發展困難很大原因是沒有解決真正的市場需求,有時候可能去中心化比中心化更糟糕,所以并不會受市場歡迎。同時,他也指出,現在看到了區塊鏈的價值,但是配套的規則相對落后,并沒有創造一個公平、透明的交易環境。[2019/1/29]
現在,無需系統物理時間概念就可以識別這種關系:如果A對B造成了因果影響,事件A肯定發生在事件B之前。因果關系讓我們確定系統中相關事件的順序,是一種偏序(partial order)。
偏序也有一個局限性:如果不能確定相關性,我們可能不知道系統中每個事件的確切順序。因為可能有許多事件會在整個系統內并發(concorrent),并非所有節點都知道這些事件的發生。
時鐘
不過既然我們已經有了偏序,接下來把時鐘添加到系統中,就能獲取系統中的所有事件的總序(total order)。
剛才我們已經知道了在分布式系統里使用物理時鐘是不可行的,那么我們就需要使用邏輯時鐘。邏輯時鐘本質上是一個函數,能夠給事件分配一個數字。這個數字表示事件發生的時間(從現在開始我們將把這個數字稱為時間),與物理時間沒有任何關系。
我們假設在這個分布式系統里的每個節點都有一個時鐘。這個時鐘隨著在執行的事件間滴答行進,但時鐘的行進并不被視為系統中的事件。對于系統中某個節點上發生的每個事件,邏輯時鐘都會為該事件分配一個數字。根據這個假設,我們可以滿足以下時鐘條件:
?a,b a → b ? C(a) < C(b)
以上表達式代表什么意思呢?
箭頭“→”表示“發生在……之前(happened before)”,而C代表時鐘函數,可簡單的理解為時間。所以要表達意思就是:對于每一個事件a,b,如果a發生在b之前,那么a的時間要小于b的時間。
但反推不成立,僅因為一個事件的時間比另一個事件的時間小,并不能說這個事件發生在前,他們可以是并發的。
在上面的圖片中,我們可以看到節點α上,時間1和時間2各發生了1個事件;節點β在自己的時間1發生了1個事件。在節點α的時間1和時間2發生的事件,與在節點β的時間1發生的事件是并發的,沒有因果聯系。
如果a和b是單個節點上的兩個事件,且a發生在b之前,則a的時間應該小于b的時間。
如果a是一個發送消息的節點,b是另一收到消息的節點,那么a的時間仍然應該小于b的時間。
節點需要在事件之間讓時鐘進行計時。如果不是,則必須將時鐘調快到比從其他節點接收到的任何消息中包含的時間更晚的時間。b就可以在時鐘調快之后發生了。
現在好啦,我們可以使用滿足這些條件的時鐘,建立整個分布式系統的總序啦,這里只是簡單的根據各個事件的時鐘給出的時間來排序。
用例
最后我們設置一個狀態機來看看邏輯時鐘的用法。比如我們有一個分布式系統,多個節點都想訪問其中的共享資源,每次只能訪問一個節點。狀態機需要滿足以下條件:
條件1:可以訪問資源的節點必須先釋放資源,然后其他節點才能訪問他。
條件2:對資源的請求必須按照發出請求的順序被授予訪問權。
條件3:如果每個被授予訪問權的節點最終都釋放了資源,那么每個請求最終都會被授權。
為什么不引入一個中間協調者呢?因為這樣的話,如果發生較早的請求卻較晚到達,就不能滿足條件2了;另一個原因是,我們希望采取去中心化的解決方案。
所以我們還是要構建條件,滿足這個邏輯時鐘。如何滿足條件呢?
Lamport為我們提供了一個去中心化解決方案。首先,我們要讓所有節點儲存一個請求隊列。其次,要滿足一些簡單的假設:
假設1:所有消息都按發送的順序接收。
假設2:所有消息最終都被接收。
假設3:每個節點都可以直接向系統中的所有其他節點發送消息。
如果有更復雜的算法和協議,可以忽略以上假設。
現在我們可以定義滿足這3個條件的算法,并在實踐中展示時鐘的功能:
1、如果一個節點想要請求一個資源,他會用當前時間創建一個請求,將他添加到他的隊列中,并將他發送給其他每個節點。
2、所有其他節點將這個請求放入他們的隊列中并發回響應消息。
3、釋放資源的節點發送帶有當前時間的釋放消息,并從其隊列中刪除原來的請求。
4、當節點收到釋放的消息時,他將從自己的隊列中清除相關請求。
5、當一個節點在他的隊列中有自己的排在任何其他請求之前請求時(按照時間總序),他可以自由地訪問該資源,并且他在該時間之后從所有其他節點接收到消息。
上述算法是完全由各個節點獨立執行的去中心化算法,他利用時鐘來對請求按總序進行排序,從而實現對資源的訪問和節點間的協調。
好啦,我們通過文章大概了解到如何使用這些邏輯時鐘對分布式系統中的事件進行排序,并分析了分布式系統訪問資源時確定順序的實際應用問題。歡迎大家的意見反饋,我將繼續更新更多關于分布式系統的文章。
原文標題:Time, clocks, and order
作者:Dean Eigenmann
編譯:stakefish
金色財經消息,2019年12月31日,中國軟件行業協會區塊鏈分會聯合發起了“區塊鏈行業應用反洗錢標準”起草小組.
1900/1/1 0:00:00最近,2018年11月從 BCH 社區分叉出來的 BSV 突然火起來,主要原因是其價格突然爆發。“嗯?不是去年很多人還說這是個騙子項目么?連幣安都把他下架了.
1900/1/1 0:00:00金色財經近期推出Hardcore欄目,為讀者提供熱門項目介紹或者深度解讀。以太坊上的應用程序管理財務價值,使安全性變得絕對重要。作為一種新興的、實驗性的技術,智能合約當然也受到了相當多的攻擊.
1900/1/1 0:00:00中國在其他領域吃的專利的虧,似乎都要在新技術方面補回來。5G如此,區塊鏈更如此。2019年結束,互鏈脈搏統計了截至2019年12月底的區塊鏈專利申請情況,中國去年新增區塊鏈專利4488件,數量上.
1900/1/1 0:00:002020年伊始,一只巨大的黑天鵝出現。1月3日,伊朗指揮官蘇萊曼尼在伊拉克被美國無人機轟炸身亡。8日,伊朗展開了對美軍伊拉克基地的軍事反擊.
1900/1/1 0:00:00金色財經 區塊鏈1月15日訊 美國證券交易委員會(SEC)旗下投資者教育和倡導部門發出警告,敦促公民對IEO保持警惕,這也是該監管機構第一次發布針對IEO的警告.
1900/1/1 0:00:00