【秒杀系统】秒杀系统之MQ的运用

前言

在春运车票大抢购、618大促、双十一等等场景,消息中间件的运用是特别广泛的

案例说明

现在的招聘,你有一个电商项目的开发经验,是十分吃香的,因为电商存在多线程、高并发、MQ、微服、消息中间件等等技术栈,所以,我们举例的话就拿秒杀系统来说

秒杀系统场景

比如说:双十一购物狂欢节,活动从双十一零点准时开始,而且抢购人数是有限的,这里我们规定只有前100名用户能享受优惠或者购买商品,那在零点前一秒的时候,同一个系统估计会有上亿个用户同时请求,那这里就出现两个问题了:

1、零点前,用户会不断的刷新页面,保证自己能够正常抢购,那此时系统应该怎么应对这种级别的并发读请求呢?

2、零点后,用户会大范围创建订单,扣除库存,操作数据库的操作,系统又应该怎么应对并发写请求呢?

这两种情况,在下面具体区分讲解

高并发读请求的处理方案

  • 使用缓存技术将请求挡在请求数据库的前面

比如电商的推荐商品,这个可能会一天一个样,可以把推荐出来的结果放在缓存里面,避免了直接请求数据库的操作,效率也会大大提升

  • 有些数据可以静态化的尽量就静态化

比如电商的分类,商品的分类无非就是那些,完全可以在前端写死,只是对应的分类数据要提前对应好即可

  • 限流机制

限制同一个用户、ip或者同一个设备的重复请求,比如一分钟内只允许同一个人或者同一个号访问三次,多的就直接忽略

高并发写请求的处理方案

写请求,也就是创建订单、修改商品库存数据,这些操作是直接操作数据库的,如果在一秒内,上万的请求进来,数据库估计会炸,我们唯一的做法就是分洪,让这些写请求按照顺序执行,不要一次性把压力全部给到数据库,那这个时候就需要使用到消息队列 

使用消息队列的主要应对的问题

  • 流量削峰:控制写操作的并发峰值,比如下单,一分钟只允许100个用户下单,其他人等下一分钟
  • 异步处理:通过异步处理简化秒杀请求中的业务逻辑,比如创建订单要有日志留痕数据库,这个留痕可以异步处理掉
  • 解耦:实现秒杀系统模块之间的依赖程度,更容易管理

具体怎么实现,下面讲解

1、将请求全部用消息队列来接收:用户请求接口之后,系统返回一个类似“请求正在处理”相关友好提示,让队列中的请求逐一处理完之后,把具体状态告诉用户即可

2、削峰填谷:举个例子-商品有1000个,每一次购买需要花费500ms,那1000个商品全部售罄就需要500s的时间,那此时我们有10个队列来处理,那我们只需要50s就能处理完1000个商品的购买请求,50s对于用户应该是可以接受的,一个队列处理100个请求,每次都有100个请求操作数据库,对于数据库来说肯定是没有压力的

3、异步处理:异步处理次要逻辑,比如下单,会有给用户增加积分,那主要逻辑是订单的创建和库存的扣减,次要逻辑就是发积分,那异步专门处理发积分的逻辑即可

4、解耦:比如提供一个接口专门给数据分析团队,模块相对独立

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值