论文“A High Performance Concurrency Protocol for Smart Contracts of Permissioned Blockchain”总结

1. 冲突图

与传统的并发控制理论一致,无环的冲突图证明该调度是冲突可串行化的,也就是说,如果冲突图是无环的,那么按照图的拓扑序不断地提交入度为0的节点,最中可以得到一个可串行化的顺序 L \mathscr{L} L 。否则,必须中止一些交易使得冲突图中不包含任何的环路。

2. 交易依赖图

为什么使用交易依赖图

对于一个区块中的所有交易而言,冲突图只能表示一次并发执行后所有交易的冲突关系,然而,对于那些因为 成环被中止而随后又重新执行的交易成功提交交易 之间的依赖关系无法用冲突图表示出来。故选用交易依赖图来描述区块中一批交易全部提交之后的最终依赖情况。

交易依赖图中的边不但表示交易执行之间的先后顺序,还包含了交易之间的传输信息,也就是一致性读集。依赖边 e e e 的权重记为 ω ( e ) \omega(e) ω(e),表示一致性读集的大小。

3. 反馈节点集

如何从一张有向图中挑选删除节点使之成为一张有向无环图是经单的反馈节点集(Feedback Vertex Set,FVS)问题。

原始的FVS问题的一个基本要求就是从有向图中移除一个 最小的反馈节点集合 使其不包含任何的环。

4. 图的稀疏度

在主节点执行阶段设计一个可以同时优化主节点和验证节点执行效率的协议,而验证节点的回放效率很大程度上依赖于主节点执行生成的交易依赖图

如果交易依赖图有着更高的并发度(更多的交易可以同时执行),即表示验证节点有着更高的回放速度。

并发度和稀疏度之间的关系

图的稀疏度定义为图的边数占所有可能边数的比例,公式如下:

如果最终的交易依赖 图越稀疏,则表示依赖图中包含的交易之间的内部 冲突越少,其交易 并发度就越高因此图的密度属性很好地描述了并发度,因此我们最终可以将如何生成有着最大并发度的交易依赖图的问题 转化成为 最小密度反馈节点集问题

5. 关键问题一

最小密度反馈节点集问题

旨在找到一个最小的反馈节点集合,使得根据串行化顺序 L \mathscr{L} L 提交得到的交易依赖图TDG的密度最小。

本文中解决最小密度FVS问题要求找到一批交易 B \mathit{B} B 的一个最小子集 B ′ \mathit{B'} B ,使得删除该子集中的交易能够得到一个密度最小的交易依赖图。具体过程入算法1。
在这里插入图片描述
算法一阐述了 如何在主执行阶段并发执行一个区块包含的交易集合进而生成最小密度的交易依赖图。

首先算法第三行按照Batching OCC的读阶段并发执行交易集合 B \mathit{B} B ,当所有交易到达Batching OCC的验证阶段时,算法根据交易的读写集构造冲突图 C G \mathit{CG} CG ,一个节点代表一个交易,一条边代表两个交易之间的读写冲突。有了冲突图 C G \mathit{CG} CG 后,执行 M i n i m u m A b o r t S e t ( C G ) \mathit{MinimumAbortSet(CG)} MinimumAbortSet(CG) 函数,计算出基于 C G \mathit{CG} CG 的满足约束条件的最小反馈节点集,接着算法从 C G \mathit{CG} CG 中移除中止的节点以及相应的边,按照剩余冲突图的拓扑序 L \mathscr{L} L 依次提交交易。 C o m m i t \mathit{Commit} Commit 函数将 t \mathit{t} t 写集中的更新写回到本地存储中。每一次成功提交均会调用 U p d a t e T d g \mathit{UpdateTdg} UpdateTdg 函数,该函数将TDG中添加一个新的节点 T \mathit{T} T ,按照交易依赖图的定义,如果交易 t \mathit{t} t 读取了已经提交的交易 T c \mathit{T_c} Tc, 则添加一条依赖边 T c \mathit{T_c} Tc -> T \mathit{T} T

最小密度交易依赖图生成算法 M i n D e n s i t y T D G ( C G ) \mathit{MinDensityTDG(CG)} MinDensityTDG(CG) 的核心是 M i n i m u m A b o r t S e t ( C G ) \mathit{MinimumAbortSet(CG)} MinimumAbortSet(CG) 函数实现的计算反馈节点集的功能。 回顾最小密度节点集的定义,这个函数必须找到最小的删除节点集合,使得冲突图无环,其背后的启发式规则:每一个强连通分量比定包含至少一个环。如果可以分离出冲突图中所有的强连通分量,在逐一击破,即可得到满足要求的解。

在这里插入图片描述对于每一个强连通分量 S \mathit{S} S,函数 G r e e d y S e l e c t V e r t e x \mathit{GreedySelectVertex} GreedySelectVertex返回该强连通分量对应的中止交易集合。8到12行描述了如何递归挑选中止节点。对于只包含一个节点的强连通分量无需任何处理,直接返回空集。接着对于 S \mathit{S} S 中的所有节点按照基于度的排序策略进行排序,然后贪心地选择排名最高的节点作为最终中止节点集的一部分。移除 V ˉ \bar{V} Vˉ 后,调用 P r u n e \mathit{Prune} Prune 函数对 S \mathit{S} S 进行剪枝,即删除出入度为0的节点。最后递归地调用 G r e e d y S e l e c t V e r t e x \mathit{GreedySelectVertex} GreedySelectVertex 函数。

为了得到反馈节点集最小且密度最小的交易依赖图,我们选取入度与出度和最大的策略对节点进行排序,和一样的按照最小出度来挑选节点。经证明,这种基于度的策略十分适用于解决FVS问题。在这里插入图片描述这是一个 M i n i m u m A b o r t S e t ( C G ) \mathit{MinimumAbortSet(CG)} MinimumAbortSet(CG) 例子,黄色代表中止交易集合,蓝色节点代表在运行过程中被剪枝的节点

首先使用 T a r j a n \mathit{Tarjan} Tarjan 算法从图中分离出所有的强连通分量,图b显示共有3个强连通分量。算法依次处理每一个强连通分量。对于第一个由5个节点组成的强连通分量,根据上述策略,节点 T 3 \mathit{T_3} T3 和 节点 T 4 \mathit{T_4} T4 的出入度之和均为5,而 T 3 \mathit{T_3} T3 的出度更小,因此删除节点 T 3 \mathit{T_3} T3 以及连接的边。节点 T 1 \mathit{T_1} T1 T 7 \mathit{T_7} T7 出度或者入度为0,被剪枝。 此时这个强连通分量重还包含一个由 节点 T 4 \mathit{T_4} T4 T 8 \mathit{T_8} T8 T 1 1 \mathit{T_11} T11 构成的环, T 4 \mathit{T_4} T4 的出入度之和最大,故删除,剩余节点被剪枝。如果出入度之和一样,并且出度也相同,那么就随机选取节点中止。最终的中止交易集合为 B ′ \mathit{B'} B <- T 3 , T 4 , T 5 , T 10 \mathit{T_3,T_4,T_5,T_{10}} T3,T4,T5,T10

6. 关键问题二

交易依赖图划分问题

在经过上述操作之后,假设得到的交易依赖图中的每一条边都包含一个一致性读集,那么收到的区块和该交易依赖图的验证节点能够以最大的并发度进行交易回放。但是这种回放方式带来了如下问题:

  1. 验证节点的回放效率受限于CPU的物理核数,几乎不可能达到交易依赖图提供的理论上的并发度,即所有交易同时并发执行。
  2. 上述步骤可以生成一张并发度最佳的交易依赖图,但是这种为每一条边都保留一致性读集的细粒度的调度信息势必会带来巨大的网络传输开销。

因此需要解决 交易依赖图的划分问题。粗粒度的调度信息虽然传输开销小,但是验证节点回放效率不高;而过于细粒度的调度信息能够最大化验证节点的回放速度,却会带来不可忽视的网络开销。因此如何对交易依赖图进行划分得到一个中等适宜粒度的交易依赖图是本文的一个关键性问题。

子图 G [ V i ] \mathit{G[V_i]} G[Vi] 的权重用 ω ( G [ V i ] ) \omega(G[V_i]) ω(G[Vi]) 表示,为其包含所有节点的权重之和。即 ω ( G [ V i ] ) = ∑ v ∈ V i ω ( v ) \omega\left(G\left[V_{i}\right]\right)=\sum_{v \in V_{i}} \omega(v) ω(G[Vi])=vViω(v)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值