模块 8
场景分析
使用 MySQL 设计消息队列存储。
应该每一个队列一张表,需要操作消息队列的时候,有可能出现表级锁的使用。多个消息队列一张表的情况下,可能造成不必要的阻塞。
设计思路
消息队列的作用有:异步化、解耦和消除峰值等。目前异步化对于我来说使用最频繁,在很多业务场景下,我们可以将实时性要求较低的请求转为异步处理,减小系统负载压力,提高系统稳定性。在离线数据异步处理过程中,消息队列要满足以下要求:
消息不能丢失,即使在系统失败的情况下。消息一旦被插入就一定会被至少处理一次(只被处理一次是最好的,但是实现起来有难度,所以只要求 at-least-once semantic);
FIFO 顺序。(mysql id 自增可满足此特性。当然,可以设计特殊参数做特殊处理)
支持多生产者(mysql 支持并发操作,支持此特点)
支持多消费者。每个消息只能被其中一个消费者处理(业务的处理需要考虑幂等性)。
表设计
复制代码
评论