hyperledger fabric的三个重要角色
- client
客户端,用来发提案,可以是cli,go,node , ... sdk - peers
最常见的节点,维护了ledger的副本,记录、验证、同步数据 - orderer
接收背书后的请求,排序,验证,生成区块,最后交给peer节点
共识达成
fabirc的共识达成分为三步
1.客户端发起提案,根据背书策略,背书节点进行背书
2.orderer进行排序
3.orderer进行验证,然后生成区块,交给peer进行应用
三个步骤保证了区块链数据的一致性和正确性
交易流程
1.首先由客户端的SDK发起提案,根据背书策略,背书节点进行背书
2.在背书节点进行模拟执行事务,产生结果(读写集),这个读写集就是读了什么数据写了什么数据,读写集会被每一个背书节点签名,然后把这个读写集返回给SDK或者CLI,根据背书策略来检测是否是合法请求
3.client把读写集交给orderer节点进行排序(同一时间可能会有不同的客户端提交背书后的读写集,这个提交操作是并行的)
4.orderer节点要验证读写集,排序,生成区块,最后把区块提交给所有的peer节点,让他们更新ledger数据
orderer节点
区块链要解决双花问题,解决双花就是要把并行的事情变成线性,把可能引发的不一致的并行操作变成串行操作。车票例子(采用中心节点的方式)
orderer的排序机制
- solo排序,单机节点排序,单一orderer采用solo排序(利用先进先出的队列)
- kafka 阿帕奇的开源的流式消息处理平台(理解:可以把kafka理解为一个软件,并行的把一堆消息发给kafka,它可以串行的把数据输出出来,并且它支持非拜占庭错误(故障容错)的容错性)
- SBFT 简单拜占庭容错,容忍集群中的orderer节点不超过1/3的错误
5.committing peer验证读写集跟当前世界状态是否一致。一致就会更新ledger,世界状态就会变化,如果不一致不会更新,但transaction还是会被记录。世界状态不会发生改变。
6.最后节点会异步的通知client,transaction是成功还是失败,我们监听这个回调,就可以知道数据是否被写入成功。