MQ是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。
消息
两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
队列
数据结构中概念。在队列中,数据先进先出,后进后出。
MQ优势:
应用解耦、异步提速、削峰填谷
应用解耦:
以电商平台举例:在用户下单以后,订单系统会调用其他诸如库存系统、支付系统、物流系统等,如果此时没有引入MQ,则会有如下两个问题:
- 如果库存系统出现故障,会造成整个订单系统崩溃。
- 如果需求修改,新增了一个X系统,此时必须修改订单系统的代码
此时系统耦合性很高,系统的可维护性和容错性很低,如果引入了MQ,订单系统会将消息先发送到MQ中,MQ再转发到其他系统,则会解决以下问题:
- 由于订单系统只发消息给MQ,不直接对接其他系统,如果库存系统出现故障,不影响整个订单。
- 如果需求修改,新增了一个X系统,此时无需修改订单系统的代码,只需修改MQ将消息发送给X系统即可。
异步提速:
系统将消息发送给了MQ而不用等待其他系统的响应,所以提高了速度
削峰填谷:
每个系统能承载的请求都是有限的,如果不采用MQ则系统会因为突然暴增的请求而崩溃,如果采用了MQ,则请求会放到MQ中,系统每次从系统中拉取合适数量的请求,这样在请求的高峰期也不会使得系统崩溃,高峰期产生的数据势必会被积压在MQ中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在一定数目,直到消费完积压的消息,这就叫做“填谷”。
MQ劣势:
- 系统可用性降低 系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。
- 系统复杂度提高 MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。
- 一致性问题 A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败,则会造成数据处理的不一致。