通过nginx高速缓存来演示
在这之前可以了解$host变量的含义 http://blog.51cto.com/gyj110/2079981
案例分析
某电商平台商品详情页需要实现 700+ QPS(query操作,TPS提交操作),如何着手去做?
1. 首先为分析一下一个商品详情页有哪些信息
从中得出 商品详情页依懒了
对于商品详情页涉及了如下主要服务:
这么多数据不可能一起一下子就加载,不然会非常的卡,那么该怎么办呢??
- 商品详情页HTML页面渲染
- 价格服务 促销服务
- 库存状态/配送至服务
- 广告词服务
- 预售/秒杀服务
- 评价服务
- 试用服务
- 推荐服务
- 商品介绍服务
- 各品类相关的一些特殊服务
解决方案核心:
1. 采用Ajax 动态加载 价格、广告、库存等服务
2. 采用key value 缓存详情页主体html。
方案架构:
请求不大时,我们一般把数据缓存在redis中,这样可以不用再去服务拿去数据,响应速度更快了, 但是当请求更多时,会出现瓶颈
问题:
当达到500QPS 的时候很难继续压测上去。
分析原因:
一个详情页html 主体达平均150 kb 那么在500QPS 已接近局域网宽带极限。必须减少内网通 信。
比如,一个详情页面150kb,500QPS*150/1024=73M,一秒就发生73多M的网络传输,这已经非常接近宽带峰值128M
所以,我们可以把缓存放在通过nginx放在本地上
基于Nginx 静态缓存的解决方案:
如图:我们通过ngnx配置把数据缓存在本地,这样用户的访问请求就不用经过商品详情页服务返回数据,除非当运维人员修改商品信息时要清除缓存,这时可以通过第三方来清除nginx配置的缓存,这样用户就可看到最新数据
该方案nginx配置实现
一、在http元素下添加缓存区声明。
proxy_cache_path /data/nginx/cache_item levels=1:1:2 keys_zone=cache_item:500m inactive=30d max_size=10g;