当前位置:首页 - 第20页

10月15日

4.1 概述

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1176次

第4章 基于Gossip的P2P数据分发4.1 概述背书节点模拟执行签名的结果会经过排序服务(OrderingService)广播给所有的节点,它提供的是一种原子广播服务(AtomicBroadcast),即在逻辑上所有节点接收到消息的顺序是相同的,相同序号都是相同的内容,排序服务的详细原理和实现请参考第6章。排序服务广播的信息包括更新的状态信息和账本信息等,这些信息需要广播给所有节点。如果排序服务和所有节点都保持直接连接,在节点较多、数据量较大的情况下,容易形成单点故障或成为性能瓶颈。加入会员微信dedao555由超级账本节点组成的区块链网络本身就是一种去中心化的网络,利用P2P实现数据广播是显而易见的做法,最常见的实现方法是洪泛(Flooding)。洪

10月15日

4.2 超级账本中的Gossip协议

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1323次
4.2 超级账本中的Gossip协议

超级账本的Peer节点组成了一个P2P的网络,客户端SDK(Go、Java、Python、Node.js等不同语言)会提交请求给Peer节点,Peer节点处理后会提交交易提案(TransactionProposal)给背书节点(Endorser),然后进行背书签名(Endorsement),最后经过排序服务达成共识后广播给Peer节点,如图4-1所示。Gossip模块负责连接排序服务和Peer节点上,实现从单个源节点到所有节点高效的数据分发,在后台实现不同节点间的状态同步,并且可以处理拜占庭问题、动态的节点增加和网络分区。账本信息、状态信息、成员信息等都会通过Gossip协议进行分发。概括起来,Gossip协议主要完成的功能和目标有以下几个。1)在不需要所有节点都连接到

10月15日

4.3 成员认证及身份管理

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1160次

在Gossip网络中,每个节点都有超级账本网络认可的MSP(MembershipServiceProvider)颁发的证书(身份,Identity),从证书计算哈希值导出(目前的实现是直接用Endpoint转换而来的)的一个标识符称为节点的PKI-ID。身份管理模块管理节点标识符和证书之间的映射,在内部维护了以PKI-ID为键、证书为值的映射表pkiID2Cert,可以通过PKI-ID获取节点的证书,也可以更新节点的证书。同时还内置了MCS(MessageCryptoService)模块,它可以对消息进行签名和验证。更新节点证书的时候也会通过MCS模块验证证书是否有效,检查从证书导出的标识符是否和PKI-ID匹配。¤在生产环境中,假设所有节点都是双向TLS部署的,TLS连

10月15日

4.4 节点启动及成员管理

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1118次

超级账本网络维护着所有节点的信息,包括存活节点和故障节点,包括最近一次检测到它们存活或者掉线的时间,所有节点信息都是以PKI-ID为标识符的。要想加入到超级账本网络,节点必须至少要知道网络中一个存活节点的地址信息。节点启动的时候会读取配置文件core.yaml,读取bootpeer.gossip.bootstrap字段的值,这个字段可以设置为一个列表,它包含了它可以连接的一些节点,这个列表名为启动集合(BootstrapSet)。节点会给启动集合中的所有节点发送MembershipRequest消息,其包含的内容是:1)AliveMessage消息;2)本地节点已知的存活节点列表。其中,AliveMessage消息包含的内容有以下几项。1)PKI-ID;2)Endpoint(hos

10月15日

4.5 主节点选举过程

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1390次

主节点选举(Leaderelection)的用处是,判断在相同组织(Organization)中哪个节点可以作为代表连接排序服务。主节点选举过程是在Gossip层实现的,而且假设在某个时间段内,同时存在多个主节点,以避免拜占庭行为发生。加入会员微信dedao555主节点选择过程是基于组织范围(Scope)内广播的LeadershipMessage消息的,主节点选举的消息有两种类型。1)一种是参与主节点选举的消息proposal,它在竞争主节点的过程中广播给所有节点的消息。2)一种声明成为主节点的消息declaration,它通过比较,可申请为主节点的消息。两种消息的结构是一样的,包含的内容如下所示:1)节点的PKI-ID。2)是否声明为主节点。3)PeerTime,它又

10月15日

4.6 基于反熵的状态同步

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1143次

反熵(Anti-entropy)是指每个节点周期性地和邻居节点交换保存的数据,然后对比本地数据和邻居节点所保存的数据,检查是否有缺失或者过期的数据,然后更新本地节点的数据为最新的数据。超级账本的反熵实现比较简单,每个节点定期(10s)检查本地账本的区块序列号和其他节点账本的序列号。若发现本地的序列号比网络中其他节点账本的序列号小就在网络中广播一个GossipMessage_StateRequest消息,请求缺失序列号的区块。收到请求的节点如果有对应序列号的区块,会在网络中广播一个GossipMessage_StateResponse消息,使其包含本地账本中请求序列号的区块。这种方式是通过直接消息(directMessage)渠道进行的,节点接收到消息后会缓存起来,放到一个Payl

10月15日

4.7 数据传播过程

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1116次

数据传播机制(Datadissemination)的底层是由基于Gossip的节点通信支撑的。在这种模式下,不会构建每个节点之间的分离路径(disjointpath)信息,而是每个节点每次都随机性地选择k个节点来扩散消息。节点在某个时间点随机性地选择节点交换信息,信息流就在整个系统中流动起来了。这种交互方式比固定结构的方式更健壮,而且在遇到节点变动或者拜占庭问题的时候更容易维护。而且,固定结构的模式保留了每个节点之间的分离路径信息,消息复杂度会更大。注意,一个节点在随机选择其他节点时,它可以参考当前的成员视图、前一段时间的历史存活节点、启动集合,以及所有节点的列表等信息。每个节点有更高的出度(OutgoingDegree),不同节点独立选择不同的传播路径,这能够保证

10月15日

4.8 多通道的支持

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1075次

创建通道是为了限制信息传播的范围,是和某一个账本关联的。每个交易都是和唯一的通道关联的。这会明确地定义哪些实体(组织及其成员)会关注这个交易。客户端SDK通过发送一个CONFIGURATION的交易背书(Endorsement)请求来创建一个通道,然后通过排序服务广播给其他节点。创建通道的请求包含组成通道的组织(Organization)列表,即哪些组织可以加入到这个通道中。一旦创建好了通道,客户端SDK就可以通知组织内的节点加入到新创建的通道中。节点的Gossip模块就会给这通道内的组织广播一个消息:它属于这个通道了。Gossip要在多通道环境下还能正常工作,成员管理需要对通道内的成员节点进行维护,也就是说通道内的所有节点都需要知道其他节点的存在。代表一个组织和排序服务进行连接的节点会

10月15日

4.9 消息的验证策略

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1137次
4.9 消息的验证策略

每个通过Gossip协议转发给其他节点的消息都会声明节点的一些信息,其包括以下内容:·必须包含节点的PKI-ID;·必须由节点进行签名;·能够通过节点的证书进行验证。节点间点对点传播的消息没有签名,不会通过Gossip转发。假设在生产环境下,节点的TLS默认是开启的,并且有安全方面的考虑(防止流量劫持、重放攻击等)。唯一一个不用节点签名而且不通过点对点方式传播的消息是账本数据区块,它是由排序服务进行签名的。加入会员微信dedao555Peer节点接收到排序服务广播的数据区块以后,可以验证附加在区块里的签名信息,这个签名信息可以用来作为k/n的多签名(n个节点中至少有k个签名验证通过)验证策略。比如,SOLO和Kafka的排序服务只要求节点验证单个数字签名这样就可以验证

10月15日

4.10 消息的多路分用及分区

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 1094次
4.10 消息的多路分用及分区

通过Gossip协议广播的消息种类较多,不同种类的消息有不同的处理逻辑。Gossip模块利用GO语言的通道,实现一个消息的多路分用接口ChannelDeMultiplexer:typeChannelDeMultiplexerstruct{  channels[]*channel  lock  *sync.RWMutex  closed int32}其中lock是一个读写锁,用来同步对channels的处理;closed是通道是否关闭的标识,通道关闭就不能再从通道中读取数据;channels是一个channel数组,如下所示:typechannelstruct{&nb

网站分类

标签列表

最近发表

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

本站资源大部分来自互联网,版权归原作者所有!