消息中间件-选型
目录
1. 消息中间件作用
设想一个场景:a系统同步调用b系统,b系统收到请求后进行处理,但是a系统并不关注b系统的出来结果,但该调用使得a系统存在并发瓶颈,所以我们需要一个支持a系统可靠异步调用b系统的方案,这个便是消息中间件。
主要有以下三点用途
- 限流削峰:MQ可将系统超量请求暂存在队列中,避免系统因短时超量请求崩溃
- 异步解耦:同步调用会大大降低系统吞吐量及并发度,系统耦合度高,在两层间增加MQ层,实现同步至异步的转换,也实现了系统的解耦
- 数据收集:分布式系统产生海量的业务日志、监控数据、用户行为等数据,如需对这些数据进行采集,通过MQ可完成此类数据收集
2. 同类产品对比选型
ActiveMQ | RabbitMQ | Kafka | RocketMQ | |
应用场景 | 新系统不推荐 | 大数据领域的实时计算、日志采集等场景 | 推荐使用 | |
社区活跃度 | 低 | 高 | 高 | 高 |
单机吞吐量 | 万级 | 万级 | 十万级 | 十万级 |
MQ协议 | JMS协议 | AMQP协议 | 自研协议 | 自研协议 |
2.1 ActiveMQ
老系统使用较多,目前项目使用较少,使用Java开发
2.2 RabbitMQ
吞吐量比Kafka与RocketMQ低,使用ErLang语言开发,如是Java团队,定制化开发难度较大
2.3 Kafka
高吞吐量,常用于大数据领域的实时计算、日志采集等场景,使用Java开发
2.4 RocketMQ
经过数年阿里双11考验,性能及稳定性非常高,使用Java开发