举例说明一下消息队列的应用场景

消息队列是分布式系统中重要的组件,主要实现了:异步消息,应用解耦,流量控制等功能。

应用场景

1.异步处理

以注册用户为例,

假设用户注册需要发送注册邮件,发送短信及数据入库

用户注册后 首先进行数据入库,入库后的两个操作通常有并行与串行两种执行方

1.串行:两个功能顺序执行,先发邮件后发短信,或先发短信后发邮件

2.并行:发短信和发邮箱两个功能同时异步执行,以上三个任务完成后,返回给客户端。

假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。

优化:

引入消息队列,将不是必须要的业务逻辑,入消息队列异步处理

优化后用户请求的响应时间降低为55ms

2.应用解耦

以电商下单为例

用户下单后,订单系统通知库存系统,对库存进行操作,传统的做法是订单系统调用库存系统的接口完成操作

 传统做法的缺点:

1)两系统之间存在耦合

2)若库存系统出现异常,将会导致订单系统同时出现异常,导致本次订单失效

引入消息队列

此时订单系统工作为:订单系统完成本职功能后,将此消息写入消息队列,即可返回下单成功

此时库存系统工作:订阅下单的消息信道,从信道中获取下单消息,进行库存操作

此时若库存系统发生故障,将不会影响到订单系统功能,订单系统照样可以接受用户下单,因为系统的解耦,订单系统只关心自己的业务,订单写入消息队列后的后续操作订单系统就不用再关心了

3.削峰填谷

以秒杀活动为例

秒杀活动的特点是短时流量暴增,导致服务器无法处理大量请求,引发响应过慢或服务宕机(一般影响最大的是mysql)

引入消息队列

1)缓解数据库压力,可将大量数据库的写操作入消息队列,消息队列再以数据库能接受的流量控制访问数据库(假设数据库每秒能处理100条SQL,秒杀期间每秒进入1000条SQL,活动期间的SQL请求大量堆积在消息队列中(削峰),消息队列再以100条每秒的流量访问数据库,待秒杀结束后流量恢复正常每秒10条,此时消息队列仍以每秒100条的流量向数据库请求(填谷))

2)控制请求数量

 用户的请求被接收后,先入消息队列,假设请求数量达到预设最大值,则抛弃掉后续进来的请求

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值