项目难点/亮点
整体流程

项目难点我觉得是如何实现一个高精准和高负载,就是说在大任务量的情况如何做到秒级触发。基于这点出发,我当时就在整体的架构设计和存储设计 这两方面下了比较大的功夫。
对于存储设计来说,一开始其实是单单采用MySQL来存储,定时器开启后生成任务就直接放到mysql里。但这样的话

还有这个架构设计。项目之初,我为了解耦各个步骤,就把整个定时任务执行流程给解耦,就把它按照功能拆分成了迁移模块,调度模块,触发模块,执行模块。迁移模块就是在用户开启定时器后根据定时器的配置将任务生成后持久化到任务表中,还有redis。调度模块就是轮询从redis里捞任务片zset,然后交给触发模块去监控这个任务啥时候执行,到点执行了就调用执行模块去回调业务方提供的回调接口,这个回调接口就是具体执行任务的。一开始各个模块之间通信是通过线程池来进行的。但线程池无法实现核心流程的真正解耦以及纵向架构扩展,虽然线程池时进程内的通信,相对于消息队列而言少了一些网络IO,在执行耗时上会有更佳的表现,但这样服务的可用性和整体性能就没那么高了。所以后面架构就打算用消息队列,但我一开始的目标是尽可能的减少外部依赖,那像Rabbitmq,rocketmq对于本项目来说就比较重了。所以就采用了redis的消息队列,本身我们项目就需要redis
