知识卡片
交易验证的可并行与必须串行两阶段
内容
Committer验证一个区块时,把验证过程拆成两个并发特性完全不同的阶段:第一阶段(格式合法性、签名验证、VSCC背书策略检查)对区块内每笔交易都是独立的,Fabric直接为每笔交易启动一个goroutine、用信号量把并发数限制在CPU核数附近并行执行;第二阶段MVCC读写冲突检查却必须严格按交易在区块内的顺序串行进行,因为后面交易的读集合是否有效,要看它有没有读到同一区块里排在它前面、且已判定为有效的交易所写的数据。把”互不依赖的重活”并行化、把”有先后依赖的轻量比较”串行化,而不是笼统地一次性并行或串行处理整个验证流程,是压榨多核性能的关键设计取舍。
参考来源
《Hyperledger Fabric技术内幕:架构设计与实现原理》第5章《Committer记账节点》