缓存设计详解:低成本的高性能Web应用解决方案

缓存设计详解:低成本的高性能Web应用解决方案
缓存设计详解:低成本的高性能Web应用解决方案

过去几年中,Web应用程序已经从简单的HTML页面堆积演变成使用各种各样的技术构建高可扩展性和交互式的富应用程序。设计和开发这类应用程序变得越来越复杂,此外,决策者正越来越多地寻求构建更丰富的互动功能到这些应用程序中,同时还要保证可维护性和高性能,但高性能意味着高成本。为了构建提供给最终用户体验的是一个牢固的应用程序,开发人员需要解决潜在的性能瓶颈。

本文侧重于缓存——它是交付高性能Web应用程序急需的——也简要介绍一下压缩功能。有一些公司在生产和销售专门的压缩和性能产品。本文旨在简单介绍在寻求专业产品解决性能问题之前开发人员可以在客户端和服务器端对Web应用程序做的一些性能改进。

性能瓶颈

性能瓶颈主要体现在高延时、拥塞和服务器负载。缓存不能完全解决掉这三个问题,但经过详细的设计考虑,缓存是可以提高性能的。在服务器端和客户端都缓存内容,据调查,平均而言,下载HTML只需要总的用户响应时间的10-20%,剩下的80-90%全部用于下载页面中的其它组成内容,这些组成内容通常包括图像,如公司logo,缓存logo可以有效避免到服务器的多次往返。在前日51CTO上发布的加速,加速,再加速:来自Google的网

站加速技巧大全中,Google提到的提升网站速度和性能的低成本技巧中就包括缓存这一条。至于架构设计方面,则可参考51CTO的视频专题:大型网站架构专家谈。

简单地讲,缓存是临时存储。它将数据复制到不同的计算机或不同于原始数据源的位置,有了正确的配置,访问缓存数据的速度比访问原始数据的速度要快得多,使用缓存数据可以减小服务器负载和带宽消耗,从最终用户的角度来看就是性能提高了。

图1显示了Internet如何工作的快速总揽,以及缓存在哪里发生作用。

?

图 1 Internet上的缓存:这个图显示了常见的请求和检索缓存信息的时

缓存

正如你在图1中所看到的,在服务器和客户端上缓存数据既是可能的也是有效的,图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提供了一个指南,可以帮助你确定哪些对象是可缓存,哪些对象是动态的(不可缓存的)。

?

图 3 确定缓存能力:此图提供了某个对象是否应该缓存的指南应用程序架构在可缓存对象和不可缓存对象之间有一点差异,开发人员应该寻求最大限度的缓存命中率,同时要避免缓存动态对象。下面是一些最佳实践:

1、使用缓存控制(cache-control:max-age)和有效期(Expires)头

2、使用最后修改时间(last-modified)头

3、检查Web服务器是否支持If-Modified-Since

4、调查为小型站点使用转向代理的可行性,或为大型企业网站从CDN厂家获得专业人员的帮助

5、根据网站的可扩展性思考是使用数据中心还是托管

6、自己动手编码常常需要大量的时间和精力,根据站点的规模,可以考虑采用开源缓存方法,如使用Squid作为代理服务器

7、为文件下载明确使用混合缓存机制

8、确保那些无用户/输入依赖的动态事务可以获得缓存,为不同对象创建缓存映像可以帮助将可缓存对象和不可缓存对象隔离开来

9、小心完全忽略缓存头的内容管理系统(CMS)

为缓存使用头(Header)

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

控制缓存

在HTTP 规范中,服务器应该为缓存控制头发送一个无缓存响应,以指出内容不应该被缓存,客户端和服务器端都应该遵守这个头信息,以防止头中已经声明了的动态内容,大多数开发语言都支持使用这个头信息控制响应头值。

另一方面,你可以为cache-control头返回一个public服务器端应答来允许缓存(即使没有cache-control头也可以指出对象是可以缓存的),cache-control头的值为private是一个特殊情况,表示浏览器可能会在本地缓存对象,但代理服务器不会缓存它。

图4中的请求——响应工作流显示了Google如何通过cache-control头通知代理服务器不要缓存的。

?

图 4 停止代理服务器缓存:请求--应答流显示服务器返回private阻止

代理服务器缓存

最后,服务器使用expires应答时包括了一个表示有效期的日期/时间戳,直到有效期满之前浏览器都可以缓存中的对象。如图5所示。

?

图 5 过期内容:Google的Gmail服务器返回一个expires头,包括缓存

页面的过期日期和时间

这一点你可以验证,Gmail允许浏览器缓存Gmail主页,直到expires

头中明确指定的时间到了为止。

使用Last-Modified 头

浏览器使用这个头信息来确定缓存对象生存期的有效性,浏览器请求这个对象时,服务器使用一个包含该对象最后修改时间的时间戳的

Last-Modified 头进行响应,当用户下次请求相同的对象时,如果当前的时间戳超出了对象的使用期限,或者用户是通过刷新方式请求该页面的,浏览器会向服务器发送一个if_modified_since请求确定对象是否发生了变化,如果对象的确发生了变化,浏览器就发送一个完整的GET请求以获取新的对象并将其再次缓存起来,否则,浏览器就从它的缓存中提取对象,并更新对象的last-modified值。图6显示了一个工作实例。

?

图 6 最后修改时间:last-modified时间戳让浏览器确定是使用本地缓

存内容还是重新请求内容

举一个例子,假设浏览器在请求时,服务器使用last-modified时间戳进行响应,和使用if-modified-since头进行响应(参考图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应用程序的性能,因此还提高了应用程序的可扩展性。

简单Web服务器设计与实现课程设计

计算机网络课程设计报告 题目:简单Web服务器设计与实现 专业: 学号: 学生姓名: 指导教师:

摘要 (2) 关键词 (2) 1. 前言 (3) 1.1 课程设计前准备 (4) 1.2 课程设计的内容 (5) 1.3 课程设计要求 (5) 1.4 课程设计平台 (5) 2. Web服务器的工作原理 (5) 2.1 HTTP协议的作用原理 (5) 2.2 Java开发语言相关知识与技术 (6) 3. 开发环境及套字接编程 (11) 3.1 Web服务器的开发环境 (11) 3.2 Web服务器的套接字编程 (12) 4. WEB服务器的设计与实现 (13) 4.1 Web服务器的程序设计流程 (13) 4.2 用Java实现Web服务器的主要设计步骤及程序 (14) 5. 测试运行 (21) 5.1 调试运行 (21) 6.结束语 (23) 参考文献 (24)

WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信,HTTP协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。在课程设计中,系统开发平台为Win7,程序设计语言采用Java,程序运行平台为Eclipse。在程序设计中,采用了结构化与面向对象两种解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。 关键词Java;HTTP;Web服务器

Internet是目前世界上最大的计算机互联网络,与大家的生活、学习、工作有着越来越密切的关系,它遍布全球,将世界各地各种规模的网络连接成一个整体,其用户群十分庞大,因此,建设一个好的Web站点对于一个机构的发展十分重要。近年来,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在Internet中的广泛应用,Web站点向用户提供的服务将越来越丰富,越来越人性化。 本课程设计主要解决由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信的Web服务器的程序设计。 1.1 课程设计前准备 以下的工作均是建立在大量的调查基础上的,是Web服务器开发前期准备工作所解决的问题。 (1)Java简介 Java是由sun公司开发的一种新型的面向对象的程序设计语言,主要用于web页面的设计[1]。Java语言的流行除了因为它能够编制嵌入HTML文件中的Applet外,还在于Java语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。Java语言的发展颇具传奇性,它与Internet的WWW的迅猛发展是分不开的。由于其发展迅速,有人将它比喻为Internet上的世界语。前面讲到在Internet上Web页面的设计采用的是HTML语言,用户借助于Web浏览器(如Netscape,HotJava,IE等),可以访问到远程web服务器上静态的、具有超链接的Web页面[2]。 (2)HTTP协议简介 HTTP 协议是应用层的协议,定义了服务器端和客户端之间文件传输的沟通方式。HTTP协议用于从WWW服务器传输超文本到本地浏览器的传送协议。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,它允许用户在统一的界面下,采用不同的协议访问不同的服务。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等[3]。

web程序设计课程设计--文件管理系统

目录 一.项目背景 (2) 二.需求分析 (2) 1.系统需求分析 (2) 2.系统分析 (3) 三.后台数据库Microsoft SQL Server 2008 (4) 四.https://www.360docs.net/doc/d76466565.html, 2010 (4) 五.数据库设计 (4) 1.数据库设计 (4) 2.功能模块设计 (6) 3.系统功能流程 (7) 六.详细功能设计 (7) 七. 课程设计总结 (8) 八.问题与解答 (9)

一.项目背景 文件管理系统是信息技术在公司里管理中最典型的应用。传统文件管理模式是由人工去管理的,效率低下,无法适用于当前对文件管理的需求。文件管理系统基于网络技术,使办公室对文件的管理工作逐步信息化,从而形成由办公室人员与办公室设备共同构成服务于某种目标的人机文件处理系统,因而可以将跨地区的各个部门紧密连接在一起,从而达到对文件的实时共享,可以最大程度地发挥各级人员的工作效率。 通过以上分析,得出总结:文件管理是一个过程,因为网络化的文件管理系统并不局限于办公室,具有广泛的应用范畴。从领导各个业务部门乃至单位的所有工作人员,几乎人人都可能成为使用文件管理系统的用户。随着社会的发展与信息技术的进步,全球信息化的直拨越来越明显,任何单位与企业不再是局限于某一个地区,都在自觉不自觉在参与到了全球化的竞争中。在这个全球化的竞争中,政府机关企事业单位对信息的掌握程序,信息获取是否及果,信息能否得到充分的利用、对信息的瓜刘否敏感准确,已越来越成为徇其竞争能力的最重要因素。综上所述,文件管理系统的前景是非常广阔的。 二.需求分析 1.系统需求分析 随着国家信息基础建设的深入,规划用网络构建文件管理系统以实现管理员对文档的管理,同时实现了对文档的上传,下载,浏览共享文件和删除文件,同时每个用户还有不同的权限。在此让不同用户方便的实现了对文件的有效管理与其它相关信息的有效管理,为人们提供更广泛的、更便捷的信息及服务。 随着各个学校规模的不断扩大,学校内部对文件处理急剧增加。如果通过网络文件管理系统工作,就可以抛弃以入往传统的模式,发文件的一级一级传达的烦琐。用户只要上网就以查看上级添加而存放在数据库中的文件与相互交流信息的目的。因而根据学校对文件管理

《基于WEB程序设计》期末考试与答案

《基于WEB程序设计》 < 1 > 期末考试试卷row 2, cell 1 < 3 >row 2, cell 2 : 号位座 考生注意:1.本试卷共有六道大题,满分100分。 2.考试时间90分钟。 3.卷面整洁,字迹工整。 得分评卷人二、数据库基础代码分析(每小题 5 分,共10 分)4.填写内容不得超出密封线。 密 1. 解释代码:请解释下述代码的含义。(5 分)总分题号一二三四五六 INSERT INTO article ( title, writer, content ) 核分人题分10 10 20 10 30 20 VALUES (‘实验’,学生‘’,插入‘数据’); 复查人得分 得分评卷人一、HTML 代码分析(每小题 5 分,共10 分) : 号 学 1. 根据网页截图效果补充代码。 (5 分) 2.解释代码:请解释下述代码的含义。(5 分) DELETE * FROM article 封 :业专 WHERE 编号 =1; ___1______ :名姓 </ 2 > </ 3 > <body> 得分评卷人三、标准控件代码分析(每小题10 分,共20 分) 线 </ 4 > </ 5 > 1. 解释代码:请解释下述代码的含义。 (10 分) ButtonEx.aspx : <%@ Page Language="VB" AutoEventWireup="false" CodeFile=" ButtonEx.vb " Inherits="_Default" %> 2. 根据网页截图效果补充代码。(5 分) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.360docs.net/doc/d76466565.html,/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.360docs.net/doc/d76466565.html,/1999/xhtml" > <head runat="server"> <table border="1"> <title> 无标题页

WEB课程设计报告

Web开发技术课程设计题目:学生信息管理系统 院系:软件工程 班级学号:软件13 -1(21,19) 姓名:唐波 同组成员:史伟良 指导教师:王双利 2014 年12 月12 日

Web开发技术课程设计任务书 一、题目:学生信息管理系统 二、设计要求 (1)史伟良负责设计与实现管理系统登陆界面;唐波负责设计与实现管理系统增删改查界面。 (2)查阅相关资料,自学具体课题中涉及到的新知识。 (3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。 (4)所设计的程序有输入、输出。 (5)按要求写出了课程设计报告,于设计结束后2天提交了。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、致谢、附录(带中文注释的程序清单)、参考文献。总体设计应配合软件总体模块结构图来说明软件应具有的功能;详细设计应用传统或N-S流程图和屏幕抓图说明;调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。 三、课程设计工作量 一般每人的程序量在200行有效程序行左右,不得抄袭。 四、课程设计工作计划 2014年12月8日,指导教师讲解布置题目,学生根据题目准备资料; 2014年12月8日,进行总体方案设计; 2014年12月8日~2014年12月10日,完成程序模块并通过独立编译; 2014年12月10日~2014年12月11日,将各模块集成为一完整的系统, 并录入足够数据进行调试运行; 2014年12月11日~2014年12月12日,验收、撰写课程设计报告。 指导教师签章: 专业主任签章:

Web开发技术课程设计指导教师评语与成绩

《JavaScript 程序设计基础教程(第2版)》习题答案

《JavaScript 程序设计基础教程(第2版)》习题 答案 第一章Web 技术概述 一、单选题 1)D 2)D 3)D 4)A 5)C 6)D 7)C 8)C 9)D 10)D 11)A 12)D 13)D 14)D 15)A 二、综合题 (略) 第二章HTML/XHTML 制作 一、判断题 1)对2)错3)对4)错5)对 6)错7)错8)错9)错10)对 11)对12)对13)错14)错15)对 16)错17)对18)错19)错20)对 21)错22)错 二、单选题 1)D 2)C 3)C 4)B 5)A 6)B 7)B 8)B 9)C 10)C 11)B 12)C 13)C 14)C 15)C 16)C 17)A 三、综合题 1)ex020301.htm 2)ex020302.htm 3)ex020303.htm 4)ex020304.htm 5)ex020305.htm 6)ex020306.htm 7)ex020307.htm 8)ex020308.htm

9)ex020309.htm 10)ex020310.htm 11)略 第三章CSS 技术 一、判断题 1)错2)对3)错4)对5)错 6)错7)对8)错9)对10)错 11)对12)错13)错14)错15)错 16)错17)错18)对19)对20)错 21)错 二、单选题 1)B 2)B 3)A 4)C 5)B 6)C 7)A 8)B 9)D 10)B 11)D 12)B 13)A 14)B 15)D 16)A 17)B 18)C 19)B 20)D 21)B 22)A 23)D 24)A 三、综合题 1)ex030301.htm 2)ex030302.htm 3)ex030303.htm 4)ex030304.htm 5)ex030305.htm 6)ex030306.htm 7)ex030307.htm 8)ex030308.htm 9)ex030309.htm 10)ex030310.htm 11)ex030311.htm 12)ex030312.htm 13)ex030313.htm 14)ex030314.htm 15)ex030315.htm 16)略 第四章JavaScript 编程基础 一、判断题 1)错JavaScript 是Microsoft公司设计的脚本语言。 2)对JavaScript 既文档中可用于Web客户端应用,也可以用于Web服务器端应用。3)对在HTML文档中通过使用