Kubernetes分布式任务调度方案 - Elastic-job-lite
鉴于k8s平台支持自动伸缩(扩容、缩容),原项目进行扩容(多实例)后的定时任务调度会出现多实例重复执行任务的情况,
所以需要将定时任务调度切换到分布式方案(支持分片),建议采用Elastic-job-lite框架,
结合k8s自动伸缩和Elastic-job-lite-console监控(启动、暂停、终止、手动触发)、修改(分片总数、Cron时间表达式、任务参数、分片参数等)任务配置的功能,可以对分布式定时任务调度进行灵活的监控。
Elastic-job-lite服务端部署:
(1)依赖zookeeper;
(2)elastic-job-lite-console控制台安装;
(3)可外接数据源进行任务追踪记录(选用);
Elastic-job-lite客户端集成:
(1)Maven依赖
(2)实现ElasticJob(SimpleJob, DataflowJob, ScriptJob)接口
(可获得当前shardingItem、shardingTotoalCount,客户端需要自己实现数据分片逻辑,例如Sql查询语句添加条件: id%shardingTotalCount=shardingItem)
(3)原始API集成;
(4)Spring配置集成;
Elastic-job-lite-console控制台界面:
扩展:
Elastic-job-lite依赖Zookeeper来实现分布式程序协调,可考虑监听kubernetes API来实现动态的服务发现(客户端多实例动态发现),已达到和Kubernetes平台深度融合(舍弃掉Zookeeper依赖),未来希望可以深入研究一下......;