HTTP协议的利用、动静分离等

上传人:飞*** 文档编号:44430130 上传时间:2018-06-09 格式:DOC 页数:21 大小:548KB
返回 下载 相关 举报
HTTP协议的利用、动静分离等_第1页
第1页 / 共21页
HTTP协议的利用、动静分离等_第2页
第2页 / 共21页
HTTP协议的利用、动静分离等_第3页
第3页 / 共21页
HTTP协议的利用、动静分离等_第4页
第4页 / 共21页
HTTP协议的利用、动静分离等_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《HTTP协议的利用、动静分离等》由会员分享,可在线阅读,更多相关《HTTP协议的利用、动静分离等(21页珍藏版)》请在金锄头文库上搜索。

1、 Web 发发展的速度展的速度让许让许多人多人叹为观叹为观止,止,层层出不出不穷穷的的组组件、技件、技术术,只需要合,只需要合理的理的组组合、恰当的合、恰当的设设置,就可以置,就可以让让 Web 程序性能不断程序性能不断飞跃飞跃。Web 的思想是的思想是通用的,它通用的,它们们也可以运用到也可以运用到 Java Web。这这一系列的文章,将从各个角度,包一系列的文章,将从各个角度,包括前端高性能、反向代理、数据括前端高性能、反向代理、数据库库高性能、高性能、负载负载均衡等等,以均衡等等,以 Java Web 为为背景背景进进行行讲讲述,同述,同时时用用实际实际的工具、的工具、实际实际的数据来的

2、数据来对对比被比被优优化前后的化前后的 Java Web 程序。程序。第一部分第一部分已已经讲经讲解了部分前端解了部分前端优优化,化,该该部分是前端性能部分是前端性能优优化的其化的其他内容,包括他内容,包括 HTTP 协议协议的利用、的利用、动动静分离等等。合理利用静分离等等。合理利用这这些技些技术术将使将使 Web 技技术术更加高效。更加高效。引言引言本文将讲解前端优化里重要的 Flush 机制、动静分离、HTTP 持久连接、 HTTP 协议灵活应用、CDN 等。结合这些技术或思想,相信会使 Java Web 应用程序的性能更上一层楼。Flush 机制的使用机制的使用实际上在 Web 技术中

3、,Flush 机制并不新鲜,它的思想是无需等到网页 内容全部加载完毕,一次性写回客户端,而是可以部分逐次的返回。如果网页 很大的话,一次性写回全部内容显然是个不明智的选择,因为这会造成网页的 长时间空白。Flush 机制允许开发人员将网页的内容按文档流顺序逐步返回给 客户端,这样可以使得用户知道我们的系统正在工作,只是等待的时间稍长而 已,这样用户也会“心甘情愿”的等下去。Flush 机制是一个经典的提高用户体 验的方法,至今也一直在用。如果网页很大,这个机制也是建议使用的。在 Java Web 技术中,实现 Flush 非常简单,只要调用 HttpServletResponse.getWri

4、ter 输出流的 flush 方法,就可以将已经完成加载 的内容写回给客户端。但是是否每个网页都要使用该技术呢?笔者当然不这么建议。将网页内容 加载完毕后再一次性返回客户端也有它的好处。我们知道网络传输也有最大的 传输单元,内容加载完毕后一次性输出就可以最大程度的利用传输的带宽,减 少分块,减少传输次数,也就是说实际上 Flush 机制会增加用户等待时间、增 加浏览器渲染时间,但是对于大网页来说,降低这点效率来增强用户体验,是 值得的。动动静分离静分离所谓的动静分离,就是将 Web 应用程序中静态和动态的内容分别放在不 同的 Web 服务器上,有针对性的处理动态和静态内容,从而达到性能的提升。

5、 本文基于 Java Web 来讲解 Web 优化,而 Java Web 的主流服务器软件是 Tomcat。让人遗憾的是,Tomcat 在并发和静态资源处理的能力上较弱,这也 是 Tomcat 为人诟病的地方。但是瑕不掩瑜,既然我们选择了 Java Web,那 么就应该发挥我们程序员的头脑去想方设法的提高性能。而动静分离就是其中 一种方法,既然 Tomcat 处理静态资源的能力较弱,那就将静态资源的处理任 务交给适合的软件,而让 Tomcat 专注于处理 JSP/Servlet 的请求。对于静态资源处理的服务器软件,我们可以选择 Nginx,它是一款俄罗斯 人开发的软件,似乎比 Apache

6、更加优秀。它支持高并发,对静态资源处理的 能力较强,这正是我们想要的不是吗?事实上,动静分离的方案很多,有人采 用 Apache+Tomcat 的组合;也有人使用 Tomcat+Tomcat 的组合,不过两个 Tomcat 分别被放置于不同的主机,不同的域名。其中 Apache+Tomcat 的方 案与 Nginx 的方案原理上是一样的,它们都是基于反向代理,相对于使用 Nginx 配置动静分离,Apache 的配置就显得略微复杂一些。在 Apache 里, mod_proxy 模块负责反向代理的实现。其中核心配置内容如清单 1 所示,该 配置属于本人参与某项目的其中一部分。清单清单 1. 动

7、静分离的动静分离的 Apache 核心配置核心配置BalancerMember http:/192.168.1.178:8080 loadfactor=1 BalancerMember http:/192.168.1.145:8080 loadfactor=1 NameVirtualHost *:80 ServerAdmin ServerName DocumentRoot /www DirectoryIndex index.shtml AllowOverride All AddType text/html .shtml AddType application/x-rar .rar AddH

8、andler server-parsed .shtml Options +IncludesNOEXEC RewriteEngine on ProxyRequests Off ProxyPass /static/! ProxyPass / balancer:/proxy/ ProxyPassReverse / balancer:/proxy/ ProxyPreserveHost on从 Apache 官方对 mod_proxy 模块的介绍,我们可以知道 ProxyPass 属性可以将一个远端服务器映射到本地服务器的 URL 空间中,也就是说这是 一个地址映射功能。在清单 1 的配置中,当访问的路

9、径不在 /static/ 下时(! 表示非),就转发给后端的服务器(也就是 Tomcat);否则如果是 /static/ 路径就访问本机。例如,当访问 时, 实际处理请求的是 Apache 服务器,而访问 那么 Apache 会将请求转发到后端的 Tomcat 服务器,实际访问的页面是 http:/ 192.168.1.178( 或 145):8080/index.jsp,这就实现了动静分离。在清单 1 的配置中实际也包含了简单的负载均衡(loadfactor 因子)。事实上,我们可以随便打开一个大型门户网站来看一下,我打开的是腾讯 网站,任意查看其中两张图片的地址,我发现一个是: htt

10、p:/ http:/ 图片资源使用了多个的域名,我们再用 Linux 的 host 命令查看两个域名的 IP 地址,结果如图 1 所示。图图 1. 某网站的动静分离某网站的动静分离可以看到,通过查看 IP 地址,我们发现这些图片很可能存放在不同的主 机上(为什么是很可能?因为一个主机可以拥有多个 IP),而图片内容和网页 的动态内容并不在同一 IP 下,也很可能是动静分离。多个域名在前面也已经 提到,可以增加浏览器的并发下载数,提高下载效率。 本文采用另一种策略对动静分离进行演示,它的大致结构如图 2 所示。图图 2. 本文设计的动静分离结构本文设计的动静分离结构在本文中,我们将静态资源放在

11、A 主机的一个目录上,将动态程序放在 B 主机上,同时在 A 上安装 Nginx 并且在 B 上安装 Tomcat。配置 Nginx,当请求的是 html、jpg 等静态资源时,就访问 A 主机上的静态资源目 录;当用户提出动态资源的请求时,则将请求转发到后端的 B 服务器上,交 由 Tomcat 处理,再由 Nginx 将结果返回给请求端。提到这,可能有您会有疑问,动态请求要先访问 A,A 转发访问 B,再由 B 返回结果给 A,A 最后又将结果返回给客户端,这是不是有点多余。初看的确多余,但是这样做至少有 2 点好处。第一,为负载均衡做准备,因为随着系 统的发展壮大,只用一台 B 来处理动

12、态请求显然是是不够的,要有 B1,B2 等等才行。那么基于图 2 的结构,就可以直接扩展 B1,B2,再修改 Nginx 的配置就可以实现 B1 和 B2 的负载均衡。第二,对于程序开发而言,这种结 构的程序撰写和单台主机没有区别。我们假设只用一台 Tomcat 作为服务器, 那么凡是静态资源,如图片、CSS 代码,就需要编写类似这样的访问代码: ,当静态资源过多,需要扩展出其他的服务器 来安放静态资源时,访问这些资源就可能要编写这样的代码:、。可以看到,当服务 器进行变更或扩展时,代码也要随之做出修改,对于程序开发和维护来说非常 困难。而基于上面的结构,程序都只要 ,无需关心具体放置 资源的

13、服务器地址,因为具体的地址 Nginx 为帮您绑定和选择。按照图 2 所示的架构图,安装好需要的软件 Nginx 和 Tomcat。按照设 想,对 Nginx 的配置文件 nginx.conf 进行配置,其中与本文该部分相关的配 置如清单 2 所示。清单清单 2. 动静分离的动静分离的 Nginx 配置配置# 转发的服务器,upstream 为负载均衡做准备upstream tomcat_server server 192.168.1.117:8080; server listen 9090; server_name localhost; index index.html index.htm

14、index.jsp; charset koi8-r; # 静态资源存放目录root /home/wq243221863/Desktop/ROOT; access_log logs/host.access.log main; # 动态请求的转发location .*.jsp$ proxy_pass http:/tomcat_server; proxy_set_header Host $host; # 静态请求直接读取location .*.(gif|jpg|jpeg|png|bmp|swf|css)$ expires 30d; 清单 2 十分简洁,其目的和我们预期的一样,动态的请求(以 .jsp

15、 结尾) 发到 B(192.168.1.117:8080,即 tomcat_server)上,而静态的请求 (gif|jpg 等)则直接访问定义的 root(/home/wq243221863/Desktop/ROOT)目录。这个 root 目录我直接将 其放到 Linux 的桌面 ROOT 文件夹。 接下来在 Tomcat 中新建 Web 项目,很简单,我们只为其添加一个 test.jsp 文件,目录结构如图 3 所示。图图 3. B 上的测试项目结构上的测试项目结构而我们定义了一张测试用的静态图片,放置在 A 的桌面 ROOT/seperate 目录下。结构如图 4 所示图图 4. A 上的静态资源文件夹结构上的静态资源文件夹结构注意:这里的 separate 目录名是与 B 的项目文件夹同名的。 再查看图 3 中的 test.jsp 的源码。如清单 3 所示。清单清单 3. test.jsp 源码源码动静分离的测试这是动态脚本处理的结果这是静态资源的请求结果清单 3 是一个非常简单的 JSP 页面,主要是使用 img 标签来访问 jquery.gif,我们知道 test.jsp 在 B 服务器上,而 jquery.gif

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号