分布式消息队列(MQ)

1 应用场景

  • 服务解耦
  • 削峰填谷
  • 异步化缓冲

2 应用思考点

  • 生产端可靠性投递
    • 生产端消息发布出去后,要保持和数据库的原子性
  • 消费端幂等
    • 消费端不能消费一次
  • 高可用
  • 低延迟
  • 消息可靠性
  • 消息的堆积能力
    • 消息在高峰期最大能堆积的程度
  • 扩展性
    • 是否能够支持无感知的扩容

3 技术选型关注点

技术选型主要关注一下几点:

  • 各个MQ的性能、优缺点、相对的业务场景
  • 集群架构模式,分布式、可扩展、高可用、可维护性
  • 综合成本问题,集群规模,人员成本
  • 未来的方向、规划、思考

3.1 ActiveMQ

如果系统存在大流量,高并发场景,ActiveMQ是不适合的,它适合一些中小型公司或者公司业务边缘模块的系统使用。

3.2 RabbitMQ

RabbitMQ比较适合大流量,高并发等应用场景,他有镜像队列来保证数据不会丢失,对可靠性和高可用有保障。但是他的横向拓展能力不是很好。

3.2.1 RabbitMQ四种集群架构

3.2.1.1 主备模式

主备模式可以理解为热备份,他分为master和slave,master是对外开放的,主要用于读写操作,而slave通常用于备份,当master节点挂掉之后,slave节点会被升级为master继续对外提供服务。

3.2.1.2 远程模式

远程模式是RabbitMQ早期版本提供的多活的模式,主要是提供异地容灾转移的,当当前节点处理不过来请求时,可以转发到下游节点去处理(架构简单,配置复杂)

3.2.1.3 镜像模式

镜像模式是业界使用较多的模式,可以保证消息的可靠性。

3.2.1.4 多活模式

多活模式和远程模式差不多,主要用于异地容灾多活,数据转储和数据转发的功能

3.3 RocketMQ

他的可拓展性比较好,高可用性也不错,但是可维护性相对比较麻烦

3.4 kafka

kafka可以在很廉价的机器上发挥出很高的性能