初识消息队列(一) | 青训营笔记

74 阅读2分钟

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

消息队列

消息队列(Message Queue, MQ), 是一种用于不同进程间通讯的分布式消息中间件, 主要应用场景是削峰, 解耦, 异步

当前常用的消息队列主要有RabbitMQ, RocketMQ以及Kafka等, 在面对一些简单的业务场景时, redis等数据库也可以实现简单的消息队列操作

异步

在一些不存在拓扑操作的应用场景, 我们可以将原先串联执行的操作更改为并联执行, 以实现异步的操作

以下单操作为例, 现在下单操作的逻辑有"支付", "扣除优惠券", "增加积分"等操作, 除了支付操作外, 其余操作的先后执行关系并不明显

所以可以在支付成功执行后同时执行其他操作, 消息队列这里充当的作用就是将支付成功的消息告诉其他执行任务的系统, 以此达到异步的效果

解耦

除了消息队列, 上述操作也可以使用多线程去完成, 但是使用多线程完成会增加系统之间的耦合性, 给bug排查带来较大的困难

例如a, b 两个进程之间存在着互相调用关系, a在等到b的完成后才会执行下一步, 如果b挂掉, 也会直接导致a不可用. 讲消息队列引入进来, 就能较好地保证B挂掉的同时不影响a的执行.

削峰

在高并发场景下, 大量的读写操作可能会把数据库干宕机, 这时侯就显得系统的可靠性很差

此时明显需要一个能够控制数据库访问操作的中间件, 就是消息队列

以双十一场景为例,

假设数据库每个单位时间内可以处理1w次操作, 在日常使用场景下, 每个单位时间基本都能很好的应对

但是在双十一零点这个场景下, 访问量暴增, 单位时间内的数据库操作达到了10w次, 如果不对其加以限制, 会直接把其干废

如果这时候使用消息队列, 对访问请求进行排队, 会将数据库处理能力之外的操作请求进行排队, 等到数据库压力下降之后慢慢处理消息队列中的请求