Raft 协议 - Fabric

Raft 服务排序 1. 交易流程
Peer 节点构成了区块链网络的基础,托管账本,应用程序可以通过智能合约查询和更新这些账本 。具体来说,更新账本的应用程序涉及到三个阶段,该过程确保区块链网络中的所有节点保持它们的账本彼此一致 。
阶段一:提案
在第一阶段,客户端应用程序将交易提案发送给一组节点,这些节点将调用智能合约来生成一个账本更新提案,然后背书该结果 。背书节点此时不将提案中的更新应用于其账本副本 。相反,背书节点将向客户端应用程序返回一个提案响应 。已背书的交易提案最终将在第二阶段经过排序生成区块,然后在第三阶段分发给所有节点进行最终验证和提交 。
阶段二:将交易排序并打包到区块中
在此阶段,应用程序客户端把包含已背书交易提案响应的交易提交到排序服务节点 。排序服务创建交易区块,这些交易区块最终将分发给通道上的所有 Peer 节点,以便在第三阶段进行最终验证和提交 。
排序服务节点同时接收来自许多不同应用程序客户端的交易 。这些排序服务节点一起工作,共同组成排序服务 。它的工作是将提交的交易按定义好的顺序安排成批次,并将它们打包成区块 。然后将这些区块保存到排序节点的账本中,并分发给已经加入通道的所有节点 。如果此时恰好有一个 Peer 节点关闭,或者稍后加入通道,它将在重新连接到排序服务节点或与另一个 Peer 节点通信之后接收到这些区块 。我们将在第三阶段看到节点如何处理这个区块 。
在第二阶段的最后,我们看到排序节点负责一些简单但重要的过程,包括收集已提案的交易更新、排序并将它们打包成区块、准备分发 。
阶段三:验证和提交
交易工作流的第三个阶段涉及到从排序节点到 Peer 节点的区块的分发和随后的验证,这些区块可能会被提交到账本中 。
第三阶段排序节点将区块分发给连接到它的所有 Peer 节点开始 。同样值得注意的是,并不是每个 Peer 节点都需要连接到一个排序节点,Peer 节点可以使用协议将区块关联到其他节点 。
每个节点将独立地以确定的方式验证区块,以确保账本保持一致 。具体来说,通道中每个节点都将验证区块中的每个交易,以确保得到了所需组织的节点背书,也就是节点的背书和背书策略相匹配,并且不会因最初认可该事务时可能正在运行的其他最近提交的事务而失效 。无效的交易仍然保留在排序节点创建的区块中,但是节点将它们标记为无效,并且不更新账本的状态 。
总之,第三阶段看到的是由排序服务生成的区块一致地应用于账本 。将交易严格地按区块排序,允许每个节点验证交易更新是否在整个区块链网络上一致地应用 。
2. 排序服务实现
虽然当前可用的每个排序服务都以相同的方式处理交易和配置更新,但是仍然有几种不同的实现可以在排序服务节点之间就严格的交易排序达成共识 。
3. Raft 概念
分布式存储系统通常通过维护多个副本来提高系统的可用性,带来的代价就是分布式存储系统的核心问题之一:维护多个副本的数据一致性,也就是网络中排序节点遇到的问题 。
Raft 就是一种实现分布式共识的协议,去实现维护多个副本的数据一致性 。
Raft 被称为“崩溃容错”是因为系统可以承受节点的损失,包括领导者节点;前提是要剩余大量的排序节点(称为“法定人数()”) 。换句话说,如果一个通道中有三个节点,它可以承受一个节点的丢失(剩下两个节点) 。如果一个通道中有五个节点,则可以丢失两个节点(剩下三个节点) 。