本站小编为你精心准备了设计通信进程通道服务方法参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
摘要:当前金融机构正在寻求使用区块链技术重构关键性应用软件。通常,设计者引用通信顺序进程(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模型,验证并发特性的大规模网络分布式应用,测试人员可以使用人工或者自动化方式对系统进行初步的形式化分析。
作者:赵扬 单位:中国证券登记结算有限责任公司上海分公司