分片策略
方案一
- 根据调度中心传入的执行总数,每片执行器查询执行总数个结果集
- 遍历结果集
- 对主键采用hashcode求值,并对hashcode的绝对值作求余片数
- 余数等于当前片数时,获取当前数据行分布式锁
- 执行任务
- 解锁
方案二
- 根据调度中心传入的每片执行数,计算执行器集群执行总数,第一片执行器查第一页,第二片执行器查第二页…
- 每片执行器遍历需要执行的结果集
- 获取当前数据行分布式锁
- 执行任务
- 解锁
异常情况
上次循环未完成,本次循环包含上次待执行数据?
在获取当前数据行分布式锁的时,获取的一方才有执行权限,未能获取锁的一方跳过本次执行,进而执行下一行
上次循环执行报错中断,本次循环如何分配?
每次获取数据时,均是查询未执行状态的数据,所以会把未执行的数据重新执行
原本有3台执行器,突然宕机1台剩下2台,如何分配?
- 方案一
对数据集每行主键求余的除数为当前存货执行器的片数,是动态根据存活的执行计算的,如果剩2台机器的时候,总数会对2求余,每次执行总量不会改变
- 方案二
对数据集分页查询的页数,是动态根据存活的执行计算的,如果剩2台机器的时候,则分2页,每片执行量不变,总执行量减少单页数量