区块链设计模式系列之一:对等网络

Posted CITAHub 开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链设计模式系列之一:对等网络相关的知识,希望对你有一定的参考价值。

继上一篇《》后,志伟再度为云原生区块链框架 CITA-Cloud 磨好剑。在探究技术的过程中,志伟对区块链设计模式深有感触。为了让大家更好的理解云原生区块链 CITA-Cloud 的设计理念,志伟写下了该系列的第一篇文章「对等网络」。在本文中,志伟详细解读了区块链设计中的常见模式,把非对等形态的软件变为对等形态。

https://talk.citahub.com/t/topic/1803

CITA-Cloud 的设计理念是尽量复用现有软件或者库来搭建区块链系统。但是区块链系统和传统的软件最大的区别:区块系统是一个对等网络,而传统软件一般都是 C/S 或者 Master/Slave 形态。


所以在区块链设计中常见模式,是将非对等形态的软件变为对等形态。比较简单的做法是所有节点作为 Server,同时又作为其他节点的 Client。比如,CITA-Cloud 网络微服务的实现:


GitHub - cita-cloud/network_direct [1] 


以及现有 CITA 的早期直连网络实现。我们可以认为把系统自带的网络库所提供的 Server/Client 形态的功能转换为对等网络。


该方案在实现上较简单,问题是生成配置文件,以及后续增加删除节点时修改配置文件。生成配置文件可以参见 CITA-Cloud 中生成网络的配置文件:


runner_k8s/create_k8s_config.py at master · cita-cloud/runner_k8s · GitHub [2]


以及前提是需要提供已知所有节点的 ip 和 port 信息。我们可以通过遍历所有 peers,为每个 peer 生成一个 net_config。port 是本节点的监听端口,用于启动 Server,而 peers 则是除自己之外其他节点的信息,用于本节点作为 Client 去连接其他节点。


因为,需要所有节点信息才能生成对应的配置文件,所以需要集中统一生成,但是对于联盟链来说问题不大,这些信息可以认为是对内公开的。同样,增加删除节点式,涉及到所有配置文件的修改,需要集中修改,才能生成新的配置文件,然后下发到所有节点。


此外,还有一个例子是 GitHub - cita-cloud/controller_poc [3]。其中,同步模块使用了 Syncthing。Syncthing 是一个文件同步工具,默认情况下是 Master/Slave 形态。我们也可以通过类似的方式,实现了一个对等模式的同步网络,任何一个节点增加的文件都会同步到其他节点去。


生成配置文件的代码参见:


runner_k8s/create_k8s_config.py at master · cita-cloud/runner_k8s · GitHub  [4]


如果要解决这种集中生成/修改配置文件的情况,网络部分就需要 P2P 网络库。其本质上是与上述解决方案类似,只是节点间会相互转发配置信息。这样新增或者删除节点,只要发送相应的配置命令到任意一个节点上,该节点就会将相应的变动转发给其他节点。一开始搭建网络时,在有多个初始节点的情况下,我们也可以转换为初始只有一个节点,其他节点都视为是动态新增的方案。


这个对于公链来说,这样的无权限区块链系统来说非常有必要。但是对于联盟链这样有权限的区块链系统来说,必要性则没有那么强。即便可以方便的动态增加删除节点,依然需要一个中心化的地方来修改相应的鉴权信息。比如用证书来实现节点网络的准入,那么增加/删除节点肯定需要在对应的 CA 处先颁发或者吊销相应节点的证书。


在另一种情况下,还有一种解决方案是选出一个 leader,依然采用 Master/Slave 的形态。Slave 节点也接收请求并转发给 leader,就像 Raft 和 Paxos 的区别,Raft 是 leader base 的一致性算法,而 Paxos 是无 leader 的。Paxos 的每个节点都可以处理客户端请求,Raft 只有 leader 节点可以处理客户端请求。但是 Raft 的 Slave 节点也可以接收客户端请求,然后内部转发给 leader 节点去处理,让表面看起来像是个对等网络。


P2P网络分为两大类:非结构化和结构化。参见:


P2P综述 - lotushy - 博客园 (cnblogs.com)  [5]


非结构化一般采用gossip的方式传播信息,前面所述的全链接可以算是gossip的一个特例。结构化一般采用 分布式散列表(DHT)方式,后面讲的 Master/Slave 加转发,可以认为是结构化方案的一个特例。


https://talk.citahub.com/t/topic/1803


银河系漫游指南


本次银河系计划发布之后,后续企业/开发者就可以只关注在某个微服务的实现上,其他微服务复用本次发布的实现。我们期待更多的企业/开发者参与到银河系计划中,在使用 CITA-Cloud v0.1.0 的过程中,提出宝贵的建议和意见,您可以收下这份银河系漫游指南:

1.欢迎进入  CITA-Cloud 官网,了解项目详情
https://www.citahub.com/#/cita-cloud
2.通过  CITA-Cloud 项目地址,为开源项目点赞: (❤️感谢点赞❤️)
https://github.com/cita-cloud/cita_cloud_proto 
3 .通过登入  CITA-Cloud 交流论坛,分享你的理解、建议以及疑惑;
https://talk.citahub.com/c/24-category/24
4.适配 CITA-Cloud 协议,成为银河系计划中的一份子
https://talk.citahub.com/t/topic/1743


更多咨询请扫码:


参考链接:

[1]https://github.com/cita-cloud/network_direct

[2]https://github.com/cita-cloud/runner_k8s/blob/master/create_k8s_config.py#L96

[3]https://github.com/cita-cloud/controller_poc

[4]https://github.com/cita-cloud/runner_k8s/blob/master/create_k8s_config.py#L650

[5]https://www.cnblogs.com/lotushy/p/9085642.html


以上是关于区块链设计模式系列之一:对等网络的主要内容,如果未能解决你的问题,请参考以下文章

共识算法系列之一:私链的raft算法和联盟链的 pbft 算法

三. 区块链系统的核心之一-分布式共识机制

F3D系统开发以太坊Fomo3D区块链模式

什么是区块链?区块链的核心技术包括哪些?

如何防止智能合约在区块链网络中被修改和部署?

区块链开发中各个层面的核心技术,源中瑞小六发布