秒杀系统架构优化思路

2023-11-05

《秒杀系统架构优化思路》

上周参加Qcon,有个兄弟分享秒杀系统的优化,其观点有些赞同,大部分观点却并不同意,结合自己的经验,谈谈自己的一些看法。

一、为什么难
秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。
例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。
又例如12306抢票,亦与秒杀类似,瞬时流量更甚。

二、常见架构

流量到了亿级别,常见站点架构如上:
1)浏览器端,最上层,会执行到一些JS代码
2)站点层,这一层会访问后端数据,拼html页面返回给浏览器
3)服务层,向上游屏蔽底层数据细节
4)数据层,最终的库存是存在这里的,mysql是一个典型

三、优化方向
1)
将请求尽量拦截在系统上游:传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小【一趟火车其实只有2000张票,200w个人来买,基本没有人能买成功,请求有效率为0】
2)充分利用缓存:这是一个典型的读多写少的应用场景【一趟火车其实只有2000张票,200w个人来买,最多2000个人下单成功,其他人都是查询库存,写比例只有0.1%,读比例占99.9%】,非常适合使用缓存

四、优化细节
4.1)浏览器层请求拦截
点击了“查询”按钮之后,系统那个卡呀,进度条涨的慢呀,作为用户,我会不自觉的再去点击“查询”,继续点,继续点,点点点。。。有用么?平白无故的增加了系统负载(一个用户点5次,80%的请求是这么多出来的),怎么整?
a)产品层面,用户点击“查询”或者“购票”后,按钮置灰,禁止用户重复提交请求
b)JS层面,限制用户在x秒之内只能提交一次请求
如此限流,80%流量已拦。

4.2)站点层请求拦截与页面缓存
浏览器层的请求拦截,只能拦住小白用户(不过这是99%的用户哟),高端的程序员根本不吃这一套,写个for循环,直接调用你后端的http请求,怎么整?
a)同一个uid,限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面
b)同一个item的查询,例如手机车次,做页面缓存,x秒内到达站点层的请求,均返回同一页面
如此限流,又有99%的流量会被拦截在站点层

4.3)服务层请求拦截与数据缓存
站点层的请求拦截,只能拦住普通程序员,高级黑客,假设他控制了10w台肉鸡(并且假设买票不需要实名认证),这下uid的限制不行了吧?怎么整?
a)大哥,我是服务层,我清楚的知道小米只有1万部手机,我清楚的知道一列火车只有2000张车票,我透10w个请求去数据库有什么意义呢?对于写请求,做请求队列,每次只透有限的写请求去数据层,如果均成功再放下一批,如果库存不够则队列里的写请求全部返回“已售完”
b)对于读请求,还要我说么?cache抗,不管是memcached还是redis,单机抗个每秒10w应该都是没什么问题的
如此限流,只有非常少的写请求,和非常少的读缓存mis的请求会透到数据层去,又有99.9%的请求被拦住了

4.4)数据层闲庭信步
到了数据这一层,几乎就没有什么请求了,单机也能扛得住,还是那句话,库存是有限的,小米的产能有限,透这么多请求来数据库没有意义。

五、总结
没什么总结了,上文应该描述的非常清楚了,对于秒杀系统,再次重复下笔者的两个架构优化思路:
1)尽量将请求拦截在系统上游

2)读多写少的常用多使用缓存


https://yq.aliyun.com/articles/69704?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&utm_content=m_10737



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

秒杀系统架构优化思路 的相关文章

  • Android Design Support Library

    1 Navigation View 对于应用程序 xff0c 它代表着一个标准的导航菜单 菜单内容可以由菜单资源文件填充 NavigationView通常放在一个DrawerLayout里面 lt xml version 61 34 1 0
  • Android Design Support Library使用详解

    Android Design Support Library使用详解 Google在2015的IO大会上 xff0c 给我们带来了更加详细的Material Design设计规范 xff0c 同时 xff0c 也给我们带来了全新的Andro
  • Ant Design Blazor表格高度自适应

    Ant Design Blazor表格高度自适应 一 先导入js 在 Host cshtml导入js lt component type 61 34 typeof App 34 render mode 61 34 ServerPrerend
  • 打开AS提示错误弹框缺少com.android.tools.design.org.jetbrains.android插件

    打开AS提示错误弹框缺少com android tools design org jetbrains android插件 今个准备升级一下AS来着 xff0c 然后出现了这个问题 xff0c 原因是我屏蔽了Kotlin插件 解决方法 xff
  • Ant Design --配置(1)

    Ant Design 官方介绍 xff1a 在中台产品的研发过程中 xff0c 会出现不同的设计规范和实现方式 xff0c 但其中往往存在很多类似的页面和组件 xff0c 给设计师和工程师带来很多困扰和重复建设 xff0c 大大降低了产品的
  • Design Patterns Elements of Reusable Object-Oriented Software(一)Introduction(介绍)

    1 Introduction xff08 介绍 xff09 Designing object oriented software is hard and designing reusable object oriented software
  • React 使用Ant Design组件2020年11月

    今天同事问我一个问题 xff0c 说他搭的ant项目样式错乱 我去看了一下 xff0c 愣是看了半天没发现问题原因 最终后来才发现是Ant Design组件配置的问题 我不得不在这里吐槽一下And Design这篇文档https mobil
  • ant-design-vue 日期组件国际化

    在入口文件main js中 import moment from 39 moment 39 import 39 moment locale zh cn 39 moment locale 39 zh cn 39 其中moment函数可以将日期
  • Ant Design table 自动对齐表头

    在table的属性中加入 xff1a scroll 61 34 x 39 max content 39 34 即可不用设置列宽度 xff0c 自适应全表内容为一行显示 xff0c 自动对齐表头
  • ant design vue pro 面包屑移至最顶上

    ant design vue pro 面包屑移至最顶上显示 xff0c 如图 操作如下 xff1a 1 在src layouts BasicLayout vue 中 lt pro layout 中加入如下代码 lt template v s
  • LightPC: Hardware and Software Co-Design for Energy-Efficient Full System Persistence(论文阅读翻译)

    xff08 注 xff1a 课程作业要求 xff0c 机翻自己看的 xff09 Abstract 我们提出了LightPC xff0c 一种轻量级的持久性中心平台 xff0c 以使系统对电源故障具有鲁棒性 LightPC由硬件和软件子系统组
  • Top-down Design简介

    自顶向下 xff0c 逐步求精的方法 在英文中称作Top down Design xff0c 是一种计算机编程使用的算法思想 xff0c 顾名思义 xff0c 这种方法的思想就是对现在遇到的复杂或者抽象化的问题 xff0c 进行纵向深入分解
  • 【leetcode】705. 设计哈希集合(design-hashset)(模拟)[简单]

    链接 https leetcode cn com problems design hashset 耗时 解题 xff1a 11 min 题解 xff1a 10 min 题意 不使用任何内建的哈希表库设计一个哈希集合 xff08 HashSe
  • Ant Design setFieldsValue 无效问题

    老是发现setFieldsValue 第一次点编辑某一列时候不会加载成功 xff0c 第二次点进去加载的是第一次的值 也是坑啊 最后网上都说延迟执行 就写了延迟0 1秒 果然可以 但是感觉有点傻缺 等待大神给出更好的方案
  • Design Patterns Elements of Reusable Object-Oriented Software(一)Introduction(介绍)

    1 Introduction xff08 介绍 xff09 Designing object oriented software is hard and designing reusable object oriented software
  • Photoshop 通道讲解

    我常常问我的学生 什么是Photoshop最重要 不可或缺的功能 很多人的回答是图层 Layer 其实在Photoshop3 0之前根本没有图层的功能 在Photoshop的领域中 最重要的功能是选取范围 正确的运用选取范围 才能够做出精准
  • 如何设计一个秒杀系统

    什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到 对于电商网站中一些稀缺或者特价商品 电商网站一般会在约定时间点对其进行限量销售 因为这些商品的特殊性 会吸引大量用户前来抢购 并且会在约定的时间点同时在
  • 线程同步

    线程同步 作者 buaawhl 我们可以在计算机上运行各种计算机软件程序 每一个运行的程序可能包括多个独立运行的线程 Thread 线程 Thread 是一份独立运行的程序 有自己专用的运行栈 线程有可能和其他线程共享一些资源 比如 内存
  • 高并发环境下qps计算

    最近在研究阿里的一些中间件 最近看到了sentinel 由于和我们现在使用的统计 判断 预警 熔断有点类似 所以就深入了源码细看了一下 不看不要紧 一看吓一跳 我们现在的熔断的粒度是分钟级别的 没想到sentinel可以精细到任何级别 甚至
  • 微信红包实现原理

    微信红包实现原理 以下内容来源于QCon某高可用架构群聊天记录整理 背景 有某个朋友咨询微信红包的架构 在官方或非官方同学的解释和讨论中得出以下讨论内容 在此期间有多个同学发红包做现网算法测试 抢红包过程 当有人在群里发了一个N人的红包 总

随机推荐

  • texlive包的添加与更新

    texlive包的添加与更新 修改完包之后 要用texhash命令进行位置的更新 texhash需要管理员权限 通过用户权限执行texhash后 发现texhash更新的是下面这些目录 texhash usr share texlive t
  • Java实现微信支付(微信公众号JSAPI支付)

    Java实现微信支付 微信公众号JSAPI支付 第一步 开发环境准备 在接入微信支付之前 需要现在微信支付商户平台入驻 成为商家 才能继续后续的开发 微信支付商户平台网址 https pay weixin qq com 不过 个人用户是无法
  • 三个不等_高中数学不等式解题方法全归纳!

    认识我们 解读教材教法 研究解题策略 传播数学文化 推广数学应用 推送知识干货 分享学习方法 往期精彩 名校试卷 高一数学期中试卷76套 word 名校试卷 高二数学期中试卷80套 word 名校试卷 高三数学期中试卷80套 word 期末
  • XenServer命令行自动化拷贝并初始化虚拟机

    我们建立了本地机房 购买了一定数量的物理服务器 每台服务器安装了Xenserver 并打算在上面创建虚拟机 之前我们一直通过的是XenCenter的方式 图形化的操作来创建我们遇到了一个问题 那就是 每台新建的VM 其IP地址与主机名等在复
  • SpringCloud系列-SpringCloudLoadBalancer是如何通过@BalanceLoad使用nacos中的微服务

    前言 SpringCloud作为Spring家族的衍生平 扮演着微服务框架的重要角色 本篇主要涉及到SpringCloud的源代码中 LoadBalance注解是如何生效的 使用的开发环境中 注册中心使用的是nacos 负载均衡使用的是sp
  • nginx负载均衡查看后端服务器信息,命令行检查nginx负载均衡状态

    命令行检查nginx负载均衡状态 内容精选 换一换 负载均衡 LoadBalancer 可以通过弹性负载均衡从公网访问到工作负载 与弹性IP方式相比提供了高可靠的保障 一般用于系统中需要暴露到公网的服务 负载均衡访问方式由公网弹性负载均衡E
  • 利用SSH工具远程连接Ubuntu失败

    利用SSH工具远程连接Ubuntu失败 1 查看ssh服务是否开启 sudo service ssh status active running 这就表名运行正常 如果没有开启 输入下列命令开启 etc init d ssh start 2
  • 九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试五十题

    题记 本博客自2010年10月11日开通以来 已经帮助了一大批人找到工作 特别是连续三年在每一年的9 10月份陪伴了至少三届毕业生找工作的旅程 包括校招中的笔试面试 今年也不会例外 我会在本博客开通3周年之际一如既往的陪伴大家一起成长 本文
  • C++ 智能指针

    一 智能指针特点 智能指针封装了裸指针 内部还是裸指针的调用 智能指针使用RAII特点 将对象生命周期使用栈来管理 智能指针区分了所有权 因此使用责任更为清晰 智能指针大量使用操作符重载和函数内联特点 调用成本和裸指针无差别 二 原子操作
  • ARM汇编.global .extern 和.text

    在ARM汇编中 常搞不清 global和 extern的区别 下面就简要阐述一下这两个的区别 1 gt global global关键字用来让一个符号对链接器可见 可以供其他链接对象模块使用 global start 让 start符号成为
  • 成功解决“谷歌浏览器打开是毒霸网址大全”问题,亲测有效(同样适用被hao123,或者2345浏览器篡改)

    最开始一定要把电脑安装的360和电脑管家之类的退出 第一步 发现问题的存在 在谷歌网址中输入 chrome version 再按enter键 如果返回如图 那说明你的谷歌被hao123浏览器篡改了 如果你返回的蓝色部分是www duba等字
  • python做兼职收入_创业点子 小哥用Python兼职月入过万,用Python做项目有多挣钱?...

    今天我想和大家分享一些Python项目两个主兼职工作 老板想说 无论你是自学或者参加培训班 只要你学好Python 钱自然会来 问题 兼职工作和Python可以用来赚钱吗 1兼职费用够杂项费用 生活费用 在学校我碰巧接管一些外包 嗯 足够的
  • 自定义MVC框架优化

    目录 一 前言 二 优化问题 1 子控制器的初始化配置问题 2 页面跳转优化代码冗余问题 3 优化参数封装问题 三 进行优化 1 解决子控制器初始化配置 2 解决页面跳转的代码冗余问题 3 解决优化参数封装问题 4 中央控制器 一 前言 在
  • 爬下artstation关注的画师信息制作为json文件

    原始网站 https www artstation com Author xiaozhu sai 本文章仅供学习交流 请勿交流梯子以及版权问题 1 爬取数据目的 后续处理 方便后续对各个画师作品的个人下载 个人练习 用户关注 的推荐算法与其
  • kali Linux笔记

    第一章 kali Linux简介 1 Linux操作系统的基础知识 Linux 的起源和发展 了解 Linux 操作系统的起源 发展和主要的发行版 如Linux 内核的诞生 GNU项目的贡献以及常见的 Linux 发行版如Ubuntu De
  • 旋转图像(二维数组的旋转)——LeetCode数组算法题

    旋转图像
  • 利用无人机(手机)和Unity3D软件制作自己的VR全景软件

    市面上做全景的网站和公司有很多 这里不列举了 自己百度一下VR和 全景之类的就会跳出很多 一 全景相片制作 1 无人机制作全景相片 1 1大疆无人机全景相片制作 利用软件DJI GO4中一键720全景完成制作 1 2手动制作720全景完成制
  • OBS斗鱼直播弹幕插件效果

    我没有安装任何OBS插件 一样达到了美化版弹幕效果
  • windows10配置远程桌面多用户同时登录

    目录 一 单用户同时登录 二 多用户同时登录 一 单用户同时登录 系统属性 gt 远程 勾选以下选项 运行 gpedit msc 选择 计算机配置 gt 管理模板 gt Windows组件 gt 远程桌面服务 gt 远程桌面会话主机 gt
  • 秒杀系统架构优化思路

    秒杀系统架构优化思路 上周参加Qcon 有个兄弟分享秒杀系统的优化 其观点有些赞同 大部分观点却并不同意 结合自己的经验 谈谈自己的一些看法 一 为什么难 秒杀系统难做的原因 库存只有一份 所有人会在集中的时间读和写这些数据 例如小米手机每