Hyperledger gossip

  本文记述了Hyperledger Fabric 中 一种网络数据同步协议--gossip,它的主要作用是致力于账本数据的安全传输,保证不同节点之间状态的同步和完整。

  在fabric的网络中gossip的message是持续存在的,一个peer节点会不断、实时的接收到来自同一channel其他peers的账本数据。每一个gossip message都携带发送方的签名信息,这可以使得接受方轻易的辨别对方的身份和校验消息的完整性和合法性。当一个peer由于延迟、网络故障等原因而错过block数据的情况发生时,可以通过从其他拥有该block的peer处去同步,从而保证了账本的完整性和一致性。

  gossip 协议的三个主要功能:

  • peer发现和channel membership管理: 通过持续的去辨别同channel内其他peer的身份是否合法 和 校验peer是否宕机,来维持和管理channel内其他peers的信息

  • 账本数据的传播: 同channel内任何一个peer在发现block数据缺失时,可以从其他peer拷贝正确的block数据

  • 传输加速: 通过点对点的传输方式去更新账本,可以使得新上线的peer快速同步数据

  在gossip协议中 一个peer同时从多个peer接收数据,然后会从同channel中其他的peers选择出来一定数量N的peer,去将数据发送到这些被选中的peer中,N是一个可配置的常量。peer 也可以去主动拉去数据而不是被动的等待,整个过程不断的重复,直到ledger状态和channel的membership达到同步的状态。当一个channel的新块产生后每一个组织的leader会去从orderer节点去拉取该块,然后通过gossip协议去广播。

Leader eletcion

  在一个channel中每一个Application organization的peers都需要leader节点,leader节点的作用就是与orderer servers保持通讯,不断的去拉取新生成的块信息,然后广播给组织内的其他peer。

Static leader election

  静态选举方案,需要peer的管理员去定义一个或者几个peer为leader,当被配置为leader后则会与orderer servers通讯,但如果太多的peer被设置为leader则会导致orderer servers的带宽压力过大,所以在配置的过程中需要在稳定性和带宽性能上权衡一下。

  可以通过配置文件的方式和环境变量的方式去配置peer的选举模式:

  1. core.yaml 配置文件
peer:
# Gossip related configuration
gossip:
useLeaderElection: false
orgLeader: true
  1. 环境变量:
export CORE_PEER_GOSSIP_USELEADERELECTION=false
export CORE_PEER_GOSSIP_ORGLEADER=true

  以上两种配置方式都可以将peer设置为static的leader节点, 如果CORE_PEER_GOSSIP_USELEADERELECTION 和CORE_PEER_GOSSIP_ORGLEADER 同时被配置为false,则该节点会放弃成为leader。但不能同时设置为true,会导致配置不明确。

Dynamic leader election

  在动态选举的过程中,同channel内每一个组织会各自选择出一个peer成为leader与orderer servers通讯。 leader 节点要通过心跳消息来向其他节点证明自己依然活跃,当leader 节点的心跳消息超时后 peer节点会自动的发起下一轮的leader选举,选出一个新的leader。当因为网络环境问题导致网络分片时,会同时存在多个leader,当网络恢复的时候会保留一个leader其他的leader放弃自己的地位。 这种设计可以保证网络的弹性,同时也减轻了orderer servers的压力。

  以下配置控制leader的心跳频率:

peer:
# Gossip related configuration
gossip:
election:
leaderAliveThreshold: 10s

  同上面的静态选举配置一样,也需要通过配置文件或者环境变量来开启,这里就不重复描述了。

  以上两种方案的优点和弊端都很明显: static方案可以省去leader选举的过程,提高ledger同步的速度,减少网络带宽的压力,但是如果leader发生宕机的话整个组织都无法从orderer servers 获取block。dynamic 可以避免上面崩溃问题,但是leader选举过程延缓了同步速度和增加网络带宽压力。

Anchor Peer

  Anchor Peer是通过更新channel的config block来设置,同一个channel内每一个组织都有自己的Anchor Peer,它的主要用途是在跨组织通讯上。在gossip跨组织通讯过程中,A组织的节点Nx 至少要知道 B 组织的一个peer地址(可以通过该节点获取 B组织内其他peer的地址),才能进行跨组织的通讯。

  请不要将Anchor Peer 与 leader 的概念混淆,Anchor Peer 不一定是leader, leader也不一定是Anchor Peer。

Gossip Message

  一个在线的peer需要持续的去广播"alive"消息来证明自己存活。这个alive message 中包含证明自己身份的PKI Id 和对应私钥的签名,在秘钥不被泄漏的情况下该消息无法被假冒(目前来讲),同channel的其他peer会收集有效的alive message 来维持channel membership。 如果一个peer的alive message没有被其他peer接收到则会判定为dead,从而被其他peer从channel membership 中移除。

  虽然任何peer都可以属于多个channel,但由于channel之间是隔离的,因此peer不应该传递和分享不相关的channel的消息(即没有加入的channel)。 基于peer中channel记录的消息路由策略 则保证分发的block信息 不会被传递给不在该channel 内的peer。

  除了自动的分发消息之外,也会在每一个channel中的peer之间进行world state的协调。peer会不断的从同channel的其他peer处去拉取block来修补自身存在差异的world state。因为gossip 消息传播是不依赖于节点之间固定的链接,所以及时在发生某个节点宕机的情况仍然能保证ledger的完整性和持久性。

  peer之间的 使用Tls协议 进行peer-to-peer链接, 链接过程中会通过peer的Tls 证书去做协议层的认证,但并不能作为peer身份的认证。每一个peer都拥有由组织CA 颁发的身份证书,这个身份证书才是真正标明peer身份的。 每一个Block数据都会被 orderer service 签名后分发给对应channel的 leader peers。

  身份认证是由peer msp 实现的,当 peer 首次接入channel的时候, tls会话会与 msp identity绑定,可以基于此来验证peer是否有加入通道的资格。

Question

  1. 同组织的 peer 初次加入的时候, 在Anchor peer未设置的时候如何发现其他节点?

  2. leader的选举过程?如果同组织内的有static election peer 和 dynamic election peer 会怎么样?

  3. world state 和 block 数据同步的详细流程?

Hyperledger Fabric -- gossip 协议的更多相关文章

  1. Hyperledger Fabric源码分析之Gossip

    Gossip算法正如它的名字,小道消息只需要有人传播一次,那么过一段时间,所有人都会知道,就像新冠病毒一样,所以Gossip算法也有其它的别名"传染病扩散算法"."谣言传 ...

  2. [Hyperledger] Fabric系统中 peer模块的 gossip服务详解

    最近一直在看fabric系统中的核心模块之一——peer模块.在看peer的配置文件core.yaml的信息时,对其中的gossip配置选项很感兴趣.看了一上午,还是不能明白这个选项到底什么意思呢?表 ...

  3. Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务

    前言 在实验Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务.多组织共同运行维护Orderer服务中,我们已经完成了让普通组织运行维护 Orderer 服务,但是 ...

  4. Hyperledger Fabric Membership Service Providers (MSP)——成员服务

    Membership Service Providers (MSP) 本文将介绍有关MSPs的设置和最佳实践的详细方案. Membership Service Providers (MSP)是一个旨在 ...

  5. hyperledger fabric各类节点及其故障分析 摘自https://www.cnblogs.com/preminem/p/8729781.html

    hyperledger fabric各类节点及其故障分析   1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端 ...

  6. hyperledger fabric各类节点及其故障分析

    1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端向endorser提交交易提案,当收集到足够背书后,向排序服务 ...

  7. HyperLedger Fabric部署与链码解读

    1.Fabric简介 Fabric是超级账本中的一个项目,用以推进区块链技术.和其他区块链类似,它也有一个账本,使用智能合约,且是一个参与者可以分别管理自身交易的系统.它是一个联盟链.Fabric与其 ...

  8. [转帖]Hyperledger Fabric 学习一:简介

    Hyperledger Fabric 学习一:简介 https://www.jianshu.com/p/f971858b70f3?utm_campaign=maleskine&utm_cont ...

  9. Hyperledger fabric MSP成员管理

    Hyperledger fabric 1.0 基于 PKI(Public Key Infrastructure)体系,引入了MSP模块(Membership Service Provider): 成员 ...

随机推荐

  1. socket.io+angular.js+express.js做个聊天应用(二)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/www19940501a/article/details/27585321 接着上一篇 我用的开发工具 ...

  2. 判断浏览器是否为ie的最快方法

    var ie = !-[1,]; alert(ie); 只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的.对于标准游览器,如果数组里面最后一个字符为逗号,JS引 ...

  3. P2418 yyy loves OI IV

    题目背景 某校2015届有两位OI神牛,yyy和c01. 题目描述 全校除他们以外的N名学生,每人都会膜拜他们中的某一个人.现在老师要给他们分宿舍了.但是,问题来了: 同一间宿舍里的人要么膜拜同一位大 ...

  4. python获取网站http://www.weather.com.cn 城市 8-15天天气

    参考一个前辈的代码,修改了一个案例开始学习beautifulsoup做爬虫获取天气信息,前辈获取的是7日内天气, 我看旁边还有8-15日就模仿修改了下.其实其他都没有变化,只变换了获取标签的部分.但是 ...

  5. VC++程序运行时间测试函数

    0:介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录函数或者算 ...

  6. 构建 CDN 分发网络架构

    cdn基本架构: CDN的基本目的:1.通过本地缓存实现网站的访问速度的提升 CDN的关键点:CNAME在域名解析:split智能分发,引流到最近缓存节点

  7. java核心技术-多线程之线程基础

    说起线程,无法免俗首先要弄清楚的三个概念就是:进程.线程.协程.OK,那什么是进程,什么是线程,哪协程又是啥东西.进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代 ...

  8. 什么是控制反转(IOC)?什么是依赖注入?

    控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的.在传统编程方式中,业务逻辑的流程是应用程序中早已被设定好关联关系的对象来决定的 ...

  9. angularjs compile vs link

    https://docs.angularjs.org/guide/directive https://docs.angularjs.org/api/ng/service/$compile https: ...

  10. [Deep-Learning-with-Python]神经网络入手学习[上]

    神经网络入手[上] [x] 神经网络的核心部分 [x] Keras介绍 [ ] 使用Keras解决简单问题:分类和回归 神经网络剖析 神经网络的训练与下列对象相关: 网络层Layers,网络层结合形成 ...