MQ
MQ全程Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。即:存储消息的中间件。
分布式系统通信有两种:直接远程调用和借助第三方完成间接通信。
发送方称为生产者,接收方称为消费者
MQ的优势:
·应用解耦
系统耦合性越高,容错率就越低,可维护性就越低。
使用MQ使得应用间解耦,提升容错性和可维护性。
·异步提速
提升用户体验和系统吞吐量(单位时间内处理请求的数目)
·削峰填谷
提高系统稳定性
MQ的劣势:
·系统可用性降低
系统引入的外部依赖降低,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。如何保证MQ的高可用性?
·系统复杂度提高
MQ的加入大大提高了系统复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。
如何保证消息没有被重复消费?怎么处理信息丢失情况?怎么保证消息传递的顺序性?
·一致性问题
A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理完成,D系统处理失败。
如何保证消息处理数据处理的一致性?
使用MQ需要满足以下条件:
①生产者不需要从消费者处获得反馈。引入消息队列之前的直接调用,其接口的返回值为空,这才让明明下层的动作还没做,上层却当成动作做完了继续往后走,即所谓异步成为了可能。
②容许短暂的不一致性。
③确实是用了有效果。即解耦、提速、削峰这些方面的收益,超过接入MQ,管理MQ这些的成本。
常见的MQ产品: