Page 146 - 《软件学报》2026年第1期
P. 146

苏琳萱 等: 区块链状态分片技术综述                                                               143


                    首先, 每个状态     d i 需要被分配到一个分片      s j , 即:

                                                    K ∑
                                                      f(d i , s j ) = 1, ∀d i ∈ D                     (1)
                                                    j=1
                    其次, 系统中所有分片的状态数据集合的并集必须覆盖整个状态数据集合                        D, 即:

                                                   ∪
                                                     K
                                                       {d i | f(d i , s j ) = 1} = D                  (2)
                                                      j=1
                    在上述约束条件下, 状态的分配包含以下两个优化目标.
                    ● 降低跨分片交易比例: 当一笔交易的相关状态数据存储在不同的分片时, 该笔交易即为跨分片交易. 定义系
                 统的跨分片交易的数量为         c, 即:

                                               ∑
                                                  {                         }
                                            c =  I f(d from , s i ) = 1∧ f(d to , s j ) = 1∧i , j     (3)
                                               t i ∈T
                 其中, I 为指示函数, 当条件为真时返回         1. 目标是尽可能降低系统中的跨分片交易比例              c/m.
                    ● 平衡分片工作负载: 定义分片         s i 的工作负载  L i 为其处理的交易数量,     ¯ L 为系统的负载均值. 使用方差来衡量
                 分片负载均衡程度, 即:

                                                        1  K ∑   2
                                                            (L i − ¯ L)                               (4)
                                                        K
                                                          i=1
                    设计目标为尽可能平衡各分片负载, 降低系统的负载均衡方差.
                    综上所述, 状态分配方法的设计目标是在满足约束条件, 即公式                    (1) 和公式  (2) 的前提下, 设计一种分配方案,
                 能够最小化跨分片交易数量, 同时平衡各分片的工作负载.
                    根据状态分配的执行频率, 可将其分为静态分配和动态分配两种类型. 静态分配仅执行一次, 后续不再进行状
                 态调整; 而动态分配则允许通过调整各分片中的维护的状态来优化分配策略, 以适应环境的变化. 静态分配通常采
                 用哈希函数实现, 只需对输入数据           (例如账户地址) 进行哈希运算即可生成唯一的分片标识符, 计算复杂度通常为
                 O(1). 然而, 由于该方法缺乏灵活性, 忽略了状态间的关联与交易特征, 在降低系统跨分片交易比例和实现分片负
                 载均衡这两个优化目标上表现不佳, 具体表现如下.
                    (1) 跨分片交易极高: 由于哈希函数的随机性, 静态分配方法可以视为均匀随机选择, 一笔交易跨分片的概率
                                        [36,37]    表示交易的输入输出数量之和, v 表示需要参与验证该笔交易的分片
                 可以表示为    1− P(u,v,k), v = 1   . 其中, u
                 数量, k 为系统中的分片数量. 当       v=1  时,即表示该交易的所有输入输出均位于同一分片内,此时                   1− P(u,1,k) 即可
                 计算出该交易是跨分片交易的概率.            P(u,v,k) 的计算公式如下:

                                            
                                             1,                            if u = v = 1
                                            
                                            
                                            
                                            
                                             ( ) u−1
                                            
                                              1
                                            
                                            
                                                 ,                         if v = 1
                                            
                                            
                                              k
                                            
                                            
                                            
                                            
                                             k −v
                                    P(u,v,k) =                                                       (5)
                                            
                                                 · P(u−1,v−1,k),           if u = v
                                            
                                            
                                              k
                                            
                                            
                                            
                                            
                                            
                                            
                                             k −v             v
                                            
                                            
                                                 · P(u−1,v−1,k)+ · P(u−1,v,k), otherwise
                                            
                                               k               k
                    在基于账户模型的系统中, 交易跨分片概率为               P(k) = 1−(1/k) (即  u=2). 当  k = u = 2 时, 一笔交易跨分片的概率
                 为  75%. 当  k = 3 时, 交易跨分片的概率将迅速超过      95%. 随着分片数量的增加, 系统中几乎所有的交易均为跨分片
                 交易  [10,36–39] . 与普通的片内交易相比, 跨分片交易的处理复杂性显著增加. 片内交易仅需在单个分片内完成处理, 而
                 跨分片交易的处理需要多个相关分片间的协同处理, 这一过程不仅增加了分片间的通信频率, 还引入了额外的同步
                 机制, 从而显著增加了计算开销和通信开销. 因此, 高比例的跨分片交易将严重限制全分片系统性能的进一步扩展.
                    (2) 分片负载不均: 该问题是指各分片处理的交易数量存在显著差异, 从而导致部分少数分片面临交易量过度
                 集中的“热分片”现象      [15] . 热分片的出现不仅会增加系统平均交易确认延迟, 还会降低系统吞吐量. 这一问题在采用
   141   142   143   144   145   146   147   148   149   150   151