Fabric网络组织与主节点选举

1、Fabric网络组织

Fabric网络组织按以下结构组成:Fabric网络-->Channel通道-->组织(成员)-->节点。即整个网络由数个通道组成,每一个通道都由多个组织构成,而每一个组织内部由数个节点组成(可能由功能或其余划分方式分为多个节点)。以下图所示: 算法

在这里插入图片描述

2、主节点(leader peer)选举

一个组织(实际上是成员)在一个通道上能够有多个Peer节点,这时候为了提升通讯效率,须要选举出来一个主节点(leader)做为表明和排序服务节点通讯,负责从排序服务节点处获取最新的区块并在组织内部同步。有以下两种方式:微信

1. 静态指定

配置文件中配置网络

# Gossip related configuration
 gossip:
        # Defines whenever peer will initialize dynamic algorithm for
        # "leader" selection, where leader is the peer to establish
        # connection with ordering service and use delivery protocol
        # to pull ledger blocks from ordering service
 useLeaderElection: false
        # Statically defines peer to be an organization "leader",
        # where this means that current peer will maintain connection
        # with ordering service and disseminate block across peers in
        # its own organization
 orgLeader: true
复制代码

2. 动态选举

相关配置:ide

# Gossip related configuration
 gossip:
        # Leader election service configuration
 election:
            # Longest time peer wait for stable membership during leader election startup (unit: second)
 startupGracePeriod: 15s
            # Interval gossip membership sampled to check its stability (unit: second)
 membershipSampleInterval: 1s
            # Time pass since last declaration message before peer decide to go to election (unit: second)
 leaderAliveThreshold: 10s
            # Time between peer sends propose message and declare itself as a leader (sends declaration message) (unit: second)
 leaderElectionDuration: 5s
复制代码

3. leader节点选举流程

选举流程(简要):区块链

若是当前没有leader,进入选举算法
    若是当前是leader:广播leadership declearation,若是收到比本身小的leadership declearation,本身变为follower;
    若是当前是follower:指定时间内没有收到leadership declearation,则认为leader离线了,进入选举流程
复制代码

选举算法(简要):this

广播提议本身为leader消息
各个节点收集选举消息
比对ID,若是本身ID最小,则本身为leader
复制代码

详细过程以下图所示: spa

在这里插入图片描述

伪代码实现:code

// Gossip leader election module
// Algorithm properties:
// - Peers break symmetry by comparing IDs
// - Each peer is either a leader or a follower,
// and the aim is to have exactly 1 leader if the membership view
// is the same for all peers
// - If the network is partitioned into 2 or more sets, the number of leaders
// is the number of network partitions, but when the partition heals,
// only 1 leader should be left eventually
// - Peers communicate by gossiping leadership proposal or declaration messages

// The Algorithm, in pseudo code:
//
//
// variables:
// leaderKnown = false
//
// Invariant:
// Peer listens for messages from remote peers
// and whenever it receives a leadership declaration,
// leaderKnown is set to true
//
// Startup():
// wait for membership view to stabilize, or for a leadership declaration is received
// or the startup timeout expires.
// goto SteadyState()
//
// SteadyState():
// while true:
// If leaderKnown is false:
// LeaderElection()
// If you are the leader:
// Broadcast leadership declaration
// If a leadership declaration was received from
// a peer with a lower ID,
// become a follower
// Else, you're a follower:
// If haven't received a leadership declaration within
// a time threshold:
// set leaderKnown to false
//
// LeaderElection():
// Gossip leadership proposal message
// Collect messages from other peers sent within a time period
// If received a leadership declaration:
// return
// Iterate over all proposal messages collected.
// If a proposal message from a peer with an ID lower
// than yourself was received, return.
// Else, declare yourself a leader

复制代码

4. 消息定义

// Leadership Message is sent during leader election to inform
// remote peers about intent of peer to proclaim itself as leader
message LeadershipMessage {
    bytes pki_id        = 1;
    PeerTime timestamp = 2;
    bool is_declaration = 3;
}
复制代码

关注区块链技术,可关注微信公众号: orm

相关文章
相关标签/搜索