写点什么

秒杀系统案例优化总结

用户头像
周冬辉
关注
发布于: 2020 年 08 月 05 日

秒杀系统在极短的时间内涌入大量的请求,来同时访问有限的服务资源,从而造成系统负载压力大,甚至导致系统服务瘫痪以及宕机的可能。将介绍秒杀系统中存在的挑战和问题以及针对这些点的优化思路。



如:12306的春节抢票、各大电商搞的定时双11、双12、618抢购活动,如小米手机的在线抢购等,抢过火车票的同学都知道在放票的那一瞬间可能1s都不到,票就被抢购一空了。



首先要理解熟悉秒杀业务流程和相关性能指标需求。

  • 先设计一个版本架构设计能初步评估其性能再进行优化方法





  1. 主要的挑战和问题

短时间内高并发,系统负载压力大:对应用HTTP请求和数据库压力比较大

瞬间网络带宽增加:由于请求量比平常大,图像等资源传输导致网络带宽瞬间增加

秒杀、下单、支付流程控制,防止被绕过或者被攻击



本质上是减少应用HTTP请求,同时压力测试工具保证测试结果。



  1. 核心的架构方案或者思路

减少应用HTTP请求: 优先秒杀流程控制进行拦截限流,拦截限流根据业务进行调整和精简减少相关数据库和资源访问,而从应用服务器和数据库压力比较大

软件架构的3板斧(缓存、集群、异步)

  • 前端

图片合并

HTML内容压缩

HTML Header Cache-Control设置

CSS, JS精简

按钮置灰:禁止用户重复提交请求

通过JS控制:在一定时间内只能提交一次请求

充分利用浏览器缓存

  • web server层

动静分离:如将几乎不变的静态页面直接通过CDN来路由访问,只有动态变换的页面可以请求到web server端

页面缓存化

Nginx反向代理:实现web server端的水平扩展,用于集群扩展。



(3)后端service服务层



  • 使用缓存(Redis、Memchched):将读多写少的业务数据放入缓存,如秒杀业务中可以将更新频繁的商品库存信息放入Redis缓存处理

  • 数据库:单独库或者分库进行访问,提高读写的性能



用户头像

周冬辉

关注

还未添加个人签名 2020.04.14 加入

还未添加个人简介

评论

发布
暂无评论
秒杀系统案例优化总结