买的网站可做360广告联盟吗,网站页面关键词优化,做动画片的网站,营销类wordpress主题什么是xxl-job#xff1f;
xxl-job是一个分布式的任务调度平台#xff0c;其核心设计目标是#xff1a;学习简单、开发迅速、轻量级、易扩展#xff0c;现在已经开放源代码并接入多家公司的线上产品线#xff0c;开箱即用。xxl是xxl-job的开发者大众点评的许雪里名称的拼…什么是xxl-job
xxl-job是一个分布式的任务调度平台其核心设计目标是学习简单、开发迅速、轻量级、易扩展现在已经开放源代码并接入多家公司的线上产品线开箱即用。xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。
分布式任务调度平台目前比较主流的是elasticjob和xxl-job。
elasticjob和xxl-job的区别
elasticjob是当当开发的一款任务调度平台采用zookeeper实现分布式协调。
优点elasticjob的初衷是为了面对高并发复杂的业务即使是在业务量大服务器多的时候也能做好任务调度尽可能的利用服务器的资源。使用ZooKeeper使其具有高可用、一致性的而且还具有良好的扩展性
缺点由于ZooKeeper是无中心化的通过选举机制选举出主服务器如果主服务器挂了会重新选举新的主服务器。因此elasticjob具有良好的扩展性和可用性但是使用和运维有一定的复杂。
xxl-job是通过一个中心式的调度平台调度多个执行器执行任务调度中心通过DB锁保证集群分布式调度的一致性。
缺点这样扩展执行器会增大DB的压力但是实际上这里数据库只是负责任务的调度执行。如果没有大量的执行器的话和任务的情况是不会造成数据库压力的。实际上大部分公司任务数执行器并不多。
优点相对来说xxl-job中心式的调度平台轻量级开箱即用操作简易上手快与SpringBoot有非常好的集成而且有监控界面就集成在调度中心界面又简洁对于企业维护起来成本不高还有失败的邮件告警等等。这就使很多企业选择xxl-job做调度平台。
xxl的实现
xxl-job框架主要用于处理分布式的定时任务其主要由调度中心和执行器组成。
调度模块调度中心
负责管理调度信息按照调度配置发出调度请求自身不承担业务代码。调度系统与任务解耦提高了系统可用性和稳定性同时调度系统性能不再受限于任务模块 支持可视化、简单且动态的管理调度信息包括任务新建更新删除GLUE开发和任务报警等所有上述操作都会实时生效同时支持监控调度结果以及执行日志支持执行器Failover。
执行模块执行器
负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作开发和维护更加简单和高效 接收“调度中心”的执行请求、终止请求和日志请求等。
调度中心统一管理任务调度平台上的调度任务负责触发调度执行并且提供任务管理平台。
执行器接收调度中心的调度并且执行可以直接执行也可以集成到项目中。
小结调度中心和执行器两个模块分开部署相互分离两者之间通过RPC进行通信其中调度中心主要是提供一个平台管理调度信息发送调度请求自己不承担业务代码而执行器接受调度中心的调度执行业务逻辑。
xxl-job的原理
执行器的注册和发现
执行器的注册和发现主要是关系两张表
xxl_job_registry执行器的实例表保存实例信息和心跳信息xxl_job_group:每个服务注册的实例列表。
执行器启动线程每隔30秒向注册表xxl_job_registry请求一次更新执行器的心跳信息调度中心启动线程每隔30秒检测一次xxl_job_registry将超过90秒还没有收到心跳的实例信息从xxl_job_registry删除并更新xxl_job_group服务的实例列表信息。
调度中心调用执行器
调度中心调用执行器
调度中心的操作
调度中心通过循环不停的 关闭自动提交事务 利用mysql的悲观锁其他事务无法进入 select * from xxl_job_lock where lock_name schedule_lock for update读取数据库中的xxl_job_info记录定时任务的相关信息该表中有trigger_next_time字段表示下一次任务的触发时间。拿到距离当前时间5s内的任务列表分为三种情况处理 对于当前时间-任务的下一次触发时间5直接调过不执行重置trigger_next_time的时间。(超过5s) 对于任务的下一次触发时间当前时间任务的下一次触发时间5的任务不超过5s的 开线程处理执行触发逻辑根据当前时间更新下一次任务触发时间 如果新的任务下一次触发时间-当前时间5,放到时间轮中时间轮是一个map private volatile static MapInteger, ListInteger ringData new ConcurrentHashMap();根据新的任务下一次触发时间更新下下一次任务触发时间 对于任务的下一次触发时间当前时间将其放入时间轮中根据任务下一次触发时间更新下下一次任务触发时间 commit提交事务同时释放排他锁
执行器的操作
执行器接收到调度中心的调度信息将调度信息放到对应的任务的等待队列中执行器的任务处理线程从任务队列中取出调度信息执行业务逻辑将结果放入一个公共的等待队列中每个任务都有一个单独的处理线程和等待队列任务信息放入该队列中执行器有一个专门的回调线程定时批量从结果队列中取出任务结果并且回调告知调度中心