elastic-job和xxl-job实践对比

elastic-job与xxl-job的实践数据对比。从多个维度,数据进行更适合的选择。

简介

技术文档都比较完善,学习成本低。

elastic-job

官网地址:https://shardingsphere.apache.org/elasticjob/current/cn/overview/

E-Job 关注的是数据,增长了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。可是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用算法

xxl-job

官网地址:https://www.xuxueli.com/xxl-job/

X-Job 侧重的业务实现的简单和管理的方便,学习成本简单,失败策略和路由策略丰富。推荐使用在“用户基数相对少,服务器数量在必定范围内”的情景下使用

对比维度

前提条件均运行在K8S中,并且程序运行内存512M,正常运行12小时。

GC情况 (XXL-job完胜)

E-job

S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
43.10 0.00 6.18 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 6.18 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 6.18 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 6.18 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 6.18 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 6.30 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280
43.10 0.00 13.53 35.03 97.84 96.22 11700 177.625 3 0.655 178.280

XXL-job

 S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
58.86 0.00 49.24 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.24 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.27 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.28 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.36 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.36 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.36 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.36 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.36 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.36 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.37 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.37 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.37 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 49.37 28.97 95.87 93.36 1190 26.351 3 0.380 26.731
58.86 0.00 51.05 28.97 95.87 93.36 1190 26.351 3 0.380 26.731

对比结论

  • E:年轻代中Eden目前已使用的空间,波动率不一。
    • E-job 波动幅度大,并且空间使用大
    • XXL-job 波动幅度平均,并且短时间空间使用低
  • YGC:年轻代中E-job,gc次数大。

CPU/MEM情况

CONTAINER ID   NAME                                                                   CPU %     MEM USAGE / LIMIT     MEM %     NET I/O   BLOCK I/O         PIDS
e1b9efeec680 k8s_xxl-jobs_cloud-namespace_9a47d619-5a8b-4529-856b-2cbd972c726d_0 0.00% 844MiB / 15.28GiB 5.39% 0B / 0B 4.56MB / 12.3kB 353
ij7j09jiasdq k8s_e-jobs_test-namespace_154s24d2-s1s2-2355-322s-a2121da21saa_0 0.00% 719MiB / 15.28GiB 4.58% 0B / 0B 4.56MB / 12.3kB 353

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e1b9efeec680 k8s_xxl-jobs_cloud-namespace_9a47d619-5a8b-4529-856b-2cbd972c726d_0 3.00% 844MiB / 15.28GiB 5.39% 0B / 0B 4.56MB / 12.3kB 353
ij7j09jiasdq k8s_e-jobs_test-namespace_154s24d2-s1s2-2355-322s-a2121da21saa_0 2.00% 719MiB / 15.28GiB 4.58% 0B / 0B 4.56MB / 12.3kB 353

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e1b9efeec680 k8s_xxl-jobs_cloud-namespace_9a47d619-5a8b-4529-856b-2cbd972c726d_0 3.20% 844MiB / 15.28GiB 5.39% 0B / 0B 4.56MB / 12.3kB 353
ij7j09jiasdq k8s_e-jobs_test-namespace_154s24d2-s1s2-2355-322s-a2121da21saa_0 4.00% 719MiB / 15.28GiB 4.58% 0B / 0B 4.56MB / 12.3kB 353

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e1b9efeec680 k8s_xxl-jobs_cloud-namespace_9a47d619-5a8b-4529-856b-2cbd972c726d_0 3.20% 844MiB / 15.28GiB 5.39% 0B / 0B 4.56MB / 12.3kB 353
ij7j09jiasdq k8s_e-jobs_test-namespace_154s24d2-s1s2-2355-322s-a2121da21saa_0 2.70% 719MiB / 15.28GiB 4.58% 0B / 0B 4.56MB / 12.3kB 353

对比结论

E-job稍微逊色一点,但是相差不多,对于上述比较的GC来看,个人觉得GC的可比性更重要。

支持集群部署 (感觉不通的情况使用)

XXL-job

集群部署唯一要求为:保证每个集群节点配置(db和登陆账号等)保持一致。调度中心通过db配置区分不同集群。
执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。集群部署唯一要求为:保证集群中每个执行器的配置项 “xxl.job.admin.addresses/调度中心地址” 保持一致,执行器根据该配置进行执行器自动注册等操作。

E-job

重写Quartz基于数据库的分布式功能,改用Zookeeper实现注册中心
作业注册中心: 基于Zookeeper和其客户端Curator实现的全局作业注册控制中心。用于注册,控制和协调分布式作业执行。

对比结论

  • 最新版本X-job 基于时间轮,使用数据库实现注册中心
  • E-Job基于quartz,改用Zookeeper实现注册中心

监控告警,日志追溯 (XXL-job完胜)

XXL-job

提供了调度器,支持日志查询,动态控制任务触发条件,支持配置邮箱地址进行异常告警。
xxl-job

E-job

需监听任务的处理是否成功,作业服务器是否存活,数据是否处理成功,自行编写告警程序。

对比结论

  • xxl-job对于动态任务执行,日志查询,告警更自动化,用法更建议,对于业务处理来说更方便
  • E-job这方便稍微欠缺。

大量数据处理,批量处理 (E-job完胜)

E-job

支持并行调度,采用任务分片实现,可自定义分片策略,并且通过zk实现服务注册,控制,协调,对服务器压力更少

XXL-job

支持任务分片,更加执行起集群实现动态分片。因为是通过数据来实现弹性扩容,如果任务服务器多了,会对服务器造成一定的压力

总结

综合来说,如果侧重于数据则使用E-job,侧重业务请使用XXL-job

文章作者: 陈 武
文章链接: http://www.updatecg.xin/2022/02/21/elastic-job和xxl-job实践对比/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的学习记录
打赏
  • 微信
  • 支付寶

评论