消息队列的作用以及使用场景

消息队列的作用以及场景介绍

什么是消息队列?

消息队列是分布式架构中的重要组件,能够解决系统之间的耦合,流量削峰,异步处理,持久化等问题,从而实现高性能,高可用,可拓展的最终一致性系统。常见的消息队列有ZeroMQ、ActiveMQ、RabbitMQ、Kafka等

消息队列的使用场景

在业务中主要应用于异步处理,应用解耦,流量削锋,消息通讯四个场景

1.异步处理

场景:在注册系统中,当用户提交好注册信息等待发送邮件验证和及短信验证码。传统做法有两种方式

串行方式:将注册信息写入到数据库成功后,再发送注册邮件,然后再发送短信验证码。此时我们的任务是串行的。需要的时间是150ms

并行方式:当用户提交了注册信息并成功写入数据库,同时发送邮件验证和短信验证码。此时任务是并行的,需要的时间是100ms,提高了响应速度

当引入了消息队列后架构如下:

注册邮件和短信验证写入消息队列是很快的,时间几乎可以忽略不计,而写入后,立即返回。总共耗时50ms,进一步提高了系统的响应时间。

2.应用解耦

场景:电商交易平台中的订单系统和库存系统有着很大的耦合关系,当二者未解除耦合时,如果库存系统在高并发场景不能及时处理任务或者不能工作,此时订单系统也会崩溃,用户会下不了订单

引入消息队列后:

我们的订单系统接收到的订单只要写入到消息队列就会返回下单成功,库存系统根据自己的能力从消息队列中处理任务。此时订单系统不会因为库存系统的异常而不能工作。

3.流量削锋

场景:一般应用于12306抢票,或者双11秒杀系统,这个场景的特点是,流量高,时间短。我们的流量会在短时间远高于平时。如果你按照最高标准来配置服务器资源那么会大大浪费,而引入消息队列,可以起到流量削锋的效果,来应对短时间的高并发。

  • 可以控制活动人数
  • 缓冲服务器压力

4.日志处理

场景:分布式日志处理系统elk常常会结合kafka来作为中间件优化日志传输。

  • 客户端采集日志负责数据采集,定时写入到kafka队列
  • kafka消息队列,负责日志数据的接收存储和转发
  • 日志处理应用:用于订阅消费kafka中的日志数据

下图摘自新浪kafka日志处理应用实例:

5.消息通讯

消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等

点对点通讯:

客户端A和客户端B使用同一队列,进行消息通讯。

聊天室通讯:

客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。

以上实际是消息队列的两种消息模式,点对点或发布订阅模式。模型为示意图,供参考。

详细请参考 https://www.cnblogs.com/ruiati/p/6649868.html

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...