这是我参与「第五届青训营」伴学笔记创作活动的第10天
今日学习了关于分布式定时任务相关的知识点。
分布式定时任务的意义
主要有如下两点原因:
高可用:单机版的定式任务调度只能在一台机器上运行,如果程序或者系统出现异常就会导致功能不可用,而这个对于一些核心系统功能来说是不可接受的。
单机性能瓶颈:单机能力毕竟有限(主要是CPU、内存和磁盘),随着任务量的提高,始终会有单机处理不过来的情况。
分布式定时任务使用场景:
订单审核、出库、订单超时自动取消与退款
优惠券生成、发放与过期
物流信息推送与状态刷新
数据积压监控、日志监控、服务可用性探测作业
定时备份与更新数据
金融系统每天的定时结算
按月批量统计报表数据
分布式定时任务解决方案
分时方案
严格划分时间片,交替运行计划任务,当主系统宕机后,备用系统仍然工作,但是处理周期被拉长了。
缺点:周期延长了。
HA高可用方案
正常情况下主系统工作,备用系统守候,心跳检测发现主系统出现故障备用系统启动。
缺点:单一系统,不能做负载均衡,只能垂直扩展,也就是硬件层面的升级,无法做水平扩展。
多路心跳方案
采用多路心跳,做服务级,进程级的,IP和端口级别的心跳检测,正常情况是主系统工作,备用系统守候,心跳检测主系统出现故障,备用系统启动,当再次检测到主系统工作,则将执行权交回主系统。
缺点:开发比较复杂,程序健壮性要求高。
任务抢占方案
A,B两台服务器同时工作,启动需要存在一前一后,谁先启动谁率先加锁,其他服务器只能等待,他们同时对互斥锁进行监控,一旦发现锁被释放,其他服务那个先抢到,那个运行,运行前加排他锁。
优点:可以进一步实现多服务器横向扩展。
缺点:开发难度高,会出现死锁的问题。
任务轮询+抢占排队方案
每个服务器首次启动时加入队列;
每次任务运行首先判断自己是否是当前可运行任务,如果是便运行;
如果不是当前运行的任务,检查自己是否在队列中,如果不在队列中,便加入队列。
总结
本节课主要对分布式定时任务相关知识点进行了学习,关于定时任务的解决方案进行了进一步的深入探索,收获颇丰。