分布式篇-C 分布式任务调度
作者:田超凡
1 传统的定时任务存在那些缺点
答:传统定时任务的缺点:
- 定时任务逻辑和业务逻辑在一个服务中,是强耦合的,没有实现完全解耦,当定时任务逻辑出现问题,也会影响业务逻辑的执行。
- 定时任务非常消耗cpu资源,可能会影响业务线程的执行。
- 服务器集群环境下,定时任务可能会被重复执行。
2 定时任务集群,如何保证定时任务幂等性问题
答:
- 彻底解耦。将定时任务逻辑和业务逻辑彻底解耦分开,只对业务逻辑实现服务集群,不对定时任务逻辑实现集群(定时任务服务单机),存在高可用问题。
- 配置文件新增开关。每个服务启动的时候加载配置文件中配置的定时任务执行开关,哪个服务配置了开启,那个服务就加载定时任务类并执行定时任务;配置关闭的服务不加载和执行定时任务,存在高可用问题。
- 数据库主键唯一性。每个服务同时插入相同的主键id到数据库表中,因为数据库表中的主键是唯一约束的,所以相同的主键id多个服务同时插入到同一个数据库表,只会有一个服务插入成功,谁插入成功谁就可以执行定时任务。不存在高可用问题,但是造成了数据库数据冗余和大量脏数据的问题
- 分布式锁实现,每个服务本质都是一个单独的JVM,此时可以基于分布式锁的机制实现:多个服务JVM同时竞争锁,同一时刻只有一个服务JVM能够获取到分布式锁,谁获取到分布式锁,谁就可以执行定时任务。不存在高可用问题,但是性能较差。
- 分布式任务调度平台实现。推荐,同时解决了定时任务高可用和幂等性的问题。
3 分布式任务调度平台架构设计原理
答:分布式任务调度平台有三类角色组成:
定时任务调度中心、定时任务注册中心、定时任务服务实例
定时任务调度中心:负责拦截所有定时任务的执行,类似于nginx网关的作用。
定时任务注册中心:负责注册和管理定时任务服务实例,实现服务治理。类似eureka的作用。
定时任务服务实例:定时任务服务实例实现集群,保证高可用,是具体的定时任务服务,负责执行定时任务。
分布式任务调度平台实现原理:
- 定时任务服务启动时会连接到定时任务注册中心,将自己的ip和端口号注册到定时任务注册中心中。
- 定时任务开始执行的时候,会首先被定时任务调度中心拦截,获取定时任务关联的定时任务注册中心,加载该注册中心下面注册的定时任务服务的地址,基于负载均衡算法选择其中一台定时任务服务,发送HTTP+REST请求到该定时任务服务来执行当前定时任务。
4 XXL-JOB与Elastic-Job之间区别
答:
- XXL-JOB是中心化管理的分布式任务调度框架,所有定时任务数据都存储在DB中。
Elastic-Job是去中心化管理的分布式任务调度框架,实现思路基于Quartz数据库高可用机制实现。
- XXL-Job支持动态扩容,配置中配置的分片数会根据集群中实际可用的机器数动态分片,当集群中实际可用机器数大于配置的分片数时,会动态分配,不会存在机器闲置的情况,机器利用率高。
Elastic-Job不支持动态扩容,代码中写死分片是多少就少多少,当集群中实际可用机器数大于配置的分片数时,不会动态分配,只会根据写死的分片数进行分片,存在机器限制的情况,机器利用率低。
文章来源地址https://www.toymoban.com/news/detail-558646.html文章来源:https://www.toymoban.com/news/detail-558646.html
到了这里,关于云事业群CTO线技术晋升考核机试题-分布式专题-C 分布式任务调度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!