何为动静数据
“动态数据”和“静态数据”的主要区别就是看页面中输出的数据是否和 URL、浏览者、时间、地域相关,以及是否含有 Cookie 等私密数据
。
静态数据,不能仅仅理解为传统意义上完全存在磁 盘上的 HTML 页面,它也可能是经过 Java 系统产生的页面,但是它输出的页面
本身不包含上面所说的那些因素。
也就是所谓“动态”还是“静态”,并不是说 数据本身是否动静,而是数据中是否含有和访问者相关的个性化数据。
缓存静态数据策略
第一,你应该把静态数据缓存到离用户最近的地方。
第二,静态化改造就是要直接缓存 HTTP 连接。
第三,选用合适的缓存系统缓存数据
如何做动静分离的改造
从以下 5 个方面 来分离出动态内容
1. URL 唯一化
2. 分离浏览者相关的因素
。
3. 分离时间因素
。
4. 异步化地域因素
5. 去掉 Cookie
。
动态内容的处理通常有两种方案:ESI(Edge Side Includes)方案和 CSI(Client Side Include)方案
1. ESI 方案(或者 SSI)
:即在 Web 代理服务器上做动态内容请求,并将 请求插入到静态页面中,当用户拿到页面时已经是一个完整的页面了。这
种方式对服务端性能有些影响,但是用户体验较好。
2. CSI 方案
。即单独发起一个异步 JavaScript 请求,以向服务端获取动态 内容。这种方式服务端性能更佳,但是用户端页面可能会延时,体验稍 差。
动静分离的几种架构方案
方案 1:实体机单机部署
这种方案是将虚拟机改为实体机,以增大 Cache 的容量,并且采用了一致 性 Hash 分组的方式来提升命中率。这里将 Cache 分成若干组,是希望能达到
命中率和访问热点的平衡。Hash 分组越少,缓存的命中率肯定就会越高,但短 板是也会使单个商品集中在一个分组中,容易导致 Cache 被击穿,所以我们应
该适当增加多个相同的分组,来平衡访问热点和命中率的问题。
![](https://i-blog.csdnimg.cn/blog_migrate/bba2b2432af5e3f60b6adfcf1d4fbdcd.png)
方案 2:统一 Cache 层
所谓统一 Cache 层,就是将单机的 Cache 统一分离出来,形成一个单独的
Cache 集群。统一 Cache 层是个更理想的可推广方案,该方案的结构图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/16b4d67e883fc4a32b624bd8a05b2fe4.png)
方案 3:上 CDN
在将整个系统做动静分离后,我们自然会想到更进一步的方案,就是将 Cache 进一步前移到 CDN 上,因为 CDN 离用户最近,效果会更好。
但是要想这么做,有以下几个问题需要解决。
1. 失效问题,2. 命中率问题,3. 发布更新问题。
基于上面几个因素,选择 CDN 的二级 Cache 比较合适,
因为二级 Cache 数量偏少,容
量也更大
,让用户的请求先回源的 CDN 的二级 Cache 中,如果没命 中再回源站获取数据。
![](https://i-blog.csdnimg.cn/blog_migrate/aac9275651d5a3bda1ecebed83ad17c1.png)