知识卡片
乱序接收但严格顺序提交的缓冲队列
内容
Gossip把区块数据在组织内做随机近邻转发,加上反熵算法各自独立补齐缺口,一个Peer节点实际收到区块消息的先后顺序完全可能是乱序的。但账本提交必须严格按区块号递增写入,不能跳号。Fabric的解法是state模块维护一个以”下一个期望提交的区块号”为基准的缓冲队列:新到的区块消息负载先按区块号放进缓冲区,只有当缓冲区里存在恰好等于当前期望区块号的数据时,才把它取出提交账本并将期望号加一;缓冲区还设了最大跨度上限(默认100个区块),避免因迟迟等不到某个区块号而无限堆积。这样,”网络传输可以乱序”和”账本写入必须有序”这两个互相冲突的要求,靠一个按序号找齐的队列就同时满足了,不需要在传输层强行保证顺序。
参考来源
《Hyperledger Fabric技术内幕:架构设计与实现原理》第6章《Gossip消息模块》