Hyperledger Fabric中客户端交易提交:发送至全部还是部分Orderer节点?
Hyperledger Fabric 客户端交易提交的Orderer节点选择
这个问题问得很到位!刚好可以对比下Fabric和PBFT的差异,给你理清楚:
首先明确:默认情况下,客户端只会把交易发送给单个Orderer节点,而非全部节点。背后的原因和Fabric采用的共识机制直接相关:
- 现在Fabric主流用的是Raft共识(基于Kafka的排序已经被弃用了),Raft是典型的主从架构——集群里会选举出一个Leader节点,所有的写操作(比如交易排序)都由Leader处理。Leader会自动把交易日志同步给集群里的其他Follower节点,客户端完全不用操心给所有节点发交易的事。
- 就算客户端不小心连到了Follower节点也没关系,Follower会自动把请求转发给当前的Leader,最终还是能正常完成交易提交,只是多了一步转发而已。
当然,你也可以根据需求配置客户端,让它把交易发送给多个Orderer节点(比如做负载均衡,或者在Leader故障时提升可用性),但这属于可选的自定义配置,不是默认行为。
对比你提到的PBFT:PBFT要求客户端给所有节点发请求,因为协议本身依赖全节点的点对点验证;而Fabric的Raft模型通过Leader统一处理写操作,把集群内部的同步工作交给Orderer自己完成,自然不需要像PBFT那样全节点发送。
内容的提问来源于stack exchange,提问作者Deepak Yadav




