# 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複製代碼
// 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;
}
複製代碼