论文部分内容阅读
许多业务场景都有定时任务的需求,比如银行信用卡的自动账单邮件通知、企业的周期性日报通知以及固定时间的秒杀活动。随着信息化的高速发展,定时任务的应用场景不断丰富、需求量不断增加,同时其触发的条件也越来越复杂。目前实现定时任务调度的主流方式主要有Linux系统提供的Crontab工具以及各种编程语言提供的定时器等方案。这些定时任务实现机制虽然能满足基本的需求,但都存在了单点问题、缺乏机器监控与告警和缺乏统一的日志管理等问题。本文针对这些问题,基于开源的轻量级的作业调度框架Quartz设计并实现了一个提供定时任务调度服务的分布式系统。该系统不仅能支持定时任务和周期性任务的调度,并且具备动态扩展、负载均衡、自动的机器故障发现与任务重启、统一的日志管理等新特性。本文的主要工作如下:(1)对比分析现有定时任务调度方法存在的典型问题,在此基础上总结分布式定时任务系统的需求。本文分析了操作系统层面的Crontab、基于JDK的定时器和开源调度框架Quartz这三种方案,总结其中存在的单点问题、缺乏机器监控与故障告警机制、缺乏统一的日志管理模块等问题。以此为基础归纳了系统的功能性需求和非功能性需求,同时提出了经典问题的解决方案。(2)采用了生产者消费者设计模式来进行分布式定时系统的架构设计。整个系统主要分为三个部分,任务调度集群、任务执行集群以及作为两端通信中介的消息中间件。设计后的系统各模块之间分工明确、耦合度低并且易于扩展。(3)使用SpringBoot框架分别实现了系统的调度端和执行端;该系统基于Quartz实现任务的定时触发和周期性触发;连接任务生产者和消费者的消息中间件选择了具备高可靠性的RabbitMQ;此外还使用了分布式协调服务Zookeeper以及分布式RPC工具Dubbo分别作为集群管理工具和项目中的远程接口调用工具。系统实现后既能满足定时任务调度需求,又解决了当下定时任务主流实现方案存在的弊端。(4)进行系统测试。按照制定的需求对系统进行功能和性能测试。测试结果表明本文所设计的系统不仅能满足定时任务的基本业务需求,还具备动态扩展、负载均衡、自动的机器故障发现与任务重启、统一的日志管理等新特性。