关于秒杀,第一反应都是实现起来比较复杂。难点在于:并发读+并发写+设计兜底方案的实现。

比如QQ,虽然数据量很大,但是多数的数据都是细粒度的数据查询,锁冲突比较少;但12306涉及到大量的读写操作,对可用性,高性能,数据一致都有要求。

在开始前,先说一些基本概念,通常互联网的应用包含了:

nginx代理层

tomcat站点层

rpc service服务层

数据层(cache和db)

方向上,降低数据层锁冲突,具体两大要点:

  • 缓存降读

  • 降低写的频率,将请求拦截在系统上游

所以,优化的方向,也是从上面几层展开。

一:优化方案:

1:端上的请求拦截(浏览器/app)

比如通过答题延长请求发出时间

js做一些基本性的校验等

2:站点层的请求拦截

同一个uid xxS内才可以请求,比如计数和限速

这里可以看到,站点层可能承担了大部分的流量和压力,所以站点层需要设计成无状态服务,通过水平扩展的方式,分担压力;

但是站点层如何限速呢?

  • 如果使用redis,那么redis需要做proxy切分

  • 当然,也可以通过nginx七层路由,相同的id落地到相同的tomcat站点上,做内存计数

3:服务层的请求拦截

流量削峰,比如根据你的数据库抗压能力,计算出tps,或者通过业务库存计算等

流量削峰解决了什么问题:

  • 服务端处理变得更加平稳

  • 节省服务器的资源成本

如何削峰:

  • 排队:通过消息队列来缓冲瞬时流量

4:数据库处理

分库分表,热点数据隔离,读写分离等等

二:12306产品方案:

  • 对于秒杀系统来说,下单与支付可以分离,所以支付系统基本上可以不用特殊处理

  • 不同的地域分时售票等

三:兜底方案

1:降级

比如当秒杀流量达到5W/s时,把一些无关紧要的查询记录从之前的100条,降低为10条,这个可以直接由参数来控制

2:拒绝服务

当系统达到一定的阈值时,设置过载保护,比如在nginx层上做限制,直接返回503 code码等

更多交流,也欢迎您关注我的微信公众号:

一分钟了解"秒杀"系统的更多相关文章

  1. 用Redis轻松实现秒杀系统

    秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题.对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘 异步处理而不是同步处理 分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应 ...

  2. PHP秒杀系统全方位设计(二)

    商品页面开发 静态化展示页面[效率要比动态PHP高很多,PHP程序需要解析等步骤,本身就需要很多流程,整个下来PHP的处理花的时间和资源要多] 商品状态的控制 开始前.进行中.库存不足.结束 数据逻辑 ...

  3. PHP秒杀系统全方位设计分析(二)

    商品页面开发 静态化展示页面[效率要比动态PHP高很多,PHP程序需要解析等步骤,本身就需要很多流程,整个下来PHP的处理花的时间和资源要多] 商品状态的控制 开始前.进行中.库存不足.结束 数据逻辑 ...

  4. 从构建分布式秒杀系统聊聊验证码 给大家推荐8个SpringBoot精选项目

    前言 为了拦截大部分请求,秒杀案例前端引入了验证码.淘宝上很多人吐槽,等输入完秒杀活动结束了,对,结束了...... 当然了,验证码的真正作用是,有效拦截刷单操作,让羊毛党空手而归. 验证码 那么到底 ...

  5. 12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统

    本文为开源实验性工程:“github.com/GuoZhaoran/spikeSystem”的配套文章,原作者:“绘你一世倾城”,现为:猎豹移动php开发工程师,感谢原作者的技术分享. 1.引言 Go ...

  6. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  7. 【Todo】秒杀系统材料

    秒杀系统:Link <一个经验证可落地的秒杀系统实践思路> 主要依赖于Redis进行处理. http://geek.csdn.net/news/detail/59847   淘宝大秒系统设 ...

  8. PHP秒杀系统-高并发高性能的极致挑战

    慕课网实战教程后端:1.java c++算法与数据结构2.java Spring Boot带前后端 渐进式开发企业级博客系统3.java Spring Boot企业微信点餐系统4.java Sprin ...

  9. Java高并发秒杀系统API之SSM框架集成swagger与AdminLTE

    初衷与整理描述 Java高并发秒杀系统API是来源于网上教程的一个Java项目,也是我接触Java的第一个项目.本来是一枚c#码农,公司计划部分业务转java,于是我利用业务时间自学Java才有了本文 ...

随机推荐

  1. VMware-workstation-full-安装教程

    网盘提取 图1中的包 链接:https://pan.baidu.com/s/11BnY2_v9cDfP1SXPoqOUWQ 提取码:jhfa (1) 点击Vware-workstation-full ...

  2. Linux系统编程—信号量

    大家知道,互斥锁可以用于线程间同步,但是,每次只能有一个线程抢到互斥锁,这样限制了程序的并发行.如果我们希望允许多个线程同时访问同一个资源,那么使用互斥锁是没有办法实现的,只能互斥锁会将整个共享资源锁 ...

  3. Spring学习(六)--Spring的IOC

    1.autowiring(自动依赖装配)的实现 自动装配中不需要对Bean属性做显示的依赖管理方式,只需要配置好autowiring的属性就可以,IOC容器会自动根据这个属性的配置通过反射自动找到属性 ...

  4. Servlet3.x部署描述符

    简介 web.xml即部署描述符,位于WEB-INF目录下.在Servlet3以上版本有提供了注解的方式部署Servlet,因此web.xml是可选的.web.xml大概框架如下: <?xml ...

  5. Python-设置文件缓冲类型

    案例: 将文件内容写入到硬件设备时候,使用系统调用,这类IO操作时间长,为了减小IO操作,通常会使用缓冲区(有足够多数据才能调用). 文件缓冲行为分为:全缓冲,行缓冲,无缓冲 如何解决? open(' ...

  6. 18-SE-你说的都队

    文章目录 前言 建设银行app分析 招商银行app分析 中国银行app分析 工商银行app分析 总结 团队成员分工与评分 前言 18-SE-你说的都队所选项目题目为"村镇银行储蓄业务系统开发 ...

  7. 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象

    079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...

  8. 【题解】CF1324F

    Question 题目大意:每个点不是黑点就是白点,求以每一个点为根时,选择出一个联通块,使得白点数与黑点数之差最大(白减黑). \(Solution\) 考虑先跑一遍\(dp\). 可以写出一个比较 ...

  9. 系统编程-文件IO-IO处理方式

    IO处理五种模型 .

  10. Docker笔记2:Docker 镜像仓库

    Docker 镜像的官方仓库位于国外服务器上,在国内下载时比较慢,但是可以使用国内镜像市场的加速器(比如阿里云加速器)以提高拉取速度. Docker 官方的镜像市场,可以和 Gitlab 或 GitH ...