秒杀系统案例优化总结
秒杀系统在极短的时间内涌入大量的请求,来同时访问有限的服务资源,从而造成系统负载压力大,甚至导致系统服务瘫痪以及宕机的可能。将介绍秒杀系统中存在的挑战和问题以及针对这些点的优化思路。
如:12306的春节抢票、各大电商搞的定时双11、双12、618抢购活动,如小米手机的在线抢购等,抢过火车票的同学都知道在放票的那一瞬间可能1s都不到,票就被抢购一空了。
首先要理解熟悉秒杀业务流程和相关性能指标需求。
先设计一个版本架构设计能初步评估其性能再进行优化方法
主要的挑战和问题
短时间内高并发,系统负载压力大:对应用HTTP请求和数据库压力比较大
瞬间网络带宽增加:由于请求量比平常大,图像等资源传输导致网络带宽瞬间增加
秒杀、下单、支付流程控制,防止被绕过或者被攻击
本质上是减少应用HTTP请求,同时压力测试工具保证测试结果。
核心的架构方案或者思路
减少应用HTTP请求: 优先秒杀流程控制进行拦截限流,拦截限流根据业务进行调整和精简减少相关数据库和资源访问,而从应用服务器和数据库压力比较大
软件架构的3板斧(缓存、集群、异步)
前端
图片合并
HTML内容压缩
HTML Header Cache-Control设置
CSS, JS精简
按钮置灰:禁止用户重复提交请求
通过JS控制:在一定时间内只能提交一次请求
充分利用浏览器缓存
web server层
动静分离:如将几乎不变的静态页面直接通过CDN来路由访问,只有动态变换的页面可以请求到web server端
页面缓存化
Nginx反向代理:实现web server端的水平扩展,用于集群扩展。
(3)后端service服务层
使用缓存(Redis、Memchched):将读多写少的业务数据放入缓存,如秒杀业务中可以将更新频繁的商品库存信息放入Redis缓存处理
数据库:单独库或者分库进行访问,提高读写的性能
评论