秒杀系统架构优化思路

一、为什么难

秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。

例如小米手机每周二的秒杀,可能手机只有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)读多写少的常用多使用缓存

电商项目秒杀设计思路相关推荐

  1. java电商秒杀深度优化_【B0796】Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程...

    Java视频教程名称:Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程    java自学网[javazx.com]  性能视频教程   it教程 Java自学网收集整理 java论 ...

  2. 电商项目秒杀思路和认识

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

  3. 尚硅谷-谷粒商城-电商项目-秒杀系统-笔记

    商城项目简介 项目主要实现了一个模拟电商的分布式秒杀系统,核心模块包括注册登录模块.订单模块.秒杀模块. 框架是spring一套,用到的组件包Nignx服务器,redis,Mysql数据库,rabbi ...

  4. 电商系统购物车设计思路

    The article summary 一.购物车由来 1.1 消费者日益增长的购物需求 1.2 购物车可以很好的配合购物模板的使用 1.3 更好的配合商家完成一些优惠活动 二.购物车一般要实现的功能 ...

  5. 【愚公系列】2022年11月 微信小程序-优购电商项目-首页设计

    文章目录 前言 一.首页设计 1.首页的业务逻辑 2.涉及的接口数据 3.关键技术 二.首页相关代码 1.⾃定义组件搜索框 2.wx.request封装 3.首页页面 4.效果 前言 对于小程序电商首 ...

  6. web网页设计期末课程大作业——简单的学生网页作业源码 基于HTML仿唯品会电商项目的设计与实现

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  7. web网页设计期末课程大作业——基于HTML仿唯品会电商项目的设计与实现

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  8. 基于HTML电商项目的设计与实现——html静态网站基于数码类电商购物网站网页设计与实现共计30个页面

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  9. 基于HTML电商项目的设计与实现——html静态网站基于数码类电商购物网站网页设计与实现共计30个页面...

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

最新文章

  1. USEARCH — 最简单易学的扩增子分析流程(中国总代理)
  2. 几条曲线构建Android表白程序
  3. 计算机发现概述教案,计算机网络概述教案
  4. mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验
  5. JVM-12虚拟机性能监控与故障处理工具之【JDK的可视化工具-VisualVM】
  6. C#中通过list的GetRange方法对list进行按执行长度截取并拆分
  7. C++检测步骤与示例
  8. cs231n笔记:线性分类器
  9. 什么是devops开发运维_为什么假设驱动的开发是DevOps的关键
  10. 双稳态电路的两个稳定状态是什么_利用SR锁存器实现SPDT开关消抖电路
  11. python提高导入数据库速度_提高从MongoDB导入数据速度
  12. 交互设计实用指南系列(9)— 一次点击
  13. Charades数据集
  14. codeIgniter3 学习笔记四(文件上传)
  15. Flume OG 与 Flume NG 的对比
  16. python 保存scv文件乱码与报错的问题解决TypeError: a bytes-like object is required, not 'str'
  17. php网站微博帐号登录代码,微博登录按钮
  18. 2022暑初二信息竞赛学习成果分享2
  19. Understanding Maximum-a-Posteriori (MAP) Estimation
  20. 使用motan+Zookeeper构建RPC服务

热门文章

  1. 软件工程导论作业2.3
  2. Failed to get schema version. Underlying cause: Failed to create database metastore_db
  3. 一次搞懂:正数 负数 左移<< 右移>> 移位运算规则 移位后的空位添补规则
  4. Whatsns内容付费seo优化带采集和熊掌号运营问答系统
  5. 如何从容迎接人工智能时代的到来?让我们听听专家的解读
  6. 解决html5语意标签在IE低版本浏览器下的兼容问题:
  7. 详解公链,侧链,联盟链,私有链
  8. 如何在 Chromebook 上启用开发者模式
  9. javabean中bean的含义
  10. BaseController