论文部分内容阅读
在流计算系统中,数据倾斜通常会导致负载不均衡进而增加算子处理数据的延时,严重影响系统本身的运行效率。处理数据倾斜的方法是提出更好的分组策略,保证后续到达的数据可以均衡地分配给下游算子,同时需要状态迁移机制的支持,保证更改分组策略后,状态的存储位置可以对应新的分组策略。本文在Apache Flink计算平台上,提出了一种负载均衡模型,命名为S1负载均衡模型。为实现该模型,本文提出了S1选择模型。定义负载计算方式以及负载不均衡代价和迁移代价的计算方式。本文需要在多次细粒度迁移中,选择收益最大(即代价最小)的状态优先迁移,剩余状态交由后续的细粒度迁移完成。S1选择模型提供了状态迁移的目的地和状态优先级排序队列,可以看作一种特殊的分组策略自动构建模型。目前国内外关于流计算系统负载均衡的研究中,负载均衡策略使用的状态迁移机制都是按照一次性迁移的流程实现的,这种一次性状态迁移机制暂停流计算系统再对所有需要迁移的状态进行迁移,会带来非常高的延时,可以说是一种以显著地降低流计算系统可用性为代价的负载均衡方法。因此,本文提出细粒度状态迁移机制,将一次性迁移划分为多次细粒度迁移,从而降低单次迁移的代价,使迁移带来的延时不那么突兀,细粒度负载均衡策略基于此机制才得以实现。为了实现细粒度状态迁移机制,本文还提出S1划分模型。本文发现一次细粒度迁移有固定的最小用时,因此本文收集上一次细粒度迁移的用时,从而推测迁移剩余状态用时,由剩余用时和最小用时可以计算出后续迁移最合适的次数以及单次迁移的状态大小。本文提出了两种划分策略:最大用时划分策略和自平衡划分策略。最大用时划分策略可以在用户指定的最大用时内完成一次细粒度迁移。自平衡划分策略的模型更加准确,而且不需要用户显式地给出最大用时这一要求,对细粒度迁移的适应性更强。本文基于异步检查点机制,确定分组策略替换时机和状态迁移时机,可以在保持分布式一致性以及exactly-once语义的前提下变更分组策略以及迁移状态,从而优雅地处理数据倾斜问题。本文在Apache Flink平台上实现了细粒度负载均衡模型,命名为S1负载均衡器,并对系统参数进行了分析,实验表明本文提出的处在均衡模型可以在数据倾斜的情况下很好的均衡负载,而且划分后的细粒度迁移造成的延时高峰与传统的一次性迁移相比有明显减少。本文还对比了S1选择模型与其他分组策略生成模型的优劣以及自平衡划分策略和最大用时划分策略的差异。