[CDN]动态内容的缓存技术 CSI,SSI,ESI
CDN 中动态内容是不太好解决的,通常需要很麻烦的技术和方法来实现这些功能,比如我设计过一种动态缓存的方法,基于 session 栏接,然后根据热点来做动态缓存时间的控制。目前开放的实现 Cache 的技术主要有 CSI,SSI,ESI 之类几种。在一个动态网页中,内容不断更新和变化,但这并不意味不能缓存,其实还是有 90% 的内容都可以做到 CDN中的。只要花点心思。但这些都对客户有更加高的要需求。下面是这向种技术的介绍。
动态 Cache 页面有如下一些方案:
1、Client Side Includes(CSI):
通过iframe、javascript、ajax 等方式将另外一个页面的内容动态包含进来。这样来实现动态化。
优点:能够利用浏览器客户端并行处理及装载的机制;这种技术基本不需要服务器支持和修改,计算和操作放在客户端,能够降低服务器端压力
缺点:搜索引擎优化问题;javascript兼容性问题;客户端缓存可能导致服务器端内容更新后不能及时生效。常常通过加 js version 来解决.
2、Server Side Includes(SSI):
SSI它就是HTML文件中,可以通过注释行调用的命令或指针。实现整个网站的内容更新。SSI需要特殊的文件后缀(shtml,inc).
优点:SSI技术是通用技术,不受具体语言限制,只需要Web服务器或应用服务器支持即可,Ngnix、Apache、Tomcat、Jboss等对此都有较好的支持,目前 Squid 不支持。
缺点:SSI在语法上不能够直接包含其他服务器的url,只能在当前服务器上运行。所以通过 CDN 之类的 Cache 时,还是会失效,不灵活.
3、Edge Side Includes (ESI):
Edge Side Includes(ESI) 和Server Side Includes(SSI)和功能类似。SSI需要特殊的文件后缀(shtml,inc)。ESI(Edge Side Include)通过使用简单的标记语言来对那些可以加速和不能加速的网页中的内容片断进行描述,每个网页都被划分成不同的小部分分别赋予不同的缓存控制 策略,使Cache服务器可以根据这些策略在将完整的网页发送给用户之前将不同的小部分动态地组合在一起。通过这种控制,可以有效地减少从服务器抓取整个 页面的次数,而只用从原服务器中提取少量的不能缓存的片断,因此可以有效降低原服务器的负载,同时提高用户访问的响应时间。
优点: ESI更适合用于缓存服务器上,缓存整个页面或页面片段,因此ESI特别适合用于缓存,CDN 的第一名的老大,Akamai 全力支持协议。对于布置和 Cache 都是最友好的。
缺点: 出来很久,一直没有多少人使用。会这个技术的程序员不多。