文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一次阿里面试,我被问到了如何设计秒杀系统

2024-12-03 18:40

关注

对于秒杀活动来说,要求系统不会出现压力过大而崩溃的场景,并且不会出现超卖、少卖的情形。

所以秒杀系统中我们需要思考:

对此我的解决思路是:

 


秒杀架构图

秒杀架构图如上。

客户端

用户发起请求的端口,目前电商项目秒杀活动主要客户端有微信小程序、H5(浏览器)、各平台app(比如Android、iOS、Windows)。我们可以在客户端实现限流机制,这样就可以避免用户发送大量请求到服务端。

客户端的限流可以控制按钮的点击频率,比如对按钮置灰。

反向代理

我们可以使用Nginx实现请求分流,通过负载均衡将请求均匀的分布到不同的Web节点中。

Nginx也可以作为限流使用。Nginx可以控制单位时间内的请求数,限制同一时间的连接数。

API网关

如果实际参与秒杀活动的用户非常大,并发请求非常大。我们就需要在API网关这一层中进行限流,这里可以实现对单个Web节点实现每秒最大请求数限制。

我们也可以控制每个用户的最大请求数,通过Redis记录每个用户的请求数。

缓存

在服务层业务中,为减少对数据库的访问,需要进行缓存设计,我们可以使用本地缓存,或者分布式缓存。

队列

队列主要是用来实现流量的削峰填谷,我们可以使用RocketMQ、Kafka等消息中间件作为分布式的队列。

关于限流

秒杀系统中为什么需要限流?在秒杀活动中商品库存是有限的,而请求的用户数量远远大于商品库存数量。大部分的用户请求实际上是无法抢到商品的无效流量。所以这部分流量可以拦截在上游进行限流。

为了避免用户采用脚本或者频繁点击发送大量请求,而导致其他用户无法正常参加活动,我们也需要控制用户每秒的请求量。

我们可从URI和用户两个方面实行限流。

URI限流示例代码:

 

用户维度的限流示例代码:

 

我们获取URI维度的限流器对象uriLimiter,和用户维度的限流器对象userLimiter。如果tryAcquire()成功获得许可,则请求通过,进入后续业务。否则直接报异常,前端界面作相应的友好提示。

在缓存中扣减库存

使用Redis来存储库存数量,当用户发起抢购请求时,先判断Redis中的库存是否可用。如果可用,将抢购请求放入分布式队列中,采用异步方式处理后续操作,并完成下单。同时在Redis中作库存扣减。

示例代码如下:

 

先做库存扣减并获取扣减后的库存数量,如果库存数量大于或等于0,将订单创建请求发送到mq。否则返回抢购失败的信息。

消费者创建订单:

 

关于如何初始化库存?

在抢购活动开始前,有运营人员在后台手动将商品库存从数据库同步到缓存中。库存的扣减在缓存中进行扣减。

利用Redis单线程特性可以实现多线程下安全的库存更新。如果查询缓存中的值时,发现没有,需要从数据库中查询,然后再同步到缓存中,这个过程需要加锁。

示例代码如下:

 

总结

秒杀设计是典型的高并发系统,关于秒杀系统的设计,经常会在面试中被问到。在设计秒杀系统时,我们需要考虑:

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯