目录
一、什么是MQ
二、MQ的优缺点
1、MQ的优点
1.应用解耦
2.削峰填谷
3.异步提速
2、MQ的缺点
1.可用性低
2.系统复杂度高
3.数据一致性问题
三、MQ使用场景
四、常见的MQ
一、什么是MQ
MQ(Message Queue):消息队列,他是在消息传输过程中的消息保存容器,生产者生产消息后存入消息队列后被消费者消费时拿走。MQ多用于分布式系统之间的通信。分布式系统之间的通信主要有两种:远程直接调用接口、通过MQ来实现通信
二、MQ的优缺点
1、MQ的优点
1.应用解耦
在分布式系统里各个子系统去进行通信如果使用远程调用的方法代码的耦合度比较高,如果某个接口异常或后续添加新的子模块对原有系统的代码改动是非常大的耦合度高
如果我们使用MQ进行通信就可以很好的达到解耦的效果,后续新增模块不再需要去关心系统A如何实现,直接去对接MQ即可
2.削峰填谷
如果我们的服务器等承受的请求位1000,当某一时刻请求剧增达到10000时,此时服务器就会宕机,面对剧增的请求我们可以在请求到达服务器前让他先存入MQ里,然后由MQ每次给服务器1000条请求进行处理
3.异步提速
当用户确认订单后后台会相应的去调用库存系统、物流系统、支付系统等,订单系统收到各个系统的响应后才会给用户反馈,此过程是同步的,需要消耗的时间对于用户来说是比较长的用户
用户需要等待500+500+500+10ms,此时如果我们加入MQ异步的去处理就会极大的提高响应速度
我们只需要把消息交给MQ去异步地处理就可以提高响应速度与系统吞吐量
2、MQ的缺点
1.可用性低
如果使用不当导致MQ服务器宕机就会对整个分布式系统产生很大的影响
2.系统复杂度高
使用MQ关联各个子系统,导致系统复杂度高可能会存在消息重复消费、消息丢失等问题
3.数据一致性问题
使用MQ关联分布式系统的子系统时数据的统一性也是一个存在的问题
三、MQ使用场景
当生产者不需要等待消费者返回相应的业务场景就可以使用MQ ,以及使用MQ对系统带来的收益大于缺点时可以使用MQ,业务允许数据存在短暂的不一致性时也可以使用MQ
四、常见的MQ
社区 | 开发语言 | 支持协议 | 支持语言 | 单机吞吐量 | 延迟 | 特点 | |
RabbitMQ | Rabbit | Erlang | AMQP、 XMPP、SMTP、STOMP | Erlang、Java、Ruby等 | 万 级 | 微秒级 | 社区活跃、并发性好、延迟低、性能好 |
Kafka | Apache | Scala、Java | 自定义协议,他的社区封装了HTTP协议 | Java、PHP、Python等 | 十万级 | 毫秒内 | 主要用户大数据领域,只支持主要的MQ功能 |
RocketMQ | 阿里 | Java | 自定义协议 | Java、C++ | 十万级 | 毫秒级 | 具有完备的MQ功能,可扩展性极佳 |
ActiveMQ | Apache | Java | OpenWire、AMQP、STOMP、XMPP、REST | Java、C、C++、PHP等 | 万级 | 毫秒级 | 老牌产品、文档多、成熟 |
其中单机吞吐量最好到最差依次是:RocketMQ、Kafka、RabbitMQ、ActiveMQ