左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

61 | 性能设计篇之“秒杀”

陈皓 2018-05-01
一说起秒杀,大家都觉得这事很有技术含量。实际上,并不是这个样子的,秒杀这种互联网的交易方式其实并没有我们想象中的那么复杂。下面先让我们来简单地看一下,秒杀是怎么做的。

秒杀的流程

“秒杀”其实是商家为了促销,使用非常低的价格销售商品,比如,1 元卖 iPhone,100 台,于是来了一百万人抢购。
我们把技术挑战放在一边,先从用户或是产品的角度来看一下,秒杀的流程是什么样的。
首先,你需要一个秒杀的 landing page,在这个秒杀页上有一个倒计时的按钮。
一旦这个倒计时的时间到了,按钮就被点亮,让你可以点击按钮下单。
一般来说下单时需要你填写一个校验码,以防止是机器来抢。
从技术上来说,这个倒计时按钮上的时间和按钮可以被点击的时间是需要后台服务器来校准的,这意味着:
前端页面要不断地向后端来请求,开没开始,开没开始……
每次询问的时候,后端都会给前端一个时间,以校准前端的时间。
一旦后端服务器表示 OK 可以开始,后端服务会返回一个 URL。
这个 URL 会被安置在那个按钮上,就可以点击了。
点击后,如果抢到了库存,就进入支付页面,如果没有则返回秒杀已结束。
这个不断轮询的过程,就好像大家等着抢。你想想,有 100 万人来不停地询问有没有开始了这个事,估计后端也扛不住。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(29)

  • 曾经的十字镐
    最近文章有点水呀

    作者回复: 还想问一下具体哪方面我可以改进?或是你想了解什么样的内容?

    2018-05-22
    30
  • 路西法
    耗子哥这章有点凑字数啊 ,能专注于讲点秒杀方案吗,例如后端如何hold住请求、能否利用websocket或http2异步响应提高吞吐、能否保证请求有序-先到先得、小米网抢购做的出神入化,能否也聊下,哈哈

    作者回复: 这篇文章只专注讲秒杀这一个案例,不讲性能调优。

    2018-05-23
    10
  • _CountingStars
    文章里说的CDN是我们平常是的CDN吗? CDN不是只能缓存一些静态内容的吗?难道还可以放代码,执行业务逻辑吗?

    作者回复: CDN当然可以执行逻辑,但是你要去谈商务合作。

    2018-05-22
    10
  • 风华神使
    楼上,cdn是可以部署程序的。个别公司还尝试过把nodejs部署到cdn上
    2018-05-22
    7
  • chenc
    我们微信发红包的一个解决方案,cdn上放静态排队页面,js随机数0.5%的概率进入真正的红包领取页面。活动时用微信公众号推送cdn排队地址。虽然排队页面上可以直接看到真实地址,但是基本能过滤大部分请求了。
    2018-05-22
    6
  • 一飞
    某东逻辑是这样的:网关限流,单机限流(流量值可以在压测时评估出来),redis 扣减库存key(定时load库存),数据库扣减库存,如果都成功的话,用户拿到这个券了。
    2018-05-23
    5
  • Just4test
    最近在研究Lambda@Edge,和这个场景完全契合。

    作者回复: 还有更多的场景。这也是我创业的一个方向。

    2018-05-22
    4
  • 华烬
    个人理解,秒杀要做到最底层数据库无压力,上面每层要进行层层过滤和限制,以达到最后到数据库只有少量请求,比如针对ip限制,不能多次请求,应用层进行数量上的限制,因为你知道自己有多少库存等等吧,cdn方式如何我个人不了解,但针对限制和过滤方面介绍很少啊

    作者回复: 前面的限流模式有讲

    2018-05-22
    3
  • anti corruption
    能运行逻辑的cdn的确是很屌的
    lua么 皓哥

    作者回复: 最好是FaaS,像AWS的Lambda一样

    2018-05-22
    3
  • 顾慎为
    边缘计算和雾计算有没有什么关联呀?
    2018-05-22
    1
    2
  • jamesxu
    1 万人,放过 2 个到数据中心。

    可是,这 1 万个请求,肯定是不同时到达的。

    问题1、这也就是说,这种活动根本无法做到真正的公平?

    问题2、边缘结算,是不是可以应用到视频网站应用啊?
    2018-07-02
    1
  • 颇忒妥
    受益良多。顺便有个请求,能把文章最后的链接补上吗?现在都是文本,不是超链。
    2018-06-08
    1
  • 王喜糖
    原来秒杀背后是这么玩的
    2018-05-22
    1
  • guhowo
    耗子哥,请问:如果按照每个cdn的0.02%请求转发的后台数据中心,那么后台就收到了总请求量的0.02%,但是有个场景CDN A的第0.03%个请求可能比CDN B的第0.02个请求还要快,那么岂不是对连接到A的用户不太公平了么?
    2019-11-08
  • 丁丁历险记
    小米就是这样忽悠客户的
    2019-09-28
  • edisonhuang
    秒杀是一堆人在同一个时间点抢同一个东西,大家要访问的数据,要请求的库存都集中在同一点,因此如果单独使用数据中心来处理必然会有性能瓶颈。此时可以把计算从数据中心往边缘计算迁移,分区的用户只有比较小的概率通过边缘节点来提交请求,从而保证系统可以抗住大流量
    2019-07-25
  • 壹雁🌟
    只能手机端访问吗?想取链接在pc上访问很麻烦
    2018-08-20
  • guhowo
    耗子哥,看了您这么多分布式的文章,想问一下,如何入门及系统的学习分布式呢

    作者回复: 关注程序练级攻略后续的文章,分布式系统会有极为丰富的学习

    2018-06-15
  • XinghaiVictorStarseaSingHoy星...
    CDN 现在的云服务都是只能推静态内容的吧,有要实现耗子哥你说的这个秒杀设计,那个云供应商有这样的CDN服务?
    2018-06-10
  • 弄堂风
    耗子哥会考虑写数据库方面的知识吗?比如,数据库的性能优化,数据库的cluster等
    2018-06-08
收起评论
29
返回
顶部