聊聊消息队列

共计 983 个字符,预计需要花费 3 分钟才能阅读完成。

为啥要使用消息队列呢?

现在常用的就是微服务架构,分布式部署,业务场景越来越复杂,单机的技术栈和中间件已经不适用了,使用起来对系统很不友好,所以引入消息队列中间件。

都在哪些场景用到消息队列?

消息队列总结下来有三个作用:异步解耦削峰

异步

异步是指通信双方不需要共同的时钟,发送方不需要等待接收方回应,接收方也不知道发送方什么时候发送的。
举个例子来介绍消息队列在系统中的异步作用

比如下单系统,最开始可能就下单了付钱就完事了。但是,后来加了优惠券,后来又加了积分系统,后来又加了短信通知……随着业务链路越来越复杂,下单接口的RT(ResponseTime)就会越来越长。而这些功能其实是可以同时做的,而不需要同步处理。这个时候,就可以采用消息队列实现异步。

那异步使用线程去完成不是也可以吗?

解耦

是的,线程也可以实现异步,但是线程的实现是需要在原来系统中再加代码实现的,每次加点东西就要重新发布系统,岂不是很麻烦。而且耦合度极高,出问题排除也麻烦。就算每个流程都做异常捕获处理,这些功能也会像个定时炸弹一样,指不定在什么时候爆炸。

使用消息队列,耦合问题直接迎刃而解。

下单成功,直接发个消息,下单系统就不需要等待后续的处理了。优惠券系统,积分系统等去订阅这个消息,再做处理即可。

聊聊消息队列
消息队列的使用

削峰

将请求放入消息队列,至于每秒消费多少请求,就看服务器的QPS处理能力了。

消息队列有啥问题呢

系统复杂性

加入消息中间件,就相应要去维护它,使用过程中也有可能出现重复消费,消息丢失,顺序消费等问题。

数据一致性

使用了消息队列,自然就成了分布式服务,就会有数据一致性的问题。所以就要保证每个服务都成功了,才算整个流程成功。保证分布式数据一致性,就要用到分布式事务

可用性

要是消息中间件挂了怎么办,所以要还得保证其高可用。

对比常见的消息队列

市面上常见的消息队列有kafka,RabbitMQ,RocketMQ,ActiveMQ。
RabbitMQ和ActiveMQ因为吞吐量和社区活跃度的原因,在大厂使用的比较少了。直接上图看看之间的差别

聊聊消息队列
主流消息中间件优缺点

简单来说,吞吐量上,RocketMQ和kafka有明显的优势,时效性上RabbitMQ更好一些。

其中kafka已经是业界消息队列的标杆了,在大数据领域,海量日志采集,实时计算场景都使用的非常广泛。

如何选用还是要依据具体的业务场景。

正文完
 
Dustin
版权声明:本站原创文章,由 Dustin 2020-02-08发表,共计983字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。