本站小編為你精心準備了設計通信進程通道服務方法參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
摘要:當前金融機構正在尋求使用區塊鏈技術重構關鍵性應用軟件。通常,設計者引用通信順序進程(CSP)庫去構建這些軟件,便可方便套用CSP模型去驗證軟件在并發通信過程中的安全性。然而,在現有的CSP庫中,通道以面向對象方式被抽象、設計和實現,在名稱解析、序列化和反序列化方面存在單點故障和額外開銷,設計者難以使用他們來構建大規模網絡分布式應用。利用Kademlia網絡實現的路由算法,對CSP模型中提出的通道進行重新抽象,并把它設計為由一組遠程調用過程構成的網絡服務,使其具有改良的可靠性和擴展性,為設計者在區塊鏈網絡中開發大規模、安全的分布式應用提供了現實意義。
關鍵詞:Kademlia覆蓋網絡;通信順序進程(CSP)通道;進程同步通信
使用進程代數方法以通信順序進程(CommunicatingSequentialProcesses,CSP)為模型,對網絡分布式軟件中的進程進行形式化驗證是確認其系統并發行為的有效理論途徑[1]。它適用于基于CSP原語和實用概念構建的軟件。然而,在技術應用層面,金融行業開始將區塊鏈技術用來構建大規模網絡分布式應用[2]。面向金融科技行業而設計的領域特定編程語言尚不成熟[3],以面向對象的通用編程語言實現CSP原語、實用概念的做法對構建大規模、可擴展、其并發特性可驗證的網絡分布式系統依然具有現實意義[4-8]。例如,Ian等[6]提出,通道被抽象為了具有緩沖或者非緩沖類型,具備數量不確定的讀取或者寫入端的語言級別對象,進程可以通過它發送和接收消息。但是,不支持分布在網絡主機上的進程之間相互通信。文獻[5]以及對它的修訂文獻[9],采用基于名稱解析方法訪問遠程對象的機制,實現了適用于進程在網絡主機之間進行通信的通道[10]。進程使用通道的基本過程:①A進程在本地創建通道對象;②A進程通道對象的名稱;③B進程通過名稱服務解析獲取通道的讀取或者寫入端對象;④A和B通過對象發送消息。在工程上,文獻[5,9]存在兩方面的問題:①在可靠性方面,系統采用無冗余設計的遠程對象訪問服務。如果有關功能的實現發生故障,那么系統就無法管理通道實例;②在擴展性方面,系統對語言級別對象進行序列化和反序列化,在時間和空間上均存在額外開銷[11]。如果進程委托遠程對象訪問服務管理大量的通道實例,那么進程頻繁創建、加入、獲取通道對象會延長系統的響應時間。
1設計方法
在Kademlia等[12]網絡上設計管理和實現通道的方法可以解決以上兩方面的問題。該方法的核心是:①該對等網絡采用將鍵字與節點標識的散列值進行按位“抑或”后,比較相對距離的方法,每個節點都實現了相對可靠的查找和讀寫塊表中哈希鍵值的功能,每個節點都可以為查找通道提供名稱解析功能,不存在單點故障。而且用戶可以查找至多3個鄰近的節點,以副本形式保存哈希鍵值[13],該特性為實現冗余提供了可能。因此,構建可靠且本質上具備擴展特性的通道服務是可能的。②在網絡主機之間對語言級別的通道對象序列化和反序列化產生額外開銷之事實,啟發了以簡化的方式對通道進行抽象和實現的構想。即選擇使用遠程過程調用實現進程同步通信,可以降低對通道對象序列化和反序列化產生的額外開銷,提高系統性能。
2設計通道
通道必須滿足以下原則:①進程之間是匿名的;②進程之間的通信是同步的;③進程之間的通信是有序的。在本文闡述的方法中,通道被重新抽象為滿足以上原則的一組可被遠程調用的過程,以及它們所操作的狀態數據。這些過程被設計為在對等網絡節點上運行著的有狀態的網絡服務的一部分。因此,在設計中不存在對通道進行具有創建、銷毀語義的操作,通道也不具有在面向對象的抽象中的生命周期。在設計中通道是包含實現以下功能的過程:①接收調用者關于讀取和寫入操作的請求;②按照順序對讀取和寫入操作進行匹配;③向調用者返回有關讀取和寫入操作之請求的應答。為了使設計符合原則①和②的要求,采用分別對讀取和寫入請求的數量進行判定的方式控制同步通信。具體在上述過程②中,當調用者發出有關讀取和寫入請求的數量分別達到了為同步通信而設置的數量時,在通道上才會發生同步通信,然后服務向每個調用者返回關于讀取或者寫入請求的應答。因此,服務對讀取和寫入請求的處理,分別與讀取和寫入請求的數量有關,而與調用者無關。而且,進程無需加入通道即可進行讀取和寫入操作。為了使設計符合原則③的要求,采用2種可遞增的序號,確定有關調用時的交互操作和同步通信的順序。具體的,通道被設計保存以下狀態信息:①調用者和會話序號;②消息序號。以會話序號保證進程在多次調用通道服務的交互過程中順序的一致性的做法,可以保證進程間同步通信的過程滿足偏序關系,以消息序號控制讀取和寫入操作同步的做法,就是保證進程間同步通信的過程滿足全序關系。例如,為了滿足順序關系,服務只響應同時滿足以下2個條件的讀取和寫入請求,其他請求會被忽略:①在調用者有序發出的所有讀取或者寫入請求中,按照調用者分組后存在最大的會話序號。②在調用者有序發出的所有讀取或者寫入請求中,其消息序號與通道當前的消息序號在數值上是相同的。在實現中通道是有狀態的。服務按照通道的名稱分別保存:①消息序號;②調用者和會話序號。
3管理通道
在本文闡述的方法中,對通道的管理也被抽象為實現查找和配置功能的一組可被遠程調用的過程。這些過程被設計為在對等網絡節點上運行著的有狀態的網絡服務的另外一部分。在設計中對通道的管理包含以下功能:①根據通道的名稱定位服務;②配置或者修改通道的參數和狀態。在網絡節點上的進程調用遠程過程讀取或者向通道寫入消息之前,它通過遠程調用一個實現查找功能的過程在網絡中尋找服務。在設計上該功能采用Kademlia網絡中實現的路由算法。因為該路由算法盡可能保證了在網絡擾動的條件下的穩定和可靠[14-15],所以在任意網絡節點上的進程,均可以根據通道的名稱定位到相同的服務。同時,因為其采用哈希算法的性質,決定了結果在空間具有均勻分布的特點,在本質上存在負載均衡的效果。根據通道的名稱,在網絡節點上的進程定位服務以后,通過遠程調用一個實現配置功能的過程,設定通道的參數。通道服務按照通道的名稱保存參數信息,它被設計為包括:①緩沖隊列的大小;②讀取的數量;③寫入的數量;④健康狀態。其中,①被用來設計具有緩沖特性的通道,②和③被用作同步通信的條件,④被用于標志是否中毒[8]。在實現中,通道的參數和狀態信息,均按照通道的名稱分組后以鍵值的方式保存在鄰近的節點中。
4結語
在區塊鏈底層Kademlia覆蓋網絡中,工程人員可以根據CSP模型中通道的概念,采用新方法設計和實現通道服務。與文獻[5,9]相比,該方法利用在Kademlia網絡上實現的穩定可靠的路由算法,解決了將通道抽象為語言級別對象時,集中式名稱解析服務、對象訪問機制而產生的可靠性和擴展性問題[13]。雖然在強烈的網絡擾動中,通道服務的正確性可能會受到有限影響[14-16],但是金融行業采用的技術系統,具有較強的穩定性,可以滿足關鍵應用的可靠性要求。系統開發人員可以使用該方法設計實現的通道服務,構建需要通過CSP模型,驗證并發特性的大規模網絡分布式應用,測試人員可以使用人工或者自動化方式對系統進行初步的形式化分析。
作者:趙揚 單位:中國證券登記結算有限責任公司上海分公司