如何抗住单页10w的qps?

一 什么是静态数据与动态数据?

静态数据是”无个性化”数据

  1. 静态文件: HTML/CSS/JS/图片
  2. 低频变动数据: 字典数据 / 地区数据 / 组织架构 / 历史数据

动态数据就是个性化/高频写数据:

  1. 个性化推荐
  2. 高频写: 股市行情 / 5G信号数据 / 天气变化
    有效区分页面中的动静数据是优化的关键前提。

![image](images/27yORf13aUHJdQpKyNhNoTrJzudq5x3MLEFGdccwlKU.png)
如上图:
我们如何分析?
可以明确的划分,左侧商品信息,图片,商品标题,右侧下方商品的sku信息,在短期内都是不会变化的。
然后商品的价格,他不一定是固定的值,大数据杀熟的话,可能每个人看到的数据都是不同的,活动信息,赠品信息可能都随着时间变化而变化,明显就是动态数据。

二 动静分离

![image](images/TOpKj13o0nbQbusS1gAb6EeCbzlKiGTcEgyRYXAx11k.png)

上图是一个很常规的动静分离的流程图:

  1. 静态数据资源通过CDN做缓存
  2. 动态数据从后台更新而来
  3. freemaker虽然在业界使用比较多,但是其生成动态页面也需要几百毫秒

那么问题来了,怎么把动态页面生成到静态页?

一般解决的方法有两种:

  1. 页面静态化技术

  将动态页面”另存为”静态页面保存到本地磁盘

  利用Nginx直接路由到磁盘文件,不再进入后端

  文件碎片化严重,文件同步管理麻烦

  1. 页面伪静态化技术(推荐)

  利用Redis缓存,缓存生成的页面

  没有碎片化问题,可自动过期,数据管理轻松

  需要大量内存存储信息

我们来看一下伪静态化是怎么实现的:

![image](images/uvZDlv5lVfb2GprzplEUQyXZBhC3PvZh7QKySU9OliE.png)

但是一个页面不可能全是静态化的数据:

![image](images/od-PgQ62uiXYs-OXQ745awpezryAXql5eGGmQnOpP1I.png)

那么有没有其他的动静分离方案呢?

  1. 服务端SSI法

 利用Nginx SSI特性实现服务端动静整合:

![image](images/jwRz5JPoxnziBByPB3972rIGACIgdH5fqYzX7G_G3sI.png)

我们来看一下京东的解决方案:

![image](images/yeLwzT54vupMD_Dfec0Ux3pjkQKIiqRdGSH0r9Gjyag.png)

  1. 我们可以看到表头是包含了静态页面和动态页面的
  2. 静态页面直接加载即可
  3. 动态页面我们采用dynamic这个前缀来指定
  4. 当系统加载的时候,我们判断此页面是动态页面
  5. 就通过nginx里边的lua脚本,通过对应的参数,去请求对应的伪静态化页面
  6. 没有缓存即从应用系统查询
  1. Ajax异步调用法

 生成静态页面,动态数据部分发起Ajax异步查询:

![image](images/bG-sWoPrgsXDnA9oITUaRxXCi0W67kALaFX41C8nxT4.png)

Last modification:July 5, 2022
If you think my article is useful to you, please feel free to appreciate