高可用延迟队列设计与实现
<!-- 高可用延迟队列设计与实现 --> 延迟队列:一种带有 延迟功能 的消息队列 延时 → 未来一个不确定的时间 mq → 消费行为具有顺序性 这样解释,整个设计就清楚了。你的目的是 延时,承载容器是 mq。 背景 列举一下我日常业务中可能存在的场景: 建立延时日程,需要提醒老师上课 延时推送 → 推送老师需要的公告以及作业 为了解决以上问题,最简单直接的办法就是定时去扫表: 服务启动时,开启一个异步协程 → 定时扫描 msg table,到了事件触发事件,调用对应的 handler 几个缺点: 每一个需要定时/延时任务的服务,都需要一个 msg table 做额外存储 → 存储与业务耦合 定时扫描 → 时间不好控制,可能会错过触发时间 对 msg table instance 是一个负担。反复有一个服务不断对数据库产生持续不断的压力 最大问题其实是什么? 调度模型基本统一,不要做重复的业务逻辑 我们可以考虑将逻辑从具体的业务逻辑里面抽出来,变成一个公共的部分。 而这个调度模型,就是 延时队列 。 其实说白了: 延时队列模型,就是将未来执行的事件提前存储好,然后不断扫描...