宝哥软件园

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

编辑:宝哥软件园 来源:互联网 时间:2021-10-17

到目前为止,我们已经讨论了在ASP.NET将缓存存储在输出缓存(内存和硬盘)和浏览器缓存中。大型站点的另一个常见做法是在反向代理服务器上部署缓存。这种缓存通常称为反向代理缓存,如Squid和Varnish。这两个软件通常部署在非Windows平台上,但在WINDOWS平台上可以像Asp.net一样使用。我们可以在LINUX上部署反向代理软件,然后代理将被路由到后台的WINDOWS WEB(IIS)服务器。总之,非windows世界很精彩。当然,鱿鱼和清漆都有Windows的扩展版本。为了简单起见,本文基于Windows版本的清漆进行描述。清漆的官方网站:https://www.varnish-cache.org/,清漆的Windows版本:http://www.cygwin.com/,如果要编译直接可用的版本,这里:http://www . software 112.com/products/Cygwin-清漆-cache.html. 1:要将清漆配置为IIS的代理,需要先为清漆准备一个配置文件,比如可以是default.vcl,内容如下:复制代码如下:后端default {。主机=' 192 . 168 . 0 . 77 ';端口=' 80 ';} sub VCL _ fetch { remove bere sp . http . set-Cookie;} sub VCL _ recv { remove req . http . Cookie;}在我们要演示的这个示例中,这三个配置都是不可或缺的,如下所示:后端默认值:指定我们IIS站点的地址和端口;Sub vcl_fetch:这是一个清漆函数,在清漆从后端服务器,也就是IIS获取数据后调用。Subvcl _ recv:清漆函数,表示客户端请求杠杆到达反向代理服务器时被调用;因为默认情况下,当http头包含与Cookie相关的标识符时,清漆会直接忽略缓存,所以我们需要以上两个函数来专门处理Cookie。当然,目前这两个功能都是简单粗暴地删除标记。在实际应用中,我们可能需要根据实际情况给它们增加一些判断条件。2:启动清漆以下命令为我启动清漆:c: 清漆 binvarnishd-a :8011-t :8088-f c :/清漆/etc/default.vcl-s文件,c :/清漆/var/cache。因为在我的测试环境中,清漆和iis在同一台机器上,IIS已经占据了80%,所以我在这里只使用其他端口。-T指定清漆的管理端口;-f指定要使用的配置文件;后一个参数只让清漆使用大小为100M m的文件缓存,当然大小要根据实际情况指定;开始清漆后,如果我们请求http://地址:端口/,我们可以等待200OK状态码,这意味着清漆已经正确接受了请求。3.一个例子创建了一个ASP.NET页面,内容如下:复制代码如下: protected void page _ load(object sender,eventargs e){ this . response . addheader(' cache-control ',' max-age=60 ');这个。响应。添加标题('上次修改',日期时间。现在. ToString('U ',DateTimeFormatInfo。不变量信息));日期时间IfModifiedSince自;if (DateTime。特里帕斯(这个。request . headers . get(' If-Modified-after '),out If Modified after(){ If((DateTime)。现在-如果修改自。AddHours(8))。60秒){回应。状态='304未修改';回应。StatusCode=304返回;} }字符串conn='数据源=192 . 168 . 0 . 77;初始目录=luminjidb用户Id=saPassword=sa';使用(数据集ds=公共。SqlHelper.ExecuteDataset(conn,CommandType。文本,“从名称中选择前1 *,DepTb b,其中a . DepID=b . ID ORDER BY new ID()')){ var result=ds。表[0]。行[0]['name']。ToString();回应。写(结果);}}对页面进行压力测试,有100个用户,1000个请求,结果如下:image

如果没有缓存,结果如下:image

可以看出吞吐率有了很大的提升。4.监控清漆您可以使用varnishstat命令来监控清漆。在上面的压力测试中,如果我们使用监控,结果如下:image

在这个例子中,我们可以看到有1000个请求,其中999个命中了缓存,因为第一次显然需要从IIS获得输出丢弃。5:管理清漆管理清漆的方法有很多,包括更改配置、停止服务、启动服务、清除缓存等。您可以使用命令varnishadm进行管理,如果您在远程位置,则可以使用telnet进行管理:telnet 192.168.0.77 8088,其中8088是我们启动varnishadm时指定的管理端口。连接后,stop停止服务,start启动服务,您可以键入help查看所有命令。以下命令,清除所有缓存:purge.url *$ 6:小心引入清漆带来的缓存更改。介绍完varnish后,我们可以发现使用强制刷新(ctrl R5)后动态行为发生了变化,即客户端浏览器会去VARNISH请求数据,但此时缓存中已经有静态缓存内容。清漆首先会根据请求的HTTP头和这个缓存内容,也就是因为缓存内容,来判断是否需要更新。此时,缓存中的静态内容将直接返回给客户端浏览器,这样我们在Page_Load中的代码就完全不会被执行,因为它在IIS中。为了避免这种情况,我们必须更改清漆配置文件,这样当清漆遇到强制更新时,它会忽略缓存并直接在IIS上请求它。将以下函数添加到配置文件中:复制代码如下: sub VCL _ hit { if(req . http . cache-control ~ ' no-cache ' | | req . http . cache-control ~ ' max-age=0 ' | | req . http . pragma ~ ' no-cache '){ set OBB。返回(重启);}返回(交付);}经过上述修改后,再次使用强制更新清漆将忽略缓存,转到IIS获取文本。参考:https://www . varnish cache . org/docs/trunk/reference/varnish log . html https://www . varnish-cache . org/TRAC/wiki/Introduction #。http://www.docunext.com/wiki/Varnish http://CD 34.com/blog/infra structure/no-ESI-processing-first-char-not/

更多资讯
游戏推荐
更多+