Hyperledger Fabric -- gossip 协议
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的选举模式:
- core.yaml 配置文件
peer:
# Gossip related configuration
gossip:
useLeaderElection: false
orgLeader: true
- 环境变量:
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
同组织的 peer 初次加入的时候, 在Anchor peer未设置的时候如何发现其他节点?
leader的选举过程?如果同组织内的有static election peer 和 dynamic election peer 会怎么样?
world state 和 block 数据同步的详细流程?
Hyperledger Fabric -- gossip 协议的更多相关文章
- Hyperledger Fabric源码分析之Gossip
Gossip算法正如它的名字,小道消息只需要有人传播一次,那么过一段时间,所有人都会知道,就像新冠病毒一样,所以Gossip算法也有其它的别名"传染病扩散算法"."谣言传 ...
- [Hyperledger] Fabric系统中 peer模块的 gossip服务详解
最近一直在看fabric系统中的核心模块之一——peer模块.在看peer的配置文件core.yaml的信息时,对其中的gossip配置选项很感兴趣.看了一上午,还是不能明白这个选项到底什么意思呢?表 ...
- Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务
前言 在实验Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务.多组织共同运行维护Orderer服务中,我们已经完成了让普通组织运行维护 Orderer 服务,但是 ...
- Hyperledger Fabric Membership Service Providers (MSP)——成员服务
Membership Service Providers (MSP) 本文将介绍有关MSPs的设置和最佳实践的详细方案. Membership Service Providers (MSP)是一个旨在 ...
- hyperledger fabric各类节点及其故障分析 摘自https://www.cnblogs.com/preminem/p/8729781.html
hyperledger fabric各类节点及其故障分析 1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端 ...
- hyperledger fabric各类节点及其故障分析
1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端向endorser提交交易提案,当收集到足够背书后,向排序服务 ...
- HyperLedger Fabric部署与链码解读
1.Fabric简介 Fabric是超级账本中的一个项目,用以推进区块链技术.和其他区块链类似,它也有一个账本,使用智能合约,且是一个参与者可以分别管理自身交易的系统.它是一个联盟链.Fabric与其 ...
- [转帖]Hyperledger Fabric 学习一:简介
Hyperledger Fabric 学习一:简介 https://www.jianshu.com/p/f971858b70f3?utm_campaign=maleskine&utm_cont ...
- Hyperledger fabric MSP成员管理
Hyperledger fabric 1.0 基于 PKI(Public Key Infrastructure)体系,引入了MSP模块(Membership Service Provider): 成员 ...
随机推荐
- C#调取webapi
//定义参数 C#调取webapi var content = new FormUrlEncodedContent(new Dictionary<string, string>() { { ...
- criterions的选择
criterions分为几类,其中有classification criterions与regression criterions.classification criterions是针对离散的,re ...
- windows下安装redis并设置自启动
一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...
- ddt 接口框架数据处理调用excel 处理
之前在csdn写过这里就不赘述了: https://blog.csdn.net/chen498858336/article/details/84351146
- Spring源码分析(二)容器基本用法
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在正式分析Spring源码之前,我们有必要先来回顾一下Spring中最简 ...
- 包学会之浅入浅出Vue.js:结业篇
在第一篇<包学会之浅入浅出Vue.js:开学篇>和上一篇<包学会之浅入浅出Vue.js:升学篇>的学习中,我们首先了解了Vue环境的搭建以及两个重要思想——路由和组件的学习,通 ...
- Debian 8 安装 Qt5 和 go-qml
一.安装相关依赖 ~ ᐅ sudo apt-get install build-essential libgl1-mesa-dev ~ ᐅ sudo apt-get install qt5-defau ...
- OC 知识:Foundation 框架及相关类详尽总结
本文用来介绍Foundation框架的相关知识,以及Foundation框架所提供类的相关知识总结. 1. 框架介绍 框架是由很多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使开发程序变得更加 ...
- MySQL-ALTER TABLE命令学习[20180503]
学习ALTER TABLE删除.添加和修改字段和类型 CREATE TABLE alter_tab01( id int, col01 char(20)) engin=I ...
- python3通过纯真IP数据库查询IP归属地信息
在网上看到的别人写的python2的代码,修改成了python3. 把纯真IP数据库文件qqwry.dat放到czip.py同一目录下. #! /usr/bin/env python # -*- co ...