如何设计一个秒杀系统
许令波
前阿里巴巴高级技术专家
立即订阅
23218 人已学习
课程目录
已完结 9 讲
开篇词 | 秒杀系统架构设计都有哪些关键点?
免费
01 | 设计秒杀系统时应该注意的5个架构原则
02 | 如何才能做好动静分离?有哪些方案可选?
03 | 二八原则:有针对性地处理好系统的“热点数据”
04 | 流量削峰这事应该怎么做?
05 | 影响性能的因素有哪些?又该如何提高系统的性能?
06 | 秒杀系统“减库存”设计的核心逻辑
07 | 准备Plan B:如何设计兜底方案?
08 | 答疑解惑:缓存失效的策略应该怎么定?
如何设计一个秒杀系统
登录|注册

07 | 准备Plan B:如何设计兜底方案?

许令波 2018-10-07
这是《如何设计一个秒杀系统》专栏的最后一篇文章,前面我们一起看了很多极致的优化思路,以及架构的优化方案。但是很遗憾,现实中总难免会发生一些这样或者那样的意外,而这些看似不经意的意外,却可能带来非常严重的后果。
我想对于很多秒杀系统而言,在诸如双十一这样的大流量的迅猛冲击下,都曾经或多或少发生过宕机的情况。当一个系统面临持续的大流量时,它其实很难单靠自身调整来恢复状态,你必须等待流量自然下降或者人为地把流量切走才行,这无疑会严重影响用户的购物体验。
同时,你也要知道,没有人能够提前预估所有情况,意外无法避免。那么,我们是不是就没办法了呢?当然不是,我们可以在系统达到不可用状态之前就做好流量限制,防止最坏情况的发生。用现在流行的话来说,任何一个系统,都需要“反脆弱”。
具体到秒杀这一场景下,为了保证系统的高可用,我们必须设计一个 Plan B 方案来兜底,这样在最坏情况发生时我们仍然能够从容应对。今天,我们就来看下兜底方案设计的一些具体思路。

高可用建设应该从哪里着手

说到系统的高可用建设,它其实是一个系统工程,需要考虑到系统建设的各个阶段,也就是说它其实贯穿了系统建设的整个生命周期,如下图所示:
图 1 高可用系统建设
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《如何设计一个秒杀系统》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

  • 江中芦苇
    世界好小,大佬作为滴滴复试面试官
    2018-11-03
    30
  • 小喵喵
    1。降级方案可以这样设计:当秒杀流量达到 5w/s 时,如何判断达到了5w/s呢?我想到的写一个windows服务或者一个工具不停的跑,但这样也太low了吧。期待老师更好的方案?
    2.客户端限流,是在数据库做配置吗?配置某些用户不让发起请求或者发请求次数的限制吗?
    3.服务端限流,完全不明白,请老师举例说明一下。
    4.例如我们的系统最高支持 1w QPS 时,可以设置 8000...,你是怎么判断是否到达8000?

    作者回复: 统计qps用一个计数器就行,来一个请求加一,一秒统计一次

    客户端和服务端限流是针对rpc调用来说的,发起方可以理解为客户端,调用方可以理解为服务端,限流就是分别限制发起方和调用方的次数

    2018-10-07
    9
  • 似水流年
    从第一篇到第最后一篇大都是思想理论指导,有具体的例子和实现伪代码会更好

    作者回复: 具体的实现,还是留给大家自己尝试啦☺

    2018-10-14
    7
  • 小喵喵
    编码阶段:例如涉及远程调用问题时,要设置合理的超时退出机制,防止被其他系统拖垮,也要对调用的返回结果集有预期,防止返回的结果超出程序处理范围,最常见的做法就是对错误异常进行捕获,对无法预料的错误要有默认处理结果。
    1.如何判断调用一个接口超时?接口那边不会返回超时标识的。
    2.结果集有预期,后面请举一个具体的例子说明一下,什么预期,程序处理范围,错误异常进行捕获,默认处理结果等等。

    作者回复: 接口超时设置以及异常处理很多开源框架都有,建议你看一下例如dobbo这种框架是如何实现的😊

    2018-10-07
    5
  • _Mr.Bool ®
    之前分布式QPS限流用的Redis+lua实现的,还好用的redis cluster集群结构,100个节点,几十万QPS都稳定扛下来了
    2019-02-26
    1
  • godtrue
    意犹未尽,内功心法口诀已经传授,下面就看悟性和修炼啦!
    为了系统的高可用,我们需要B计划,为了使系统仍然可用,我们准备了降级、限流、拒绝服务三件法宝。每次备战,也玩这些!不过是组织配合实现自己完全实现还远的很。
    这个专栏值得反复回味!

    作者回复: 😉

    2018-11-14
    1
  • 贵楠
    老师可否提供一个demo呢

    作者回复: 像load保护这种功能在阿里开源的tengine系统里其实有实现,你可以去了解一下

    其他的限流降级这些在阿里开源的中间件产品里也都有实现,大家可以去下载学习一下

    2018-10-16
    1
  • dingdongfm
    请教一个问题:“限流”和“拒绝服务”两种方式本身也会消耗服务器的资源,如果对应服务器的资源也超负荷了,系统不是一样会被压垮么?
    2019-10-24
  • 傻不拉几二锅头
    期待有针对客户端与服务端分布式环境的限流讲解
    2019-09-26
  • Geek_eae456
    请问“统计qps用一个计数器就行,来一个请求加一,一秒统计一次”这种方案如果遇到【0.5,1】【1,1.3】两个区间都有4.5WQPS,假设最大是5WQPS,这样单秒没有超,可是【0.5,1.5】超了怎么处理呢?

    作者回复: 还没看明白你的意思😂

    2019-04-13
    1
  • 随风
    我初试都没过,所以也就没机会碰见大佬了

    作者回复: 继续积累积累,继续努力一段时间再来

    2019-03-24
  • 叶易
    许老师是把方法论给我们了,要真正掌握还是要在工作中不断实践。
    2019-03-19
  • 罗罗诺亚.恩佐
    看完了,非常不错!赞,期待新的课程上架。
    2018-12-12
  • 打老师屁屁
    老师, 如何根据并发量有效的计算需要多少台机器, 比如 LB,WEB,CACHE,MQ,各需要多少台机器。有没有一个参考值

    作者回复: 这个要更每个环节的系统能支持多大的负载来计算的,比如cache单台能支持多大的并发请求,然后要根据总请求量单台的性能

    还要计算最外层的请求分别对应到每个环节拆分的请求数,例如一个web请求可能对应多个cache请求。

    2018-10-15
  • 歌在云端
    最讨厌的就是kpi考核,不是流行OKR吗

    作者回复: 执行起来,感觉差不多😂

    2018-10-07
收起评论
15
返回
顶部