秒杀系统架构关键技术-动静分离

  • Post author:
  • Post category:其他



何为动静数据


“动态数据”和“静态数据”的主要区别就是看页面中输出的数据是否和 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 被击穿,所以我们应

该适当增加多个相同的分组,来平衡访问热点和命中率的问题。

方案 2:统一 Cache 层

所谓统一 Cache 层,就是将单机的 Cache 统一分离出来,形成一个单独的

Cache 集群。统一 Cache 层是个更理想的可推广方案,该方案的结构图如下:


方案 3:上 CDN

在将整个系统做动静分离后,我们自然会想到更进一步的方案,就是将 Cache 进一步前移到 CDN 上,因为 CDN 离用户最近,效果会更好。

但是要想这么做,有以下几个问题需要解决。


1. 失效问题,2. 命中率问题,3. 发布更新问题。


基于上面几个因素,选择 CDN 的二级 Cache 比较合适,

因为二级 Cache 数量偏少,容


量也更大


,让用户的请求先回源的 CDN 的二级 Cache 中,如果没命 中再回源站获取数据。



版权声明:本文为kingSolider原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。