网站性能直接影响访问速度,从而影响访问量。实现高性能Web应用的重要性是不言而喻的。性能瓶颈主要体现在高延时、拥塞和服务器负载,专业的解决方法往往成本较高。做好缓存的设计则可以在控制成本的情况下充分的提高性能。

【51CTO精选译文】曩昔几年中,Web使用程序现已从简略的HTML页面堆积演变成运用各式各样的技能构建高可扩展性和交互式的富使用程序。规划和开发这类使用程序变得越来越杂乱,此外,决策者正越来越多地寻求构建更丰厚的互动功用到这些使用程序中,一起还要保证可维护性和高功用,但高功用意味着高本钱。为了构建供给给最终用户体会的是一个结实的使用程序,开发人员需求处理潜在的功用瓶颈。

本文侧重于缓存——它是交给高功用Web使用程序急需的——也扼要介绍一下紧缩功用。有一些公司在出产和出售专门的紧缩和功用产品。本文旨在简略介绍在寻求专业产品处理功用问题之前开发人员能够在客户端和服务器端对Web使用程序做的一些功用改善。

功用瓶颈

功用瓶颈首要体现在高延时拥塞服务器负载。缓存不能彻底处理掉这三个问题,但经过具体的规划考虑,缓存是能够进步功用的。在服务器端和客户端都缓存内容,据查询,均匀而言,下载HTML只需求总的用户呼应时刻的10-20%,剩余的80-90%悉数用于下载页面中的其它组成内容,这些组成内容一般包括图画,如公司logo,缓存logo能够有用避免到服务器的屡次往复。在前日51CTO上发布的加快,加快,再加快:来自Google的网站加快技巧大全中,Google说到的进步网站速度和功用的低本钱技巧中就包括缓存这一条。至于架构规划方面,则可参阅51CTO的视频专题:大型网站架构专家谈。

简略地讲,缓存是暂时存储。它将数据复制到不同的计算机或不同于原始数据源的方位,有了正确的装备,拜访缓存数据的速度比拜访原始数据的速度要快得多,运用缓存数据能够减小服务器负载和带宽耗费,从最终用户的视点来看便是功用进步了。

图1显现了Internet怎么作业的快速总揽,以及缓存在哪里产生作用。

缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)  高性能Web应用 缓存 第1张
图 1 Internet上的缓存:这个图显现了常见的恳求和检索缓存信息的机遇

缓存

正如你在图1中所看到的,在服务器和客户端上缓存数据既是或许的也是有用的,图2显现了这三个缓存方位的不同视图。

缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)  高性能Web应用 缓存 第2张
图 2 缓存装备:此图显现了三个典型的缓存方位

1、客户端浏览器缓存:浏览器缓存Web目标后,能够对重复的恳求直接呼应,不必再从Internet恳求数据了。

2、服务器端转发署理缓存:尽管或许有些改变,但这些缓存方位一般是在最终用户防火墙里边,能够对恳求直接呼应,不需求从原始来历恳求数据。

3、服务器端反向署理缓存:也被称为网关或署理缓存,这些缓存服务器的操作代表了客户的来历服务器,术语“内容分发网络(CDN)”便是这些反向署理缓存的调集。

你能够缓存任何或许不止一次被恳求的目标,但总有一个风险便是缓存的目标很或许变得陈腐,也便是说,没有精确地反响原始数据。不过能够运用两个参数来操控一切可缓存的目标:freshness和validation。freshness和validation都能够运用HTTP恳求和相应组合来进行确认。

◆Freshness确认某个目标是否能够从缓存中取得,运用expires和cache-control:max-age头进行操控。

◆Validation确认某个目标是否现已陈腐,运用last-modified和if-modified-since头进行操控。

规划高度缓存的Web使用程序

企业级Web使用程序既有静态部分又有动态部分,只需进行了正确的规划和架构,都能够完成静态部分从缓存中获取,动态部分从原始服务器获取,但第一步是确认要缓存什么,图3供给了一个攻略,能够协助你确认哪些目标是可缓存,哪些目标是动态的(不行缓存的)。

缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)  高性能Web应用 缓存 第3张
图 3 确认缓存才能:此图供给了某个目标是否应该缓存的攻略

使用程序架构在可缓存目标和不行缓存目标之间有一点差异,开发人员应该寻求最大极限的缓存命中率,一起要避免缓存动态目标。下面是一些最佳实践:

1、运用缓存操控(cache-control:max-age)和有用期(Expires)头

2、运用最终修正时刻(last-modified)头

3、查看Web服务器是否支撑If-Modified-Since

4、查询为小型站点运用转向署理的可行性,或为大型企业网站从CDN厂家取得专业人员的协助

5、依据网站的可扩展性考虑是运用数据中心仍是保管

6、自己着手编码常常需求很多的时刻和精力,依据站点的规划,能够考虑选用开源缓存办法,如运用Squid作为署理服务器

7、为文件下载清晰运用混合缓存机制

8、保证那些无用户/输入依靠的动态业务能够取得缓存,为不同目标创立缓存映像能够协助将可缓存目标和不行缓存目标阻隔开来

9、当心彻底疏忽缓存头的内容管理体系(CMS)

#p#

为缓存运用头(Header)

本节覆盖了为缓存意图最有用的头。

操控缓存

在HTTP 1.1标准中,服务器应该为缓存操控头发送一个无缓存呼应,以指出内容不该该被缓存,客户端和服务器端都应该恪守这个头信息,以避免头中现已声明晰的动态内容,大多数开发言语都支撑运用这个头信息操控呼应头值。

另一方面,你能够为cache-control头回来一个public服务器端应对来答应缓存(即便没有cache-control头也能够指出目标是能够缓存的),cache-control头的值为private是一个特殊情况,表明浏览器或许会在本地缓存目标,但署理服务器不会缓存它。

图4中的恳求——呼应作业流显现了Google怎么经过cache-control头告诉署理服务器不要缓存的。

缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)  高性能Web应用 缓存 第4张
图 4 中止署理服务器缓存:恳求--应对流显现服务器回来private阻挠署理服务器缓存

最终,服务器运用expires应对时包括了一个表明有用期的日期/时刻戳,直到有用期满之前浏览器都能够缓存中的目标。如图5所示。

缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)  高性能Web应用 缓存 第5张
图 5 过期内容:Google的Gmail服务器回来一个expires头,包括缓存页面的过期日期和时刻

这一点你能够验证,Gmail答应浏览器缓存Gmail主页,直到expires头中清晰指定的时刻到了停止。

运用Last-Modified 头

浏览器运用这个头信息来确认缓存目标生存期的有用性,浏览器恳求这个目标时,服务器运用一个包括该目标最终修正时刻的时刻戳的Last-Modified 头进行呼应,当用户下次恳求相同的目标时,假如当时的时刻戳超出了目标的运用期限,或许用户是经过改写办法恳求该页面的,浏览器会向服务器发送一个if_modified_since恳求确认目标是否产生了改变,假如目标确实产生了改变,浏览器就发送一个完好的GET恳求以获取新的目标并将其再次缓存起来,不然,浏览器就从它的缓存中提取目标,并更新目标的last-modified值。图6显现了一个作业实例。

缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)  高性能Web应用 缓存 第6张
图 6 最终修正时刻:last-modified时刻戳让浏览器确认是运用本地缓存内容仍是从头恳求内容

举一个比如,假定浏览器在恳求www.yahoo.com时,服务器运用last-modified时刻戳进行呼应,和运用if-modified-since头进行呼应(参阅图7)时比照一下,看行为有何不同。

缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)  高性能Web应用 缓存 第7张
图 7 查看修正:经过发送if-modified-since头,服务器将会运用一个表明自时刻戳指定时刻以来是否产生了改变的值进行呼应

在图7中,浏览器运用if-modified-since头发送一个恳求,服务器运用304代码进行呼应,表明浏览器能够运用缓存,不必主张一个完好的GET恳求。

为了全面了解这些头信息的作用,最好的办法是你自己着手试验一翻,运用各种不同的头信息组合,并调查它们的行为,剖析头信息的一个好东西是Wfetch。

自己着手的办法

正如前面给出的主张,自己着手(DIY)的办法并不总是捷径,专门供给CDN加快的产品和处理方案能够满意不同类型的需求。但假如你要开发的是一个内部运用的产品,能够供给协助的或许只要Squid了,Squid被用作许多产品的一个组成部分,许多ISP也在运用它。例如,在Java使用程序中,Squid能够被用作Tomcat服务器的署理,Squid供给的不仅仅是HTTP缓存,但关于它的完好介绍现已超出了本文的规模,请读者自行查找相关文章,能够在Wikimedia看到另一个运用Squid的比如。

HTTP紧缩

缓存仅仅是进步Web使用程序功用的办法之一,紧缩是另一个要害办法,HTTP紧缩在内容发送到客户端之前将其紧缩,在客户端和服务器端都有紧缩功用,当服务器交给的是紧缩内容时,由浏览器进行解压,这样能够节省名贵的带宽,削减本钱和进步呼应时刻。

浏览器运用值为gzip的accept-encoding—typically头声称它们支撑紧缩,服务器运用content-encoding头指定应对数据的编码,例如,假如运用的是gzip格局进行紧缩,服务器应该运用值为gzip的content-encoding 头进行呼应。

服务器查看呼应的MIME类型,只紧缩那些经过紧缩能够取得优点的类型,如文本文件、HTML和PDF文件,图画格局如gif文件不会从紧缩技能取得什么优点,由于gif自身现已是紧缩格局了,视频文件以及其它预紧缩的二进制文件也不会从紧缩功用取得优点。

留意:署理服务器应该和来历服务器支撑同类型的紧缩。

整体而言,结合缓存和紧缩功用能够进步Web使用程序的功用,因而还进步了使用程序的可扩展性。

原文:A Guide to Caching and Compression for High Performance Web Applications

作者:Puneet Sangal

【修改引荐】

  1. 高功用、高流量互联网使用架构规划实战准则
  2. 高功用Web使用的六个好习惯
  3. 小规划低功用低流量网站架构规划
  4. 大型网站架构不得不考虑的10个问题
  5. 大中型网站架构探秘
转载请说明出处
知优网 » 缓存规划详解:低成本的高性能Web使用解决方案(web缓存技术)

发表评论

您需要后才能发表评论