一个新节点通过已知的节点加入到网络中,此时,它所知的网络节点信息是非常有限的,需要通过节点发现获知更多的节点,建立起足够的连接。另外,当一个新节点加入到网络时,原有网络节点也需要通过节点发现感知到新节点的加入。

分布在各地的网络节点总是会有上线离线的变化,有这就需要Fabric网络必须动态维护一个节点成员列表,这就需要节点成员管理。

一、节点发现与成员管理

1. 节点发现

一个节点要加入Fabric网络,必须要知道至少一个已知Fabric节点作为启动节点。

相关配置如下:

    # Gossip related configurationgossip:# Bootstrap set to initialize gossip withbootstrap: 127.0.0.1:7051

Fabric节点发现与成员管理流程如下图所示:

2. 网络连接层次的节点成员管理(在线,掉线)

在线节点(Peer)通过持续不断地广播“活着”的消息,来表明他们的可用性。

这一部分相当于心跳检测,如果节点离线,就在channel成员列表中删除节点。

3. 相关消息定义
// AliveMessage is sent to inform remote peers
// of a peer's existence and activity
message AliveMessage {Member membership  = 1;PeerTime timestamp = 2;bytes identity     = 4;
}// MembershipRequest is used to ask membership information
// from a remote peer
message MembershipRequest {Envelope self_information = 1;repeated bytes known         = 2;
}// MembershipResponse is used for replying to MembershipRequests
message MembershipResponse {repeated Envelope alive = 1;repeated Envelope dead  = 2;
}

二、节点间消息传播(Gossip)

1. 消息发送方式:
  • 点对点发送(end to end)
  • gossip方式——发送消息时会根据消息类型对节点进行过滤筛选(另外还会去除掉发送节点)后再随机(具体实现上是随机就近原则)选择kkk个节点发送消息。

这里采用的是push和pull方式。

2. push

节点有了新消息后,随机选择kkk个节点(例如,3),向它们发送新消息。kkk个节点收到后,继续随机选择kkk个节点发送新信息,直到所有节点都知道该新信息。

3. pull

所有节点周期性的随机选取kkk个(默认配置=3)个节点,向它们获取数据。Fabric中gossip协议pull操作如下:

/* PullEngine is an object that performs pull-based gossip, and maintains an internal state of itemsidentified by string numbers.The protocol is as follows:1) The Initiator sends a Hello message with a specific NONCE to a set of remote peers.2) Each remote peer responds with a digest of its messages and returns that NONCE.3) The initiator checks the validity of the NONCEs received, aggregates the digests,and crafts a request containing specific item ids it wants to receive from each remote peer and thensends each request to its corresponding peer.4) Each peer sends back the response containing the items requested, if it still holds them and the NONCE.Other peer                               InitiatorO   <-------- Hello <NONCE> -------------------------  O/|\    --------- Digest <[3,5,8, 10...], NONCE> -------->     /|\|    <-------- Request <[3,8], NONCE> -----------------      |/ \   --------- Response <[item3, item8], NONCE>------->     / \*/
4. pull相关消息定义
// GossipHello is the message that is used for the peer to initiate
// a pull round with another peer
message GossipHello {uint64 nonce         = 1;bytes metadata       = 2;PullMsgType msg_type = 3;
}// DataDigest is the message sent from the receiver peer
// to the initator peer and contains the data items it has
message DataDigest {uint64 nonce             = 1;repeated bytes digests  = 2; // Maybe change this to bitmap later onPullMsgType msg_type     = 3;
}// DataRequest is a message used for a peer to request
// certain data blocks from a remote peer
message DataRequest {uint64 nonce             = 1;repeated bytes digests  = 2;PullMsgType msg_type     = 3;
}// DataUpdate is the final message in the pull phase
// sent from the receiver to the initiator
message DataUpdate {uint64 nonce                = 1;repeated Envelope data      = 2;PullMsgType msg_type        = 3;
}

参考文档:Gossip数据传输协议

Fabric网络节点发现及成员管理相关推荐

  1. Hyperledger Fabric网络节点架构

    Fabric网络节点的组成如下图: 组成区块链网络相关的节点: 节点是区块链的通信主体,和区块链网络相关的节点有多种类型:客户端(应用).Peer节点.排序服务(Orderer)节点.CA节点 客户端 ...

  2. 搭建多节点Fabric网络(Windows系统)

    1.通过一台主机,使用Docker容器搭建多节点Fabric网络,实现6节点组成的Fabric网络(一个排序节点,组织1及其2个节点,组织2及其2个节点,cli命令交互节点). 2.配置二进制文件:在 ...

  3. fabric多节点网络环境搭建(v2.2)

    fabric多节点网络环境搭建(v2.2) 文章目录 fabric多节点网络环境搭建(v2.2) 一.机器准备与基础环境搭建 二.创建服务部署目录 三.准备证书文件 四.通道配置文件 五.配置dock ...

  4. python分布式邻居节点通讯_P2P网络及节点发现机制

    1 分布式网络介绍 1.1 Kad网介绍 1.2 Kad网络节点距离 1.3 K桶 1.4 Kad通信协议 2 邻居节点 2.1 NodeTable类主要成员 2.2 邻居节点发现方法 2.3 邻居节 ...

  5. 【Hyperledger Fabric入门】(一) 快速运行一个简单的Fabric网络2

    本文在Ubuntu18.04运行,fabric版本为2.3.0.本文篇幅较长,因此分为两篇.快速运行一个简单的Fabric网络1详见:link 目录 3. Orderer节点的启动 4. Peer节点 ...

  6. goland使用fabric-go-sdk连接虚拟机fabric网络(保姆级教学)

    之前实现了在虚拟机内部,使用fabric-go-sdk实现创建通道,加入通道,安装链码,调用链码一系列操作,现在我们尝试在外部windows系统用goland在连接虚拟机fabric网络进行操作,这样 ...

  7. 搭建Hyperledger Fabric网络

    注意:进行本文操作的前提是已完成Hyperledger Fabric的开发环境搭建,具体搭建步骤可参考[Hyperledger Fabric开发环境搭建(https://blog.csdn.net/y ...

  8. 标签传播算法_复杂网络社区发现算法汇总

    社区发现 这篇文章汇总了一些常见的社区发现概念和算法,包括 Modularity Q Fast Unfolding(Louvain Algorithm) LPA SLPA KL算法 GN算法 社区: ...

  9. 使用Devstack部署neutron网络节点

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...

最新文章

  1. 慢系统调用与信号中断
  2. C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...
  3. 110. Leetcode 714. 买卖股票的最佳时机含手续费 (动态规划-股票交易)
  4. Log4net 配置使用总结(一)
  5. 为特使建立控制平面的指南第2部分-识别组件
  6. Cacti 使用安装详解-企业级实例
  7. Flink中的Time与Window
  8. 殷浩详解DDD:如何避免写流水账代码?
  9. 1、css引入的方式有哪些?_发泡机的原理都有哪些呢?
  10. http://www.jianshu.com/p/42e11515c10f#
  11. 如何设置iPhone的手机铃声?【来自星星的你】
  12. 【Shiro第七篇】SpringBoot + Shiro实现会话管理
  13. 直方图规定化python+opencv实现
  14. 权重计算(1)——客观赋权法
  15. 发家致富:爬取双色球信息并统计
  16. 如何简单快速的写出幸运转盘抽奖
  17. PMO如何选拔和培养项目经理?
  18. 纯swift开发,弹幕,演唱会广告牌
  19. 所有程序员会面临的问题:程序员只能吃青春饭?
  20. 沈航计算机学院杨华,【沈航新青年·实践】电子信息工程学院“电信筑梦,科技振兴”暑期社会实践活动纪实...

热门文章

  1. 细节决定ERP项目启动会的成败
  2. 用python做简单的聚类分析案例_Python聚类算法之DBSACN实例分析
  3. c语言复习--寄存器变量(register)
  4. CubeIDE stm32硬件错误调试
  5. oracle服务器内存显示错误,Oracle数据库内存溢出或作业不可用导致数据库宕机
  6. leetcode714. 买卖股票的最佳时机含手续费
  7. Scrum板与Kanban如何抉择?敏捷工具:unqqu板与按照uvcqzrhm
  8. HBase优化之Apache Phoenix二级索引
  9. 《C嵌入式编程设计模式》读书笔记
  10. Windows Defender的一些渗透知识