相关概念
静态网页资源
在网站设计中,纯粹HTML格式的网页(可以包含图片、视频、JS、CSS等)被称为静态网页。静态网页是相对于动态网页而言的,是指没有后台数据库、不含动态程序(如php,jsp)和可交互的网页。
静态网页资源的特点
每个页面都有一一个固定的URL地址,并且URL一般以.html、.htm等常见形式为后缀,不含有 ?或 & 等特殊符号
网页内容一经发布到服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器的文件系统上的,都是独立的文件。
网页内容是固定不变的,因此容易被百度等搜索引擎收录。
没有数据库的支持,网站制作和维护方面工作量较大,因此当网站信息量较大时完全依靠静态网页比较困难。
网页的交互性比较差,在程序实现功能方面有比较大的限制。
客户端请求数据时,直接把数据从服务端磁盘文件系统中返回,在浏览器端解析展现出来,因此服务端可以接收更多的并发访问。
动态网页资源
所谓的动态网页一般以.asp、.aspx、.php、.js、.cgi等形式作为后缀,且在动态网页的网址中会有标志性的符号——“?”、”&” ,此外,在大多数情况下后端有需要有数据库支持。
动态网页资源特点
网页后缀名一般为.asp、.aspx、.php、.js、.cgi等形式。
动态网页并不独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并读取数据库返回完整的网页内容。
动态网页中的”?”在搜索引擎的收录方面有一定的问题,因此企业通过搜索引擎进行推广时,一般做一定的技术处理(伪静态技术)
网页一般以数据库技术为基础,大大降低了网站维护的工作量。
采用动态网页技术可以实现更多的功能,比如用户注册、用户登录、在线调查、投票、订单管理等。
程序在服务端进行解析,会消耗大量的CPU、内存、I/O等资源,访问效率远不如静态网页。
有关动态网页的架构思想
一般来说,静态网页的性能效率时动态网页的10~30倍。且动态网站效率很差,并发能力也很低,在高并发场景中,应尽量转换成静态网页提供服务,动态转静态几乎是所有高并发网站必备的架构方案思路,也是高级架构师职责所在。
此外,动态转静态也需要根据业务需求来设计,对于频繁更新的网站,如果设计的不好有可能产生数据不一致的情况,即用户看到的数据不是网站最新的内容,而是静态的内容。
大规模门户网站集群实现异步静态化架构图例
动静分离
提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片、js、css等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。对于用户请求的动态文件,如servlet、jsp,则转发给Tomcat,Jboss服务器处理,这就是动静分离。即实现动态请求与静态请求的分离,同时也将动态文件与静态文件进行分离,减少不必要的请求消耗,减少请求延时,分离之后,即使动态服务不可用,静态服务也不会受影响。
动静分离原理
动静分离可通过location对请求url进行匹配,将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。以Tomcat为例,通常将静态资源放到nginx中,动态资源转发到Tomcat服务器中。
部署动静分离
环境准备
主机 |
IP |
角色 |
备注 |
lb01 |
192.168.110.135 |
负载均衡服务器 |
前端代理,同时缓存css等静态文件 |
nginx02 |
192.168.110.137 |
Nginx 静态服务器 |
处理html,图片、js等静态文件请求 |
nginx03 |
192.168.110.139 |
Nginx 动态服务器 |
处理jsp、servlet等动态请求 |
负载均衡服务器配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| vim /etc/nginx/conf.d/dss.conf
upstream static_server { server 192.168.110.137:80; } upstream tomcat_server { server 192.168.110.139:8080; }
server { listen 80; server_name dss.com; access_log /var/log/nginx/dss.access.log main; error_log /var/log/nginx/dss.error.log warn; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; location / { proxy_pass http://static_server; } location ~ .*\.(css)$ { root /usr/share/nginx/dss; } location ~ .*\.(htm|html|gif|jpg|jpeg|png|gif|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|js) { proxy_pass http://static_server; expires 5d; }
location ~ .*\.jsp$ { proxy_pass http://tomcat_server; expires 1h; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
|
静态站点配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| vim /etc/nginx/conf.d/static.conf
server { listen 80; server_name dss.com; access_log /var/log/nginx/staticrs.access.log main; error_log /var/log/nginx/staticrs.error.log warn; location / { root /usr/share/nginx/static; index index.html; } }
|
动态站点配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| vim /etc/nginx/conf.d/dynamic.conf
server { listen 80; server_name dss.com; access_log /var/log/nginx/staticrs.access.log main; error_log /var/log/nginx/staticrs.error.log warn; location / { root /usr/share/tomcat/webapps/ROOT/dynamic; index index.html; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <HTML> <HEAD> <TITLE>JSP Test Page</TITLE> </HEAD>
<BODY> <% Random rand = new Random(); out.println("<h1>随机数:<h1>"); out.println(rand.nextInt(99)+100); %> </BODY> </HTML>
|
测试访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
<html lang="en"> <head> <meta charset="UTF-8" /> <title>测试动静分离</title> <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script> </head> <script type="text/javascript"> $(document).ready(function(){ $.ajax({ type: "GET", url: "http://ds.com/java_test.jsp", success: function(data) { $("#get_data").html(data) }, error: function() { alert("fail!!,请刷新再试"); } }); }); </script> <body> 测试动静分离 上面为静态图片,下面为动态页面 <img src="http://ds.com/nginx.png"> <div id="get_data"></div> </body> </html>
|