知识卡片

出块双重触发:用消息化时间兜底而非时钟同步

专业/工作 · 532.c

内容

Orderer出块由两条路径共同触发:交易数量或区块字节数达到阈值时立即切割出块,另设一个周期性定时器(如2秒)兜底——即使交易量不够也强制出块,避免通道长时间没有新区块导致查询体验变差。Solo共识组件下定时器直接触发本地切割即可;但Kafka集群下多个Orderer节点各自的本地定时器天然不同步,如果各自独立触发出块,账本就会分叉。Fabric的解法是把”到时间了”本身也包装成一条TimeToCut消息发送到Kafka排序,所有Orderer节点都以自己最先从Kafka分区收到的那条TimeToCut为准出块——把难解的多节点时钟同步问题,转化成了已经解决的Kafka消息顺序问题。

参考来源

《Hyperledger Fabric技术内幕:架构设计与实现原理》第2章《Orderer排序节点》