核心交易流程的执行流程优化建议
【产品名称/功能模块】
【问题描述】
共识过程引用: 长安链并行调度算法的主要思想是交易分为执行execute和生效commit两步,
- 若交易在execute期间,其读集未被其他交易更改,则交易的执行结果视为有效,可执行commit操作;
- 否则该交易的执行结果视为无效,需要将该笔交易的执行结果丢弃并重新执行此交易。示意图如下:
主要步骤:
- 长安链调度模块将所有交易并行执行,并在执行中将所有交易的写操作都记录在内存缓存中;
- 每笔交易执行结束后,检查自己读集中所有的key是否被其他交易修改,若无则将该交易写集生效(ApplyTxSimContext),若被其他交易修改则将该交易重新加入待执行队列重新执行;
- 待所有交易执行完毕后,通过分析所有交易的读写集构建DAG。若交易间存在“读-写”、“写-读”、“写-写”冲突,根据执行时的先后顺序构建DAG中的边。 因存在冲突的交易执行时间存在随机性,最终构建的DAG也无法预测,所以此算法为随机性调度算法。在进行冲突检测时,长安链应用了位图等数据结构进行工程优化,极大地提升了交易的执行效率。
【分析】 上述流程分析如下
- 1.交易并行执行,每笔交易执行结束,判断是否和其他交易存在冲突,如果检测到冲突,交易放入待执行队列,进行执行
- 2.所有交易执行完毕之后,才进行交易依赖关系DAG图构建
- 3.验证节点,根据交易DAG图进行重新执行和验证
【优化建议】
- 1.从交易池获得一批交易之后,在交易执行之前,先对所有交易进行冲突检测,构建执行关系的DAG图(而不是执行完毕之后,再构建)
- 2.根据DAG图,并行执行交易。这样可以避免交易进行无效执行,带来的时间浪费和资源消耗的浪费。在极端情况下,当一批交易存在大量依赖关系的时候,会造成极大的资源浪费,给节点带来巨大压力
以上设想,仅仅根据官网文档的描述分析而做的建议
【联系方式】(选填)
微信号:ryanlovfer
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information