MQ(MessageQueue)消息队列,先进先出的数据结构。消息由生产者发送到MQ进行排队,消费者按照顺序进行消费。
优点:
- 异步:能提高系统的响应速度、吞吐量。
- 解耦:服务之间进行解耦,才可以减少服务之间的影响。提高系统整体的稳定性以及可扩展性。
- 削峰:以稳定的系统资源应对突发的流量冲击。
缺点:
- mq宕机导致系统不可用,系统可用性降低
- 系统复杂度提高,需要考虑消息延迟、消息重复等问题、。
- 消息一致性问题,通过MQ发送消息给B、C系统进行后续的业务处理。如果B系统处理成功,C系统处理失败。
常用的MQ产品比较:
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
语言 | java | erlang | java | csala |
单机吞吐量 | 万级 | 万级 | 10万级 | 10万级 |
时效性 | 毫秒级 | 微秒级 | 毫秒级 | 毫秒级 |
可用性 | 高,基于主从架构实现高可用 | 高,基于主从架构实现高可用 | 非常高,分布式架构 | 非常高,分布式架构。一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用。 |
消息可靠性 | 有较低的概率丢失数据 | 通过配置可以0丢失 | 通过配置可以0丢失 | |
优劣势总结 | 功能强大,非常成熟。社区维护少,偶尔会有数据丢失,适合小规模场景使用。 | erlang语言开发读源码相对困难,性能很好,延时低,吞吐量较低。适合小规模场景。 | 接口简单易用,大规模吞吐,性能好,支持分布式扩展,支持大规模的topic数量,支持复杂MQ业务场景。java语言可自己阅读源码。适合大部分场景 | kafka就是提供较少的核心功能,提供超高的吞吐量,秒级的延迟,高可用和可靠性,支持少量的topic,消息可能重复消费。主要适用于日志分析,大数据采集。 |