RabbitMQ-复习
RabbitMQ-复习
消息中间件
诞生业务背景:
- A 系统通过接口调用发送数据到 BCD 三个系统。一天后E 系统也要这个数据,有一天后 C 系统现在不需要了。
- A 系统接收一个前端请求,需要在ABCD四个系统写入库,请求总延时是 3 + 300 + 400 + 200 = 903ms,接近 1s。而互联网类的企业,对于用户直接的操作,一般要求每个请求在 200 ms 以内完成。
- 每天 12:00 ~ 13:00 ,A系统每秒并发请求数量突然会暴增到 5k+ 条。可能会导致数据库崩溃,系统无法访问。其他时间,并发量小于100.
解决了什么:降低A系统其他系统的耦合,提升响应速度,将一个时间段的高并发量平均到其他时间段。
优点:
- 解耦
- 提升响应速度
- 削峰
缺点:
- 可用性降低,rabbitmq可能宕机。
- 复杂度提高
- 需要解决数据一致性
- 消息丢失
- 重复消费
不同消息中间件对比
RabbitMQ 基于erlang并发语言实现,性能好,延时最低。社区活跃
kafaka 大数据方面,日志收集,社区活跃。高可用的实现更好,本身是分布式的。用到了选举算法。
RocketMQ 阿里出品,已捐献给apache,社区不够活跃
RabbitMQ
介绍:基于erlang语言开发,延时低,并发性能高。
架构:
工作模式:7种。
工作模式
路由模式
一个生产者,一个交换机,多个队列,多个消费者
交换机类型 topic
生产者发送消息指定 路由 key.
队列绑定交换机,指定路由key,路由key 可以是通配符。
高级特性
消息可靠性
消费者限流(削峰填谷)
TTL(过期时间)
死信队列
延迟队列
消息追踪(rabbitmq_tracing)
消息一致性解决
幂等性解决
RabbitMQ高可用
为了解决引入RabbitMQ带来的系统可用性降低。
解决方法:镜像集群模式。
镜像集群模式
介绍:将创建的queue的元数据(queue配置信息)和queue里的消息存储到多个实例上。
如何使用镜像集群模式:
在RabbitMQ的管理控制台,就是在后台新增一个镜像集群模式策略,指定数据同步的节点。
镜像集群模式缺点:性能开销大