这是我参与「第三届青训营-后端场」笔记创作活动的第二篇笔记
课堂场景案例
春节集福活动
做为后端开发应该如何设计整个技术方案?
1.使用扫描组件进行扫描,同时对发奖金额进行计算。
2.定时开奖
如果用户规模和资金规模达到了亿级别,QPS达到了百万级别,我们应该怎么办?
我们可以使用分布式定时任务。
例子1:windows批处理
我们需要10分钟后让电脑自动关机。\
- 新建文本文档。
- 更改文件名为
自动关机.bat - 修改文件内容为
shutdown -s -t 600 - 运行该批处理文件。
例子2:windows任务计划程序
我们需要每天12点自动打卡。
- 先写出对应的执行文件
- 在windows计算机管理中创建基本任务。
例子3:Linux 命令 -CronJob
我们需要在每天的02:30定时清理机器日志。 缺点:只能控制单台机器,仅支持Linux
例子4:单机定时任务 Timer,Ticker
我们需要每隔五分钟定时刷新本地缓存数据。
支持跨平台,但仍旧仅支持单台机器
例子5:单机定时任务 ScheduledExecutorService
我们需要每隔五分钟定时执行多个任务。
拥有线程池,资源利用率较高。但仍旧仅支持单台机器
例子6:任务调度 quartz
单个任务控制完美,但没有负载均衡机制
分布式定时任务
平台化管理。分布式部署。支持海量数据
什么是分布式定时任务?
把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。
分布式定时任务按照触发时机分类:
- 定时任务
- 延时任务
- 周期任务
分布式定时任务按照执行方式分类:
- 单机任务:随机触发一台机器执行任务。适用于计算量小,并发度低的任务。
- 广播任务:广播到所有机器上执行同一个任务。比如所有机器一起清理日志
- Map任务:一个任务可以分离出多个子任务。每个子任务负责处理一部分的计算。适用于计算量大,单机无法满足的任务
- MapReduce任务:在Map任务的基础上,对所有子任务的结果做汇总计算。适用于计算量大,需要对子任务结果进行汇总的任务。