内容分类
我们先将网页的内容分类,其实是分为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提供即时清除的能力。这种清除能力还得是可编制化的,可以高速,精准的清除。一直以来的两个问题:
- 缺少好的失效框架,除了那几个头部之外,没办法让他失效。所以加上事件驱动内容的不可预见性,很多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.更可靠的连接(他只要负责连接边缘服务器,如果直接走回源线路的话,线路会很长,不可靠)
参考:
- http://blog.streamingmedia.com/2010/10/how-dynamic-site-acceleration-works-what-akamai-and-cotendo-offer.html
https://www.highwinds.com/products/full-site-acceleration/ - https://www.fastly.com/blog/using-esi-part-1-simple-edge-side-include
- http://www.globaldots.com/how-dynamic-site-acceleration-works/
- https://www.fastly.com/blog/caching-dynamic-content
顺便给个github的传送门,喜欢的朋友star一下啊,自己平时遇到的问题以及一下学习的思考都会在上面记录~