Page 277 - 《软件学报》2025年第7期
P. 277

3198                                                       软件学报  2025  年第  36  卷第  7  期


                 可能缺少数据分布情况的信息, 只能使用默认的负载分发策略, 并选择高采样率. 在一段时间的观测后, 可以根据
                 监测信息, 选择更优的分发策略和更低的采样率, 此时不得不中断应用的执行, 调整配置后重新启动, 这会造成短
                 时间的不可用和带来复杂的运维工作. 针对这一问题, 本文基于消息发布订阅机制, 支持在任务运行时动态调整配
                 置, 包括采样率、KeyBy     负载分发策略. 当配置修改提交至动态配置中心提时, 动态配置中心基于消息发布/订阅
                 通道将指令下发到       KeyBy  算子配置管理模块上, 从而控制        KeyBy  算子.
                    基于在线监测与动态配置调整, 本文通过运行时自动调优分发策略实现动态负载均衡, 通过对采样数据的汇
                 总分析, 系统可以自动选择最优的           KeyBy  分配策略并进行动态调整, 实现系统的负载均衡优化. 动态负载均衡支
                 持定期、定量、阈值这        3  种模式: 1) 定期模式由定时器触发后切换到当前具有最优负载均衡度的负载分发策略,
                 适合数据源流速稳定的场景; 2) 定量模式在接收到指定数量数据时触发, 适合数据源流速变化的场景; 3) 阈值模
                 式则在当前选用策略的负载均衡度低于配置阈值时触发, 适用于用户希望尽可能减少策略切换的场景. 这                                  3  种模
                 式总结如表    6 动态负载策略触发条件及场景所示.

                                              表 6 动态负载策略触发条件及场景

                                模式                  触发条件                       适用场景
                                定期                    定时                    数据源流速稳定
                                定量              接收到指定数量数据                  数据源流速不稳定
                                阈值              负载均衡度低于阈值                希望尽可能减少策略切换

                 4.2.3    基于  ABS  算法的无中断键值状态交换
                    调整  KeyBy  算子负载分发策略时, 由于分配映射关系被改变, 需要交换各节点持有的                      Keyed State, 因此需要
                 中断流式分析应用的执行, 并通过          Savepoint 完成状态的交换, 这会导致服务长时间不可用和数据积压.
                    典型流式系统使用       Checkpoint 提供容错和故障恢复机制, Flink      的  Checkpoint 生成采用  Chandy-Lamport 算
                 法  [46] 的变种——ABS (asynchronous barrier snapshot) 算法. 其中, 作业可以抽象成图, 图的顶点是算子, 边是数据
                 流, 与  Chandy-Lamport 算法的图模型对应. ABS   算法通过    Barrier 将数据流从时间上划分开, Barrier 作为快照的边
                 界, 用于区分当前快照的数据和下一次快照的数据. Barrier 从              Source 算子沿数据流流动, 当一个算子接收到所有
                 输入数据流的     Barrier 时, 生成状态快照, 并继续向下游算子广播          Barrier, 快照生成后, 解除对数据流的阻塞, 继续
                 计算, 如图  10 基于  ABS  算法的无中断交换示意图.

                                                         状态保存          等待指令



                                                    KeyBy         ProcessFunc
                                                                       Barrier
                                                                       实时数据
                                            图 10 基于   ABS  算法的无中断交换示意图

                    为了实现在不中断流式分析应用的情况下完成键值状态交换, 本文提出基于                          ABS  算法的  Sync 指令, 用于触
                 发存储键值状态的状态后端在节点间的状态交换, 从而在不中断应用情况下完成                           KeyBy  算子负载分发策略的动
                 态调整. 当   Source  算子接收到  Sync  指令时, 会向  KeyBy  算子传递特殊的屏障标记并阻塞当前通道的输入; 当
                 KeyBy  算子接收到来自所有数据通道的标记时, 存储状态的状态后端生成状态快照, 并解除所有数据通道的阻塞.
                 在数据流上, 本文将      KeyBy  及其后的有状态处理函数视为          ABS  算法中的一个节点, 当节点的通道接收到屏障标
                 记时, 该通道被阻塞, 当所有通道都接收到屏障标记时, 生成键值状态的快照, 解除所有通道的阻塞.

                 4.3   基于键值的数据交换策略
                    本文提出    Local Merge、Global Merge 和  Ahead KeyBy  这  3  种基于键值的数据交换策略, 通过减少或避免
   272   273   274   275   276   277   278   279   280   281   282