猿Why在工作中解决问题的时候,了解到了分布式任务调度。看到“分布式任务”字样,原认为是“处理比较消耗资源的请求,使得此类请求处理均衡分发到分布式的系统中”,直到看到了扫盲文章。
在看完ElasticJob官方文档之后,终于对分布式任务调度有了入门了解。
分布式任务调度中心场景
就ElasticJob而言,分布式任务调度比较适合的场景是后台作业。特别是定时的后台作业,并且业务处理逻辑比较简单,任务之间的数据依赖性不大的情况会比较适合。例如:员工每月工资定时发放,考勤计算工资发放金额。
按照自己的理解,对ElasticJob-Lite适用的场景进行小结:
- 依赖Zookeeper作为服务注册中心(3.0版本的ElasticJob要求Zookeeper版本3.6+ )
- 支持分布式、有任务调度 支持定时任务和一次性任务
- 有elasticjob-lite和elasticjob-cloud两种模式
- elasticjob-lite模式,执行任务的模块嵌入应用中,可以直接使用数据库连接池等,任务的执行,应用的是应用程序进程中的线程执行任务
- 优点
- 轻量级,简单,依赖少,只需一个zk就可以使用起来
- 支持多种作业类型,分片,失效转移,错过执行,动态新增,删除节点
- 简单的可视化管理
- 方便和spring整合,springboot整合
- 缺点
- 占用业务机器资源,资源调度和业务执行没有解耦
- zk作为注册中心不友好,不支持高可用
- 不支持复杂的作业管理(作业依赖),一些复杂业务场景不可使用
- 可视化相对简单,作业监控也比较简单 对单次执行不太友好
另外:
- 相同分片编号的任务执行具有顺序性
- 不同分片编号的任务在同一服务器上执行,没有顺序性
- 将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,作业将会合理的利用分布式资源,动态的分配分片项(分片数一定大于服务器的数量才算有意义)
- 分片数大于机器数的情况下,存在一台机器处理多个分片而号的情况
- 分片的概念,是开发人员根据任务的业务对数据进行划分,例如:数据库水平拆分,处理北京、上海、深圳三个地方的数据。
ElasticJob-Lite试验遇到的问题解决
问题表现
ip is null字样的异常信息
问题出现条件
Windows操作系统、无线网卡连接、虚拟机网卡
问题原因
其根本问题是API的问题。
为了保证试验的流畅,我直接把org.apache.shardingsphere.elasticjob.infra.env.IpUtils暴力覆盖了!
参见