大白话系列:如何理解消息队列(MQ)

1. 什么是消息队列?

消息队列也可以称作消息中间件(MQ / Message Queue),是指在分布式系统中完成消息的发送和接收的基础软件,互联网场景中经常使用消息队列进行消息路由、订阅发布、异步处理等操作,来缓解系统的压力。

简言之,消息队列就是一个传递数据的“中转站”。


2. 实际场景

双十一秒杀下单时,由于在一秒钟之内可能有上万笔订单同时进行,为了保证系统不崩掉,所以要使用消息队列来实现异步下单。

整个下单场景步骤可分为:检验库存必须充足——检验用户具有购买资格——扣减库存——将用户信息写入订单。

那我们想想,哪几步需要马上完成,哪几步可以后续再慢慢完成的。

——对啦,当然是前三步必须马上完成,最后一步将用户信息写入订单可以慢慢写进数据库里,因为写进数据库里是一个比较慢的过程,所以可以把用户信息先放进消息队列,然后再从消息队列里取出用户信息,慢慢写进数据库,这样也不影响整个秒杀系统,其他人可以继续秒杀~

一些延伸的问题(此篇文章不会详讲,后期的文章会提到)

  • 消息队列的可靠性:写入消息队列时要确保消息不丢失,通常使用消息持久化或事务机制来保证数据的一致性。否则,万一消息丢失,可能会导致一些订单信息无法写入数据库。

  • 库存扣减的同步问题:高并发下的库存扣减必须小心处理。使用消息队列虽然可以异步写订单,但库存扣减可能会涉及分布式事务或事务一致性问题,需要确保库存不会被误扣或漏扣。


3. 解决了哪些痛点?

3.1 实现了异步处理: 

异步就是不用等其他任务完成,就可以同时进行其他任务,像你点了一份外卖,等着送到的同时,你可以去做别的事情。

在上面的秒杀场景中,如果我们不使用异步处理,那处理任务的周期就会变长,系统的性能也会降低,所以使用消息队列是比较好的办法。
 

3.2 解耦: 

解耦就是让不同的部分独立工作,互不干扰,就像把手机的电池和屏幕分开,坏了电池就换电池,不用整个手机都换。

比如说系统A会交给系统B去处理一些事情,但是A不想直接跟B有关联,避免耦合太强,就可以通过在A和B中间加入消息队列,A将要任务的事情交给消息队列,B订阅消息队列来执行任务。

3.3 削峰:

就是把高峰期间的繁忙任务分散开,先做重要的,剩下的可以慢慢处理,就像排队时先让急需的人先走,后面的人稍等一下。

将峰值期间的操作削减,比如整个操作流程包含10个步骤,后续的3个步骤是不需要强关注结果的数据,可以放在消息队列中。

3.4 有序性: 先进先出(FIFO)原理,先来先处理,比如一个系统处理某件事需要很长一段时间,但是在处理这件事情时候,有其他人也发出了请求,可以把请求放在消息队里,一个一个来处理。

3.5 消息路由: 通过消息队列将不同染色的请求发送到不同的服务去操作,这样达成了流量按照业务拆分的目的。


4. 消息中间件的组成

Broker: 消息服务器,作为Server提供消息核心服务——像一个邮局,负责接收和发送消息。

Producer: 消息生产者,业务的发起方,负责生产消息传输给Broker——就像发信的人,负责创造并发送消息。

Consumer: 消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理——像收信的人,负责接收并处理消息。

Topic: 主题,发布/订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播——就像一个大信箱,所有人都可以往里投信,但只会给订阅的人送。

Queue: 队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收——就像一个特定的信箱,只有指定的人可以收到里面的信。

Message: 消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输——就是信件,包含了需要传送的信息。

TopicQueue 的区别主要在于消息的分发方式:

  1. Topic(主题):消息以广播的方式发送,所有订阅了这个主题的消费者都会收到消息。类似于一个公告板,大家都可以看到。

  2. Queue(队列):消息是按顺序发送给一个特定的消费者,消费者从队列中取走消息。就像排队买票,排在前面的人先拿到票。

总结:

  • Topic 是发布/订阅模式,消息广播给多个消费者。

  • Queue 是点对点模式,消息只发送给一个消费者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值