这是我参与「第五届青训营」伴学笔记创作活动的第 7 天
春节集卡
每年春节,各大互联网公司都会推出一些好玩的活动,比如说像支付宝,有集五福,自觉跳动,它就会有这个春节集卡,然后刚刚同学们听到上抖音发分20亿,其实就是今年抖音的春节活动。
玩法如下:
- 用户通过完成指定任务,提升DAU
- 用户抽卡,集卡,获得开奖资格
- 瓜分现金
春节活动是互联网公司的重中之重,对技术的挑战也非常大
通过扫描脚本扫描用户的季卡信息,对数据进行汇总计算
根据总金额计算每个用户可以获得的金额
在指定时间进行定时开奖
这个过程要面临一些技术挑战:
- 亿级用户规模
- 亿级资金规模
- 百万级读写QPS
这样的场景就提出了一些新的需求:
自动化 + 定时执行 + 海量数据 + 高效稳定
自动化:整个计算跟发奖的过程是全自动的
定时执行:除夕的20点定时发展,那这个时间一定是准确的,一定是要在这个时间节点完成的
海量数据:参与的用户量有几亿的用户,集卡的数据可能是这个数量数量的几倍或几十倍的这样一个量级
为了应对这些挑战,就要依赖今天的主角:分布式定时任务
发展历程
Windows批处理
Case1:10分钟后Windows电脑自动关机
自动关机.bat
shutdown -s -t 600 # 600秒,十分钟
Windows任务计划程序
Case2:每日12:00自动打卡
抓包分析实现打卡过程,通过Python写一个定时打卡的程序,再添加到定时任务中
Linux-CronJob
Case3:每天2:30定时清理机器日志
优点:操作简单、稳定可靠
缺点:只能控制单台机器,无法使用于其他操作系统
单机定时任务-Timer、Ticker
Case4:每隔五分钟定时刷新本地缓存数据
Java
Go
缺点:只能单台机器执行
单机定时任务-ScheduleExecutorService
Case5:每隔5分钟定时执行多个任务
当需要执行多个任务时,如果每个任务启动一个线程,会很占用系统资源
使用ScheduleExecutorService可以实现线程服用,不需要每个任务都创建新的线程
缺点:依然是单机可用
任务调度:Quartz
市面上任务调度最强大的工具
缺点:没有负载均衡机制、分布式支持不好