第十日后端青训营 | 青训营笔记

97 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第10天

今日学习了关于分布式定时任务相关的知识点。

分布式定时任务的意义

主要有如下两点原因:

高可用:单机版的定式任务调度只能在一台机器上运行,如果程序或者系统出现异常就会导致功能不可用,而这个对于一些核心系统功能来说是不可接受的。

单机性能瓶颈:单机能力毕竟有限(主要是CPU、内存和磁盘),随着任务量的提高,始终会有单机处理不过来的情况。

分布式定时任务使用场景:

订单审核、出库、订单超时自动取消与退款

优惠券生成、发放与过期

物流信息推送与状态刷新

数据积压监控、日志监控、服务可用性探测作业

定时备份与更新数据

金融系统每天的定时结算

按月批量统计报表数据

分布式定时任务解决方案

分时方案

严格划分时间片,交替运行计划任务,当主系统宕机后,备用系统仍然工作,但是处理周期被拉长了。

缺点:周期延长了。

HA高可用方案

正常情况下主系统工作,备用系统守候,心跳检测发现主系统出现故障备用系统启动。

缺点:单一系统,不能做负载均衡,只能垂直扩展,也就是硬件层面的升级,无法做水平扩展。

多路心跳方案

采用多路心跳,做服务级,进程级的,IP和端口级别的心跳检测,正常情况是主系统工作,备用系统守候,心跳检测主系统出现故障,备用系统启动,当再次检测到主系统工作,则将执行权交回主系统。

缺点:开发比较复杂,程序健壮性要求高。

任务抢占方案

A,B两台服务器同时工作,启动需要存在一前一后,谁先启动谁率先加锁,其他服务器只能等待,他们同时对互斥锁进行监控,一旦发现锁被释放,其他服务那个先抢到,那个运行,运行前加排他锁。

优点:可以进一步实现多服务器横向扩展。

缺点:开发难度高,会出现死锁的问题。

任务轮询+抢占排队方案

每个服务器首次启动时加入队列;

每次任务运行首先判断自己是否是当前可运行任务,如果是便运行;

如果不是当前运行的任务,检查自己是否在队列中,如果不在队列中,便加入队列。

总结

本节课主要对分布式定时任务相关知识点进行了学习,关于定时任务的解决方案进行了进一步的深入探索,收获颇丰。