1.人多,商品少
2.时间短,流量高
3.外挂机器
1.高并发
2.多层次的 分布式处理
3.人机交互与对抗
Lnix Nginx PHP MySQL Redis
CDN,智能DNS
分布式缓存,全国节点
多线路接入
负载均衡LVS
大型Web集群
高效稳定
编辑器
环境
代码管理工具 Git
MySQL
Redis phpredis/Predis
debug
后台
活动管理/商品管理/订单管理/日志管理
前台
商品展示/秒杀/购物车/我的订单
成功
^
/|\
秒杀->问答验证->库存验证->生成订单
\|/ \|/ \|/
V v v
错误 不足 异常
1.验证登录
2.验证传递参数是否合法
3.验证问答(验证)信息
4.验证活动信息状态
5.验证商品是否已经被购买
6.验证购买商品数量
7.验证剩余数量
8.扣除商品数量
9.创建订单
10保存订单
简单,没有更多的选择
独立,没有关联关系
容易,验证逻辑更少
请求少,并发低,实现基本功能即可
不需要太多的优化考虑
单机,MySQL数据库就可以支持
请求量和并发量都开始有明显提升,需要做部分优化
Web服务器集群
引入Redis
带宽 静态化
极端考虑
没有的问题也有可能发生
需要零时调配大量服务器
网络 机器 运算处理
支持多商品
多商品的库存,限购数量
验证和逻辑处理更多
增加验证逻辑
不需要太多的优化
单机 MySQL基本就可以支持
1期的商品相当于多期
增加了验证逻辑,代码复杂度,增加了异常处理
严格验证商品 数量 规格等等
组合商品简单化
引入中控服务群
多机房,多数据重新
减少页面大小,启用gzip压缩
nginx设置
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzio_comp_level 6; gzip_type text/plain application/json text/javascript application/xml;
减少资源请求数量,合并压缩 css/js
Minify
设置浏览器缓存,利用CDN资源加速 360cdn加速
nginx设置 location ~ .*\.(js|css|jpg|jpeg|gif|png)${ 指定缓存文件类型 expires 7d; #设置浏览器缓存过期时间 }
提高秒杀接口速度
开抢前页面静态化
数据处理速度
数据库 创建索引 (不能少 不能乱) 太多插入会变慢
先把数据放到 redis缓存里
多个接入层服务器
本地session 本地文件 不能用分布式
多个机房,每个机房一个部署一个集群,每个集群一个lvs
智能DNS为不同的网络不同的地域的用户解析到不同的LVS
部分接口引入DNS