7 总结和规划
elastic-job3问题,整改方案及规划
7.1作业执行完整
调度系统最主要是完整高效地执行作业(分片),elastic-job分3类作业分片,正常分片,失效转移分片,错过执行分片,之前分析,elastic-job会丢分片,3个丢失点:
1. missfired分片,作业执行常规调起和失效转移并行执行,而quartz线程只有1,执行分片会转成missfired分片,但分片逻辑并没有处理missfired分片,丢失
解决方案,分片加上missfired分片
2. 失效转移分两类,下线节点抓取的转移的分片,下线节点常规分配到的分片
上面是在线实例抓取下线作业分片的代码,存在所有在线节点都在if,else没有被抓取可能
解决方案,两类合并,一个循环抓取
3. 分片
存在丢失常规分片,分片完成后,A节点下线,B节点抓取了A节点分片,然后再进入getShardingContexts,常规分片就丢失,同时也引起分片同时执行,因此,应该分开失效触发的作业和常规触发作业
7.2网格分片
elastic-job实现的是纵向分片,相当于数据hash分片,这样的粒度是不够的,需要增加横向的切分,即分页,这样每个分片规模可预期,同时增加并行度
7.3逻辑分片
分片藏在分片算法,不需预先配置分片,按需生成,减少分片配置项长度,支持动态分片
7.4动态分片
elastic-job是静态分片,存在2个问题
1. 数据倾斜,即,部分作业数据少,早完成;另一些任务还有大量数据未完成
2. 分片很多,配置相当长
动态分片实例节点按需领取,配合逻辑分片,最大化利用计算资源
7.5动态作业
动态增删作业,新增作业有两种情况,新增新类型的作业,新增已有类型作业的实例
elastic-job无中心分布式架构,没有提供动态增加作业(实例)的api,新增新类型的作业需新的作业实例,新增已有类型实例可以通过修改分片和参数间接实现
7.6监控快照
快照服务改造,接入Prometheus exporter,增加作业状态,数据处理量等