mq概念
MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器(是一种先进先出数据结构),多用于分布式系统之间进行通信。
mq的作用
解耦、异步、削峰填谷
解耦
降低系统耦合性,提高了可维护性。
异步
削峰填谷
5000 个请求写入到 MQ 里面,系统 A 每秒钟最多只能处理 2000 个请求(MySQL 每秒钟最多处理 2000 个请求),系统 A 从 MQ 里慢慢拉取请求,每秒钟拉取 2000 个请求。MQ,每秒钟 5000 个请求进来,结果只有 2000 个请求出去,结果导致在高峰期(21小时),可能有几十万甚至几百万的请求积压在 MQ 中,这个是正常的,因为过了高峰期之后,每秒钟就 50 个请求,但是系统 A 还是会按照每秒 2000 个该请求的速度去处理。只要高峰期一过,系统 A 就会快速的将积压的消息给解决掉。
消息模型
①点对点消息队列模型
允许多个生产者往同一个队列发送消息。但是,如果有多个消费者,实际上是竞争的关系,也就是一条消息只能被其中一个消费者接收到,读完即被删除。
②发布-订阅模型
在发布-订阅模型中,存放消息的容器变成了 “主题”,订阅者在接收消息之前需要先 “订阅主题”。最终,每个订阅者都可以收到同一个主题的全量消息。
仔细对比下它和 “点对点队列模式” 的异同:生产者就是发布者,队列就是主题,消费者就是订阅者,无本质区别。唯一的不同点在于:一份消息数据是否可以被多次消费。
引用mq带来的技术难点
(1) 系统可用性降低
系统引入的外部依赖越多,系统稳定性就越差。一旦MQ宕机,就会对业务产生影响,必须保证MQ的高可用。
(2) 系统复杂性提高
MQ的加入大大增加了系统的复杂性,需要保证消息没有被重复消费、保证消息的可靠性(消息丢失)、保证消息传递的顺序性。
(3)一致性问题
对于MQ中传来的消息数据,如果A、B系统处理成功了,C系统处理失败了,如果保证数据处理的一致性?