为什么使用mq?
♆ℳ为什么使用mq?
为什么使用MQ(消息队列),这是一个很经典的问题,在互联网公司里,MQ是必须用到的,有以下场景:
异步处理
例如有一个表单提交,涉及多个系统的交互,形成一个冗长的流程,同步处理完毕,再返回给用户,则需要一定的时间,用户体验不好。
异步
而如果引入MQ,把关键步骤,照旧同步处理完毕,直接返回给用结果,非关键步骤,我们通过MQ,让系统背后慢慢消费,慢慢处理。
这样用户体验好,数据也最终一致性。
流量肖峰
有一个应用的接口,调用方特别多,如果每当来一个请求,服务器就进行处理,当瞬间来批量的请求,容易一下子把机器打死。
肖峰
而使用了MQ,多了一个消息队列,相当于多了一个缓存区。每增加一个请求,服务器可能不会立刻响应,而是先放到消息队列里边。服务器可以依次进行,在自己的性能范围内,不断地消费消息,处理请求。
系统解耦
互联网公司里边,每个部门,各负责各自系统,如果彼此的联系,仅仅通过rpc的接口调用,如此一来,双方的每次系统迭代更新,都要对彼此提供的client做一定的考量,增加一个字段、修改一个字段、增加一个参数、减少一个参数、修改个参数名,都要及时通知对方,很不方便。
而彼此之间增加MQ之后,虽然也是要留意下消息体字段,但是就没有那么苛刻,系统双方,显得灵活些。
┨➧为什么使用mq?
MQ全称为Message Queue,即消息队列,是一种跨进程的通信机制,用于上下游传递消息。
使用mq的原因:
1. 实现分布式系统之间的解耦调用
在分布式系统中,经常会出现一个服务会有多个消费端调用,而且可能每个消费方需要接入的逻辑不一致,又或者随着项目的不断发展,我们需要接口的未来维护和发展确定一套可扩展的规范,引入消息系统,在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
2. 实现异步调用
有时候我们会遇到这样的场景,用户在客户端提交了一个请求,后端处理这个请求的业务相对比较复杂,如果这个请求使用的是同步调用,客户端就会出现发送请求后过了很久才相应的情况,这对用户体验来说是十分致命的.如果说用户并不关心请求是否处理,对于一些耗时的非事务性的业务处理,我们可以使用mq异步请求的方式,将处理信息放入队列,由后端监听队列自行处理,在将消息存入队列后直接返回客户端相应,加快响应速度.
3. 削峰(队列),解决高并发问题
例如秒杀活动,可能在短时间内会有很大请求同时到后端,如果后端对每个请求都执行业务操作,例如查询数据库和写数据库,会造成服务器压力过大,同时,在同一时间进行大量数据库操作,可能会出现数据异常,我们可以使用mq实现缓冲,将所有请求先放入消息队列中,服务端每次处理业务先从消息队列获取.
------------------
推荐阅读:
半年营收3000亿喊活下去,难道就连5G业务,也救不了华为吗?