分布式消息队列(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可以在很廉价的机器上发挥出很高的性能