07|乾坤大挪移:秒杀的削峰和限流
佘志东
你好,我是志东,欢迎和我一起从零打造秒杀系统。
前面两节课我们讲了秒杀的隔离策略和流量控制,其目的是降低流量的相互耦合和量级,减少对系统的冲击。这节课我们将继续从技术角度来讨论秒杀系统的其他高可用手段——削峰和限流,通过削峰,让系统更加稳健。
削峰填谷概念一开始出现在电力行业,是调整用电负荷的一种措施,在互联网分布式高可用架构的演进过程中,也经常会采用类似的削峰填谷手段来构建稳定的系统。
削峰的方法有很多,可以通过业务手段来削峰,比如秒杀流程中设置验证码或者问答题环节;也可以通过技术手段削峰,比如采用消息队列异步化用户请求,或者采用限流漏斗对流量进行层层过滤。削峰又分为无损和有损削峰。本质上,限流是一种有损技术削峰;而引入验证码、问答题以及异步化消息队列可以归为无损削峰。
我们先来看一下电商平台线上真实场景下的秒杀流量图,因为数据保密的需要,这里我隐去了具体的流量数字。但是,你可以看到这个图有个非常明显的特点,就是毛刺特别大,流量几秒内爬升到峰值,然后马上掉下来。不管是口罩、茅台,还是春运的火车票,都符合这样的流量特点。
我们现在需要做的就是通过削峰和限流,把这超大的瞬时流量平稳地承接下来,落到秒杀系统里。这就犹如武侠小说里,众人从高塔纵身跳下,张无忌运用乾坤大挪移,把对众人伤害极大的垂直自由落体运动改变为水平运动,使之安然脱险。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了构建秒杀系统的高可用手段——削峰和限流。削峰填谷的概念在电力行业中出现,在互联网分布式高可用架构中也经常采用类似的手段来构建稳定的系统。文章重点讨论了流量削峰的重要性,介绍了几种常用的削峰手段,包括验证码、问答题、消息队列、分层过滤和限流。通过引入这些手段,可以延缓并发请求,过滤无效请求,让真正可以下单的请求越少越好,从而让服务端处理更加平稳,节省服务器的机器成本。文章还详细介绍了验证码和问答题的实现方式,以及如何进行验证码的生成和校验。此外,还介绍了消息队列的作用和常见的开源消息队列。另外,文章还介绍了限流的重要性和实现方式,包括Nginx网关限流和应用层限流的方法。通过这些手段,可以有效保护系统,避免流量突增导致的系统雪崩。整体而言,本文为读者提供了构建秒杀系统的高可用手段和技术实现方面的重要知识,对于想要了解秒杀系统技术实现的读者具有一定的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你搭建秒杀系统》,新⼈⾸单¥59
《手把手带你搭建秒杀系统》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- 董永政置顶给的网址访问不了
编辑回复: 同学你好,我刚试了下可以正常访问,麻烦你检查下网络哈~有问题可以再反馈! GitHub 地址:https://github.com/sanyecao-seckill
2021-10-082 - 淡未然那就是当前面的请求已经把库存消耗光之后,在缓存里设置占位符,让后续的请求快速失败,从而最快地进行响应。 缓存里设置占位符,不太理解,能详细说明一下么?
作者回复: 当库存用完之后,设置占位符的目的是为了避免大流量的缓存击穿,库存完了就直接返回了,没必要再去数据库或redis查
2021-11-0332 - 李威文中说头部电商一般采用非公平限流策略,这个非公平具体指的是啥?
作者回复: 如果限流设置是100个qps,那么第一秒时间内的第101个以及之后用户会被限流,而第二秒的100之内的用户,虽然时间稍微慢了一点,但至少没有被限流拦截,可以去参与抢购
2021-10-2142 - 威如果是分布式限流,一般会怎样做呢
作者回复: 为规避限流计数本身成为热点瓶颈影响性能,一般采用单机限流,单机限流qps * 实例数 = 分布式系统的限流总qps
2021-10-082 - Geek_d0863b老师 您能尽快更新github上的代码嘛😄 谢谢了!
编辑回复: 收到,加班加点更新中~感谢耐心等待!
2021-10-08 - 梅子黄时雨验证码的体验还行吧,虽然数字的体验不好,但是滑块的不错。2022-11-25归属地:上海1
- Sanisy用mq异步处理,结果响应是怎么处理的呢?如果消费比较慢,前端请求超时了,后面怎么返回结果给用户2022-05-0111
- 永昌问答题限流:准备一个题库,题库包含题目和内容,用户开始抢购时,随机从题库拿出一道题,填写答案,点击提交校验即可。2022-02-241
- Lane没太理解,为什么验证码要做签名,不做签名为什么会被篡改2021-10-2211
- 公号-技术夜未眠这里 timestamp 取生成验证码 vCode 时的时间戳,randomSalt 可以理解为后端的一个私钥。那么在前面代码的第 44 行,我们存入 Redis 的值就要换成这个 signature 了。 请问老师,randomSalt是如何获取的了?2021-10-201
收起评论