页面静态化是搭建高性能网站必用的招式之一,页面静态化可以有效提升系统响应速度,同时也有利于搜索引擎优化。但在页面静态化后,静态页面之间包含(例如所有的静态页面包含页头、页脚)以及静态页面中的局部信息的动态更新又成为新的问题。
静态页面之间的包含一般有如下一些方案:
1、Client Side Includes(CSI):通过frame、iframe、javascript、javacript+ajax等方式将另外一个页面的内容动态包含进来。像现在流行的jquery等javascript库对此有较好的支持。
优点:能够利用浏览器客户端并行处理及装载的机制;通过浏览器缓存机制可以降低网络传输时间,提高性能;计算放在客户端,能够降低服务器端压力
缺点:搜索引擎优化问题;javascript兼容性问题;客户端缓存可能导致服务器端内容更新后不能及时生效;XSS等安全隐患
2、Server Side Includes(SSI):
优点:SSI技术是通用技术,不受具体语言限制,只需要Web服务器或应用服务器支持即可,Ngnix、Apache、Tomcat、Jboss等对此都有较好的支持
缺点:SSI在语法上不能够直接包含其他服务器的url(当然也可以通过redirect等来变通实现),因此在需要充分利用缓存及负载均衡的环境下相对不是很灵活。
当然如果不使用单独的缓存服务器,而是使用Ngnix,利用Ngnix对SSI及Memcached支持,通过NginxHttpSsiModule、NginxHttpMemcachedModule也可以实现页面缓存,但与专业的缓存服务器(例如Varnish)相比较,Ngnix作为缓存服务器只适合于中小规模的场合。
3、Edge Side Includes (ESI):
Edge Side Includes(ESI) 和Server Side Includes(SSI)和功能类似。SSI需要特殊的文件后缀(shtml,inc)。ESI可以直接通过URI包含远程服务器文件,ESI更适合用于缓存服务器上,缓存整个页面或页面片段,因此ESI特别适合用于缓存。像当下流行的缓存服务器Varnish对此有所支持。
SSI可以很容易满足让所有静态页面include其他静态页面的需求。
大部分的网站都有这样的需求:在整个静态页面的局部有需要动态更新的内容片段,包括:
1、与用户个性化无关的信息,所有用户进来看到的内容都一样。例如最热新闻、最活跃的用户等
2、与用户个性化信息相关。例如用户登录信息、用户好友等
以上两种情况,一般情况下都采用ajax方式来实现静态页面局部信息的刷新,ajax直接提交给Web服务器或应用服务器获取动态数据。或者采用Ajax+Memcached的模式,将动态变化的内容放入Memcached中,ajax直接存取Memcached,这样能够缓解Web服务器或应用服务器压力。但采用ajax的方案,直接绕过了缓存服务器,并没有充分利用缓存服务器对于静态页面的缓存支持。
使用Varnish及其对ESI的支持很容易实现对以上两种需求的较好支持:
1、与用户个性化无关的信息:直接由Varnish+ESI就可以实现。对于动态变化的局部页面,可以在ESI制定的url地址返回的http header的Cache-Control来指定缓存策略,实现局部页面缓存(fragment caching)。
2、与用户个性化信息相关:对于整个页面的缓存策略仍然使用Varnish+ESI方式。而需要fragment caching的局部页面,可以根据用户Cookie信息获得用户身份标识信息(例如userid),然后在ESI的URL中带上用户身份信息提交到后端的Web服务器或应用服务器以获取与用户个性化相关的信息。可以参考:
Caching logged in users 。
简单梳理了一下基于Varnish+ESI实现静态页面缓存的思路,有空再写代码具体测试一下。
Varnish作为一个高性能的缓存服务器,值得好好研究一下。
尽管Varnish和Ngnix都具有Load Balancing的功能,但Ngnix只能根据客户端IP进行负载均衡,不支持基于Session状态维护(session persistence)方式,无法维护Session状态;而Varnish的Load Balancing都不支持。而这正是HAproxy的强项。
由此得到一个相对理想的架构:
Nginx (用于HTTP compression及https) –> Varnish (用于reverse proxy caching) –>HAProxy(用作Load Balancing)–>Ngnix(Web Server)或Tomcat
分享到:
相关推荐
varnish+lighttpd配置
Varnish+应用技术指南2 详细描述了Varnish的安装 配置和维护
适合中型企业的 网站架构 ,负载均衡——高可用,
Varnish 应用技术指南 \ 中文版的 PDF格式!
Varnish 2.1.2 缓存负载,做反向代理缓存优于squid
一款高性能的开源HTTP加速器,2006年发布的第一个版本0.9,发展到...挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。 2.作者:Poul-Henning Kamp是FreeBSD的内核开发者之一。
varnish+cdn
Varnish是一款高性能、开源的反向代理服务器和缓存服务器,其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一。Varnish采用全新的软件体系结构,和现在的硬件体系配合比较紧密。
本书是介绍如何快速使用Varnish的一本电子书,英文的
构架Nginx+PHP(Fastcgi)+MySQL+Memcache高性能web服务器
我们讨论了把缓存存放在ASP.NET的输出缓存中(内存和硬盘),以及浏览器缓存中,而大型站点的另一种常用做法是将缓存部署在反向代理服务器上,这类缓存我们通常称之为反向代理缓存,比如Squid和Varnish。这两款软件...
主要介绍了高命中率的varnish缓存配置分享,本文直接给出配置代码,需要的朋友可以参考下
如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN.
• 如果不提供命令行选项 (-b hostname:port ),则 backend default 部分将指定要连接的服务器。 • 当守护进程收到一个客户机请求时,将调用 vcl...lookup 将尝试在缓存中查找响应,而 insert 将把响应添加到缓存中。
步骤一:从真机给server1代理传一个压缩包 bansys 步骤二:在server1代理服务器上面进行设置 ...域名改为www.westos.org(对这个域名的数据进行缓存清理) vim /etc/httpd/conf/httpd.conf apahce端口为8080 systemctl
Varnish purges 缓存清除 教程.docx
cpanel-清漆在 cPanel 服务器上安装 Varnish 以提供静态文件。安装wget https://raw.githubusercontent.com/MdNor/cpanel-varnish/master/install.shsh install.sh正确设置您可以根据自己的喜好使用清漆设置以获得...
最近,朋友托我帮他找些关于Varnish的资料。整理了下,都在这里了。... |- 使用Varnish代替Squid做网站缓存加速器的详细解决方案 |- Varnish_cache.pdf(中文版) |- 在Varnish架构上编程的注意点(中文)-Varnish开发者