xxljob共设置了10中任务分配策略,主要用于解决负载均衡,提高任务处理效率。这些都是客户端的负载均衡,无法获取到执行器的信息,因此不算是完整的负载均衡策略集合。
1.First
取执行器列表的第一个执行器进行执行。
2.Last
取执行器列表的最后一个执行器进行执行。
3.LFU
LFU是指最近最不频繁使用,LRU是指最近最少使用。这两者的区别是,LFU对于所有的执行器来说统计的时间区间是一样的,统计某一特定时间区间内的使用次数即可。但对于LRU来说,统计的是从当前时间往前移,直到每个执行器最近一次使用的时间点为止,这段时间区间越大,则说明最近更少被使用。
LFU在xxl-job的实现逻辑如下:
缓存当天每个job使用某个执行器的次数,每使用一次,次数加1,然后挑选的时候,选择次数最少的执行器进行执行。首次初始化的时候,每个执行器的执行次数进行了一次随机化,来达到分散压力的效果。
4.LRU
这个可以直接使用LinkedHashMap来实现,它能按访问进行排序。
我们也可以自己实现,弄个queue,每次从last取,取完了之后,放回first。
5.Random
随机选择一个执行器
6.RoundRobin
记录每个任务的执行次数,然后次数对执行器数量取模。
7. FailOver
先通过beat查看远程执行器是否能连通,能连通则使用,否则尝试下一个执行器。
8. Busyover
发送idleBeat,如果远程执行器有任务积压,则尝试选择下一个执行器。