GPS北斗時鐘-GPS時鐘服務器
GPS北斗時鐘-GPS時鐘服務器
如何才能同步分布式系統中的所有時鐘
分布式系統由Tanenbaum定義,“分布式系統是一組獨立的計算機,在”分布式系統 — 原理和范例“中作為用戶的單一,連貫的系統出現”。
區塊鏈通過構建分布式系統,嘗試實現分散的新數據存儲和組織結構。
首先,定位到分布式系統的原因主要是可擴展性,位置和可用性。區塊鏈也不例外。地理可擴展性,形成價值存儲網絡/信息保護區域,包括非集中式結構下的防篡改/零停機時間的可用性。這些未來都是使用分布式系統在block中實現的。
0.目錄
X.區塊鏈和分布式系統
1.簡介(同步和整體流程概述)
2.時鐘同步
2–1。物理時鐘(時鐘和時鐘偏移)
2–2。 時鐘同步算法(網絡時間協議(NTP)/伯克利算法)
3.邏輯時鐘
3–1。 Lamport的邏輯時鐘(*有序的多播)
3–2。 矢量時鐘(因果訂單組播)
4.控制
4–1。 集中算法
4–2。 分散算法
4–3。 分布式算法
5.選舉算法
5–1。 欺負算法
5–2。 環算法
6.阻止鏈和同步作為分布式系統
6–1。 塊鏈和時鐘同步(塊鏈和物理/邏輯時鐘)
6–2。 塊鏈和獨占控制算法(PoW·PoS·BFT中的獨占控制算法)
6–3。 塊鏈和選舉算法(PoW·PoS·BFT中的選擇算法)
1.簡介(同步和整體流程概述)
與集中式系統不同,在分布式系統中就時間達成一致并不容易。
在前一種情況下,可以基于全局共享時鐘確定順序關系,但是在后一種情況下,由于存在時鐘值錯誤和對應時間,因此難以共享時間。
但是,時間的順序并不是必要的,如果相對順序是固定的,通常就足夠了。
在本文中,將按以下順序解釋節點之間的同步。
時鐘同步是如何發生的?
使用邏輯時鐘和矢量時鐘的相對排序方法
關于分布式系統一致性的排除控制算法
關于分布式系統中的選舉算法
2.時鐘同步
2–1. 物理時鐘
時鐘和時鐘歪斜
大多數計算機都有保持時間的電路,這種設備稱為“時鐘”。這是基于頻率的振動,該振動可以通過晶體類型,切割方法和向精確加工的石英增加張力時的壓力大小明確定義。
雖然這個頻率相當穩定,但不能保證不同計算機的所有晶體都能以*相同的頻率運行。由此引起的同步時間的差異稱為時鐘偏差。
在這種情況下,特別是在實時系統中,如何使多個時鐘與現實時鐘同步以及如何同步時鐘是一個問題。
現實世界中的時間初基于平均太陽秒,但現在銫133過渡9,192,631,770次的時間定義為1秒,并且定義了原子時間和通用協調時間(UTC)。為了向需要準確時間的人提供UTC,使用WWV并且時間以±10毫秒的精度提供。
2–2. 時鐘同步算法
但是,大多數機器沒有WWV接收器。因此,每臺機器都需要時間跟蹤和管理算法,以便所有機器都可以同步時間。
順便提及,用于確定是否需要重新同步的錯誤,即時鐘偏移,如下測量。
將H定義為每臺機器計數的晶體振動引起的每秒中斷次數(刻度數),并將C表示為該時鐘的值。設Cp(t)表示機器的時鐘值,當UTC時間為t時。
如果將p定義為定義允許的時鐘偏差量的大漂移率,則假定它在以下范圍內運行。
1-p 《= dC/dt 《= 1+p
也就是說,在從先前同步開始經過At秒之后,兩個時鐘多分開2pΔt。
當保證在操作執行時沒有大于&的偏差時,必須至少每&/2p重新同步軟件。
網絡時間協議(NTP)
在許多協議中很常見,[Cristian,1989]首先提出的方法是一種與客戶服務器通信的方法。由于時間服務器具有WWV接收器或具有準確的時鐘,因此它可以提供當前時間。在與服務器通信時,重要的是延遲報告消息傳播延遲的時間,但是通過估計延遲,這里可以小化錯誤。目前,已知NTP能夠在1至50毫秒的范圍內實現精度。
伯克利算法
在諸如NTP的許多算法中,時間服務器是被動的并且僅回答查詢。另一方面,在Berkeley算法中,時間服務器接收每個參與節點所持有的時間,并且還基于平均值改變其自己的時間。當時間值不必與現實世界有關系時,很容易在同一當前時間達成一致,并且它對此算法有效。
3.邏輯時鐘
到目前為止,雖然我們描述了一種根據實際時鐘將時鐘與時間同步作為參考的方法,但通常只執行相對同步。這里,邏輯時鐘的概念用于確定相對順序。
3–1. Lamport的邏輯時鐘
為了同步邏輯時鐘,Lamport定義了一個名為happen-before的關系。表達式a→b表示“a發生在b之前”,這意味著事件首先發生,然后所有進程都同意事件b將發生。發生之前 — 可以在以下兩種情況下直接觀察到關系。
如果a和b是同一過程中的事件且a出現在b之前,則a→b為真。
2. 如果a是由一個進程發送的消息的事件,并且b是由另一個進程接收的該消息的事件,那么a→b也是如此。在發送消息之前無法接收消息,即使消息同時也需要有限的非零時間。
因為發生前關系處于過渡關系中,如果a→b和b→c,則可以證明a→c。如果事件x,y出現在不交換消息的不同進程中,則x→y和y→x都不為真,并且這些事件被認為是并發的。 (之前發生的關系未知。)
利用邏輯時鐘,通過分配所有進程對每個事件a一致的時間C(a)來測量相對時間。如果這些時間值是a→b,則通過向時間添加正值來校正它們,使得C(a)《C(b)。通過分配如下圖所示的時間值,可以掌握之前發生的關系。
在Lamport的邏輯時鐘中,如果a→b,則可以證明C(a)《C(b),但如果C(a)《C(b)則a→b不一定成立。換句話說,a→b是C(a)《C(b)的必要條件,并且不是充分條件。 Lamport的邏輯時鐘增加了改進,它是一個矢量時鐘,可以滿足這種必要和充足的條件。
*有序的多播
有關詳細信息,請參閱“分布式系統一致性”一文中的內容
在許多情況下,有必要在重復的副本之間執行*有序的多播。換句話說,所有消息都需要以相同的順序傳遞給每個收件人。 Lamport的邏輯時鐘可用于在*分布式系統下實現*有序的多播。
當進程收到某個消息時,它會根據時間戳按順序放入本地隊列。收件人向另一個進程多播確認。如果您按照Lamport的算法調整本地時鐘,則所有進程實際上都具有本地隊列的相同副本。只有當消息位于隊列的頭部并且被所有其他進程確認時,才有一個進程可以將隊列中的消息傳遞給正在運行的應用程序,因此,所有消息都以相同的順序傳遞到各處。換句話說,已經建立了*有序的多播。
3–2. 矢量時鐘
使用矢量時鐘,可以掌握Lamport邏輯時鐘無法掌握的因果關系。 假設事件a的向量時鐘是VC(a),則執行以下步驟,使得a→b成為VC(a)《VC(b)的必要和充分條件。
在通過網絡發送消息之前,節點Pi向矢量時鐘VCi [i]添加1,或者操作一些內部事件。
2. 如果處理Pi將消息m發送到Pj,則Pi在執行前一步驟之后將m的向量時間戳ts(m)設置為等于VCi。
3. 當接收到消息m時,進程Pj執行步驟1,將消息分發給應用程序,然后更新其自己的向量時鐘的每個k,如下所示:VCj [k]←max {VCj [k],ts(m)[k]}。
因果關系多播
通過使用向量時鐘,可以實現稍微弱于上述*有序多播的因果有序多播。
通過比較矢量時鐘的值并掌握發生在之前的關系,對于特定事件x,其他事件可以被分類為過去事件,并發事件和未來事件。例如,在上圖中,當事件d用作參考點時,過去事件是a,b,c,i,并發事件是j,l,m,未來事件是f,g,h。
此時,假設因果有序多播是過去事件和因果事件的序列,其中發生所有因果關系,以便在所有過程中保持一致,但是關于并發事件的順序是無關緊要的。通過這種方式,與Lamport的邏輯時鐘不同,可以用向量時鐘來掌握因果關系。
4.控制
多個進程之間的并發操作和協作操作是分布式系統的基本,但是為了保證對資源的獨占訪問,以便通過多個進程同時訪問相同資源時不處于不一致狀態時,需要分布式排他算法。
分布式獨占控制算法可以分為以下兩種類型。
基于Token的解決方案
基于權限的方法
在基于Token的方案中,很容易避免StarvaTIon(很長時間內不允許訪問資源)和死鎖(多個進程等待彼此的進展)。一個代表性的例子是Token環算法。但是,當持有Token的過程異常停止并且Token丟失,有必要只生成一個新Token,這種復雜性是一個嚴重的缺點。
許多其他分散的獨占控制算法采用基于權限的方法,并有許多不同的獲取權限的方法,我們將分別具體解釋。
4–1. 集中算法
通過模擬單處理器系統的功能,可以輕松實現分布式系統中獨占控制的單一訪問。在集中式算法中,一個進程被為協調器,并且當進程訪問共享資源時,請求消息被發送到協調器以獲得許可。如果其他進程未訪問共享資源,則協調器返回權限響應,并且在接收到回復之后,所請求的進程執行該進程。
很容易看出,該算法保證了對資源的獨占訪問,但它具有單點故障的嚴重缺點。雖然這可能是大型系統中的性能瓶頸,但這種簡單性帶來的優勢仍然可以彌補這些缺點。
4–2. 分散算法
假設各項都會重復n次。在分散算法中,當進程訪問資源時,需要批準大多數m》 n / 2。如果獲得大多數批準,則該過程獲得許可并可以進行處理。
雖然該方案解決了集中式算法的單點故障問題,但是如果有太多的節點試圖訪問,則存在另一個問題,即沒有節點可以獲得足夠的投票而無法獲得充分的性能。
4–3. 分布式算法
在該算法中,假設系統上所有事件的順序可以定義為*有序的關系。作為這個基礎,使用了前一章中描述的Lamport的邏輯時鐘,并且假設沒有消息會丟失。
當進程嘗試訪問共享資源時,它會創建一條消息,其中包含資源名稱,自己的進程號和當前邏輯時鐘,并將其發送給所有其他進程。當接收到該請求消息時,根據其自身狀態執行以下操作。
1. 如果收件人未訪問該資源且未嘗試訪問該資源,則收件人會向發件人返回“確定”消息。
2. 如果收件人已在訪問資源,請不要回復并執行排隊請求。
3. 如果收件人正在嘗試訪問資源但尚未完成,請將輸入消息中的時間戳與發送給其他進程的消息中的時間戳進行比較,并將較低的一個作為獲勝者。如果收到的消息具有小的時間戳,則收件人返回OK消息。如果自己的消息具有較小的時間戳,則接收方將不會將輸入消息排隊。
顯然,如果它不像process1或2那樣沖突,這個算法就能正常工作。即使在沖突的情況下,也只建立了唯個進程可以訪問的條件。
與集中式算法一樣,該算法可以保證獨占控制,不會出現死鎖或饑餓。 此外,沒有單點故障。 盡管如此,單點故障被故障n位置特征所取代。 它可以通過回復權限或拒絕權限并引入超時來解決,但也會出現其他問題,例如需要多播通信原語。 不幸的是,目前尚未設計出超越集中式算法的分布式算法,并且仍在研究中。
當比較各個算法時,變為如下。
5.者選舉算法
許多分布式算法需要一個特殊的過程,它具有作為協調者或發起者的角色。哪個過程是者,過程是否可以成為者是一個重要問題,研究人員在過去幾十年中一直在努力。
5–1. 欺負算法
當協調員失敗并且任何進程P注意到該情況時,P根據以下過程激活選舉。
· P向所有具有比其自身更高數值的進程發送ELECTION消息。
· 如果沒有人回復,P將贏得選舉并成為協調員。