消息队列初步

1、使用场景

异步(秒杀系统)
秒杀操作一般分为多个步骤
如所库存,生成订单,发送短信通知等
锁库存后就丢进消息队列中,后面可以对接各种异步处理
流量控制
在网关和后端服务之间增加消息队列
此处运维人员可以水平扩容后端服务和消息队列
同时无法处理的请求,可以超时关闭
或者使用令牌桶机制
在知道请求量的情况下,令牌桶机制实现简单,redis也可以实现令牌桶机制,或者自己实现一个令牌桶服务
解耦合
实现应用与应用之间的解耦
比如原来的短信通知直接对接短信平台
加入消息队列后服务端和短信平台之间不相互影响

2、不足

增加了系统复杂度
增加了处理链路,可能会使时间延长 一般生产者到消费者之间的数据时延是5ms,如果有处理逻辑可达到1s
可能会有消息丢失

3、选型

作为一款及格的消息队列产品,必须具备的几个特性包括

消息的可靠传递:确保不丢消息;
Cluster:支持集群,确保不会因为某个节点宕机导致服务不可用,当然也不能丢消息;
性能:具备足够好的性能,能满足绝大多数场景的性能要求。

RabbitMQ
开源
轻量级开箱即用
生产者(Producer)和队列(Queue)之间增加了一个 Exchange 模块支持灵活的路由配置
缺点
消息堆积影响性能

RocketMQ
java开发
国产中文社区
对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应,如果你的应用场景很在意响应时延,那应该选择使用 RocketMQ
RocketMQ 的性能比 RabbitMQ 要高一个数量级,每秒钟大概能处理几十万条消息
缺点
在国际上还没有那么流行,与周边生态系统的集成和兼容程度要略逊一筹

Kafka
设计上大量使用了批量和异步的思想,这种设计使得 Kafka 能做到超高的性能。Kafka 的性能,尤其是异步收发的性能,是三者中最好的,但与 RocketMQ 并没有量级上的差异,大约每秒钟可以处理几十万条消息。
Kafka 与周边生态系统的兼容性是最好的没有之一,尤其在大数据和流计算领域,几乎所有的相关开源软件系统都会优先支持 Kafka
但是 Kafka 这种异步批量的设计带来的问题是,它的同步收发消息的响应时延比较高,因为当客户端发送一条消息的时候,Kafka 并不会立即发送出去,而是要等一会儿攒一批再发送,在它的 Broker 中,很多地方都会使用这种“先攒一波再一起处理”的设计。当你的业务场景中,每秒钟消息数量没有那么多的时候,Kafka 的时延反而会比较高。所以,Kafka 不太适合在线业务场景

总结
如果说,消息队列并不是你将要构建系统的主角之一,你对消息队列功能和性能都没有很高的要求,只需要一个开箱即用易于维护的产品,我建议你使用 RabbitMQ

如果你的系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,那 RocketMQ 的低延迟和金融级的稳定性是你需要的

如果你需要处理海量的消息,像收集日志、监控信息或是前端的埋点这类数据,或是你的应用场景大量使用了大数据、流计算相关的开源产品,那 Kafka 是最适合你的消息队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值