动态CDN加速

内容分类

我们先将网页的内容分类,其实是分为3种内容的:

  • 静态
  • 动态
  • 事件驱动

静态

静态的就不提了,现在静态资源CDN加速已经基本上覆盖了。

动态

这个动态是指完全动态,高度定制化,绝对不会重复,比如ajax。

这部分请求固然是会回源的,一直以来都没有使用过CDN,但是其实是可以通过CDN的加速来起到快速回源的效果的。

我们使用到的就是CDN的快速传输的能力。其实也就是DSA(Dynamic Site Acceleration)。

传统的DSA有:

- TCP 优化:设计算法来处理网络拥堵和包丢失,加快这些情况下的数据从cdn的恢复以及一些常见的TCP瓶颈
- Route optimization:就是优化从源到用户端的请求的线路,以及可靠性,就是不断的测量计算得到更快更可靠的路线
- Connection management:就是边缘和源之间,包括CDN之前的线路,采用长连接,而不是每一个请求一个连接
- On-the-fly compression:就是数据在刚刚离开源的时候就进行压缩,可以缩短在整个网络之中的流通时间
- SSL offload:加速或者说减少一些安全监测,减少原服务器执行这种计算密集型的压力
- Pre-fetching:有的服务可以解析HTML文件,并将原始服务器预取缓存对象嵌入到文件中

事件驱动

这是第三种内容,很多CDN把它定义为动态的(这部分内容很难被缓存)。它实际上是静态的,只是更新时间不可预期,没法提前决定他的生命周期。

实际上只要有个好的缓存机制,是可以被缓存的

我们需要CDN提供即时清除的能力。这种清除能力还得是可编制化的,可以高速,精准的清除。一直以来的两个问题:

    1. 缺少好的失效框架,除了那几个头部之外,没办法让他失效。所以加上事件驱动内容的不可预见性,很多CDN就直接取消缓存了
  • 2.另一个问题是对于如果做cdn缓存事件驱动内容,对于页面的访问情况得不到一个好的反馈,大多数分析和统计都是做在源服务器上的,如果达不到,很多都做不了

几种技术

  • ESI(Edge Side Includes)(通过边缘服务器的组装来将页面划分为不可缓存和缓存的内容)
  • AMP HTML(通过限制页面资源加载加快静态内容的展示)

ESI(Edge Side Includes)

是一个w3c的规范(https://www.w3.org/TR/esi-lang),允许边缘服务器通过多个url来组装内容。

来把HTML切成碎片,每一片可以有自己的独立的缓存策略。CDN将缓存的静态部分模板和回到起源的非静态内容,在CDN的边缘服务器上进行组装,然后全部交付给客户机。ESI很有效,但是比较难实现,在HTML页面也需要不少额外的代码

就是将大家能看到的一样的东西与用户行为相关的分离,提高首屏加载。但是在逻辑层需要去判断是否登录。看上去我们把这个功能用ajax来做也行,但是当js没法运行的时候,ESI还是可以这么做。

AMP HTML

AMP其实就是限制了页面的资源加载,限制了可以使用的元素,将耗时的元素取消,将耗资源的元素通过custom elements自己来管理资源加载。避免资源默认被加载,只能使用行内元素

一些CDN提供了额外的服务来研究对称的优化。就是在用户侧有一层CDN,服务器侧也有一层CDN。

动态的好处

为什么动态资源要使用CDN的加速呢,主要的好处有两个:

  • 1.首页加载速度更快
  • 2.更可靠的连接(他只要负责连接边缘服务器,如果直接走回源线路的话,线路会很长,不可靠)

参考:

顺便给个github的传送门,喜欢的朋友star一下啊,自己平时遇到的问题以及一下学习的思考都会在上面记录~

    原文作者:潘逸飞
    原文地址: https://www.jianshu.com/p/eb974c412399
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞