源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

ASP.NET 性能优化之反向代理缓存使用介绍

  • 时间:2021-08-31 18:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:ASP.NET 性能优化之反向代理缓存使用介绍
到目前为止,我们讨论了把缓存存放在ASP.NET的输出缓存中(内存和硬盘),以及浏览器缓存中,而大型站点的另一种常用做法是将缓存部署在反向代理服务器上,这类缓存我们通常称之为反向代理缓存,比如Squid和Varnish。这两款软件通常都部署在非WINDOWS平台上,对于Windows平台上的Asp.net来说,其实一样能使用,我们完全可以把反向代理软件部署在LINUX上,然后代理会路由到后台的WINDOWS WEB(IIS)服务器。总之,非WINDOWS的世界很精彩。 当然,无论是squid还是varnish都有Windows的扩展版本。本文为了简便起见,基于varnish的Windows版本来描述的。 varnish的官方站点:[url=https://www.varnish-cache.org/]https://www.varnish-cache.org/[/url], varnish的Windows版本:[url=http://www.cygwin.com/]http://www.cygwin.com/[/url],如果要编译过的直接可用的版本,在这里:[url=http://www.software112.com/products/cygwin-varnish-cache.html]http://www.software112.com/products/cygwin-varnish-cache.html[/url]。 1:将varnish配置为IIS的代理 首先需要为varnish准备配置文件,比如,可以为default.vcl,内容如下:
[url=http://www.1sucai.cn/upload/201110/20111018211520900.png][img]http://files.jb51.net/upload/201110/20111018211521806.png[/img] [/url] 如果没有缓存,则结果如下: [url=http://www.1sucai.cn/upload/201110/20111018211521384.png][img]http://files.jb51.net/upload/201110/20111018211521400.png[/img] [/url] 可以看到吞吐率有非常大的提升。 [b]4:监控varnish [/b]可以使用varnishstat命令,对varnish进行监控,在上面的压力测试中,如果我们使用监控,得到的结果如下: [url=http://www.1sucai.cn/upload/201110/20111018211521823.png][img]http://files.jb51.net/upload/201110/20111018211521522.png[/img] [/url] 在本例中,我们可以看到共请求了1000次,其中999次命中缓存,那是因为第一次显然肯定是要从IIS中拿输出滴。 [b]5:管理varnish[/b] 可以通过多种途径来进行varnish的管理,包括更改配置、停止服务、启动服务、清理缓存等。可以通过varnishadm命令进行管理,如果你是在远程的话,可以使用telnet来进行管理: telnet 192.168.0.77 8088 其中8088就是我们刚在启动varnish的时候指定的管理端口。连接上之后,stop停止服务、start启动服务,可以敲入help查看所有命令。下面的命令,清除所有缓存: purge.url *$ 6:谨慎引入varnish后带来的缓存变化 引入varnish后,可以发现使用强制刷新(ctrl+R5)后,动态行为发生了改变,即客户端浏览器会去VARNISH上请求数据,但是此时的缓存中已经存在静态的缓存内容,varnish会首先根据请求的HTTP头去和这个缓存内容判断得出需要是否更新,即由于缓存内容的存在,请求不会去IIS上进行缓存协商。这个时候,缓存中的静态内容会直接返回给客户端浏览器,这样一来的话,我们在Page_Load中的代码就根本不会执行,因为它是在IIS中的。 要避免这种情况的发生,我们必须更改VARNISH配置文件,让VARNISH碰到强制更新的时候,忽略缓存,直接去IIS上请求,为配置文件增加如下函数:
[u]复制代码[/u] 代码如下:
sub vcl_hit { if(req.http.Cache-Control~"no-cache"||req.http.Cache-Control~"max-age=0"||req.http.Pragma~"no-cache"){ set obj.ttl=0s; return (restart); } return (deliver); }
经过上面的修改后,再次使用强制更新varnish将会忽略缓存,到IIS上去拿正文。 参考: https://www.varnish-cache.org/docs/trunk/reference/varnishlog.html https://www.varnish-cache.org/trac/wiki/Introduction#TheVarnishConfigurationLanguage http://www.docunext.com/wiki/Varnish http://cd34.com/blog/infrastructure/no-esi-processing-first-char-not/
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部