如何设计一个秒杀系统
15
15
1.0x
00:00/00:00
登录|注册

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

处理无效的请求会消耗服务器资源
根据服务端的性能设置合理的阈值
无法设置合理的限流阈值
限制请求的发出
及时恢复服务
及时止损
发现问题能够准确报警
对系统的监控要准确及时
有紧急的回滚机制
有相应的处理流程
保证测试用例的覆盖度
对调用的返回结果集有预期
设置合理的超时退出机制
保证代码的健壮性
避免系统出现单点问题
考虑系统的可扩展性和容错性
在组织上做好保障
在预防、管控、监控和恢复体系加强建设
高可用建设要深入到各个环节
在系统负载达到一定阈值时,系统直接拒绝所有请求
最暴力但也最有效的系统保护方式
服务端限流
客户端限流
限制一部分流量来保护系统
通过预案系统和开关系统来实现降级
有目的、有计划的执行过程
故障发生
运行阶段
发布阶段
测试阶段
编码阶段
架构阶段
总结一下
拒绝服务
限流
降级
高可用建设应该从哪里着手
如何为秒杀系统准备Plan B,在意外发生时保证高可靠性

该思维导图由 AI 生成,仅供参考

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

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

说到系统的高可用建设,它其实是一个系统工程,需要考虑到系统建设的各个阶段,也就是说它其实贯穿了系统建设的整个生命周期,如下图所示:
图 1 高可用系统建设
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了如何为秒杀系统准备Plan B,以确保在意外情况下系统能够保持高可靠性。作者指出,面对大流量冲击时,系统很难单靠自身调整来恢复状态,因此需要设计Plan B方案来兜底,以应对最坏情况的发生。文章从系统的高可用建设着手,包括架构阶段、编码阶段、测试阶段、发布阶段、运行阶段和故障发生时的应对措施。针对秒杀系统,重点介绍了降级、限流和拒绝服务这三种保障系统稳定运行的措施。这些措施旨在防止系统因意外情况而宕机,保障系统的高可用性。文章还强调了高可用建设的组织保障,提出了建立稳定性建设小组等具体措施。总的来说,本文为读者提供了系统稳定性建设方面的深入思考和实用方案,对于技术人员和系统运维人员具有重要的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《如何设计一个秒杀系统》
立即购买
登录 后留言

全部留言(23)

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

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

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

    作者回复: 统计qps用一个计数器就行,来一个请求加一,一秒统计一次 客户端和服务端限流是针对rpc调用来说的,发起方可以理解为客户端,调用方可以理解为服务端,限流就是分别限制发起方和调用方的次数

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

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

    2018-10-07
    8
  • 贵楠
    老师可否提供一个demo呢

    作者回复: 像load保护这种功能在阿里开源的tengine系统里其实有实现,你可以去了解一下 其他的限流降级这些在阿里开源的中间件产品里也都有实现,大家可以去下载学习一下

    2018-10-16
    4
  • 意犹未尽,内功心法口诀已经传授,下面就看悟性和修炼啦! 为了系统的高可用,我们需要B计划,为了使系统仍然可用,我们准备了降级、限流、拒绝服务三件法宝。每次备战,也玩这些!不过是组织配合实现自己完全实现还远的很。 这个专栏值得反复回味!

    作者回复: 😉

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

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

    2018-10-07
    2
  • 随风
    我初试都没过,所以也就没机会碰见大佬了

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

    2019-03-24
    1
  • 打老师屁屁
    老师, 如何根据并发量有效的计算需要多少台机器, 比如 LB,WEB,CACHE,MQ,各需要多少台机器。有没有一个参考值

    作者回复: 这个要更每个环节的系统能支持多大的负载来计算的,比如cache单台能支持多大的并发请求,然后要根据总请求量单台的性能 还要计算最外层的请求分别对应到每个环节拆分的请求数,例如一个web请求可能对应多个cache请求。

    2018-10-15
    1
  • Geek_eae456
    请问“统计qps用一个计数器就行,来一个请求加一,一秒统计一次”这种方案如果遇到【0.5,1】【1,1.3】两个区间都有4.5WQPS,假设最大是5WQPS,这样单秒没有超,可是【0.5,1.5】超了怎么处理呢?

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

    2019-04-13
    6
  • 江中芦苇
    世界好小,大佬作为滴滴复试面试官
    2018-11-03
    2
    57
收起评论
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部