web服务基础概念

web服务重要基础 1

一、 域 2

1. 域的分类 2

2. 域名服务器划分的类型。 2

3. DNS 数据库中包含的资源记录 (RR) 2

4. DNS解析原理流程 2

二、 用户访问网站的基本流程 3

三、 HTTP协议 3

1. HTTP协议简介 3

2. HTTP协议版本 4

3. HTTP/1.1与HTTP/1.0的区别 4

4. HTTP请求方法 4

5. HTTP状态码 5

6. 生产环境常见的HTTP状态码列表 5

7. http报文 6

8. HTTP通信基本原理请求及响应报文画图剖析 6

9. http协议请求的工作流程原理步骤 6

四、 http资源 7

1. 媒体(MIME)类型 7

2. URL介绍 8

3. URI介绍 8

4. 静态网页资源 8

5. 动态网页的基本概述 9

6. 伪静态网页 10

7. 生产Web架构优化实战方案 11

五、 网站流量度量术语 12

1. IP-Internet Protocal 12

2. PV-Page View 12

3. UV-Unique Vistor 12

4. 企业网站对PV/IP/UV的度量 12

5. UV的度量 12

6. 其他网站常见术语 13

7. 并发连接 13

8. 常见企业网站排名及PV/IP访问量 13

9. 有关网站度量linux企业运维常见面试题 15

六、 www软件服务介绍 15

1. www软件全球使用排行参考 15

2. 当前互联网主流web服务说明 15

七、 Nginx和Apache的区别 17

1. apache 相对于nginx 的优点: 17

2. nginx相对于apache的优点: 17

web服务重要基础

域的分类

域名只是逻辑概念,并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:

国家顶级域名nTLD:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。

通用顶级域名gTLD:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。

基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。

域名服务器划分的类型。

根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询

顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。

权限域名服务器:负责一个“区”的域名服务器。

本地域名服务器:本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

DNS 数据库中包含的资源记录 (RR)

A (host),即是A记录,也称为主机记录,是DNS名称到IP地址的映射,用于正向解析。

CNAME:CNAME记录,也是别名记录,用于定义A记录的别名

MX (mail exchange): 邮件交换器记录,用于告知邮件服务器进程将邮件发送到指定的另一台邮件服务器。(该服务器知道如何将邮件传送到最终目的地)。

PTR:是IP地址到DNS名称的映射,用于反向解析。

SOA:用于一个区域的开始,SOA记录后的所有信息均是用于控制这个区域的,每个区域数据库文件都必须包谷一个SOA记录,并且必须是其中的第一个资源记录,用以标识DNS服务器管理的起始位置,SOA说明能解析这个区域的dns服务器中哪个是主服务器。

DNS解析原理流程

假定想访问www.baidu.com。下面是的几个查询步骤:

    1. 主机先查询本地DNS缓存及hosts文件是否有域名对应IP地址,,如果有,就先调用这个IP地址映射,完成域名解析。
    2. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性;如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
    3. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责.com域名解析的顶级域名服务器的一个IP。
    4. 这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个负责.baidu.com域名解析的权限DNS服务器地址给本地DNS服务器
    5. 本地域名服务器然后向权限域名服务器dns.baidu.com进行查询。权限域名服务器dns.baidu.com告诉本地域名服务器所查询的域名的IP地址。本地域名服务器最后把查询结果告诉本地主机。完成访问过程

C:\Users\Administrator\Desktop\20140507124241312.png

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

用户访问网站的基本流程

  1. 当用户在浏览器中输入网址后,根据上面的DNS解析原理获取网站的IP地址;
  2. 然后本地主机通过IP地址和端口与服务器端建立一个socket连接,(一般默认端口是80);
  3. 请求连接成功建立后,开始向web服务器发送请求获取文件,这个请求一般是GET或POST命令;
  4. 应答 web服务器收到这个请求,进行处理。从它的文档空间中搜索该文件,如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器;
  5. 当应答结束后,Web浏览器与Web服务器必须断开

HTTP协议

  1. HTTP协议简介

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,它是互联网中最常用的一种网络协议,HTTP的重要应用就是WWW服务,HTTP协议的WWW服务应用的默认服务端口为80,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议

WWW是环球信息网的缩写,(亦作“Web”、“WWW”、“W3”,英文全称为“World Wide Web”),中文名字为“万维网”,"环球网"等,常简称为Web。WWW可以让Web客户端(常用浏览器)访问浏览Web服务器上的页面。

HTTP协议版本

HTTP/1.0介绍

HTTP/1.0介绍是第一个得到广泛使用的HTTP版本。HTTP/1.0在HTTP/0.9的基础上增加了HTTP请求头、支持更多的请求方法,以及对多媒体对象的处理。HTTP/1.0使得包含生动图片的Web页面和交互式表格成为可能,这些页面和表格促使互联网为人们广泛得接收。HTTP/1.0规定浏览器与服务器只能保持短暂的连接,浏览器的每次请求都需要与服务端建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

HTTP/1.1介绍

HTTP/1.1重点是修复HTTP设计中的缺陷,从可扩展性,缓存处理,带宽优化,持久连接,HOST头,错误通知,消息传递,内容协商几个方面做了相关改进。HTTP是当前互联网主流的HTTP版本

在连接方面,HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立连接和关闭连接的消耗和有延迟。

在请求头方面,HTTP1.1增加更多的请求头和响应头信息,来增强HTTP功能。这使得WeB浏览器可以使用主机头名来明确表示要访问那个WEB站点,这样就可以使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。

HTTP1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接;HTTP1.1还提供了与身份认证,状态管理和Cache缓存机制相关的请求头和响应头。

HTTP/1.1与HTTP/1.0的区别

可扩展性;缓存;带宽优化;长连接;消息传递;Host头域;错误提示;内容协商

详细信息见http://blog.csdn.net/forgotaboutgirl/article/details/6936982

HTTP请求方法

GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据

HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。

POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成

OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

HTTP状态码

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。所有状态码的第一个数字代表了响应的五种状态之一:

1xx:消息。代表请求已被接受,需要继续处理

2xx:成功。这一类型的状态码,代表请求已成功被服务器接收、理解、并接受

3xx:重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

4xx:请求错误。这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

5xx:服务器错误。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体

生产环境常见的HTTP状态码列表

200 - OK,服务器成功返回网页

- Standard response for successful HTTP requests.

301 - Moved Permanently(永久跳转),请求的网页已永久跳转到新位置。

- This and all future requests should be directed to the given.

403 - Forbidden(禁止访问),服务器拒绝请求

- forbidden request (matches a deny filter) => HTTP 403

- The request was a legal request, but the server is refusing to respond to it.

404 - Not Found,服务器找不到请求的页面。

- The requested resource could not be found but may be available again in the future.

500 - Internal Server Error(内部服务器错误)

- internal error in haproxy => HTTP 500

- A generic error message, given when no more specific message is suitable.

502 - Bad Gateway(坏的网关),一般是网关服务器请求后端服务时,后端服务没有按照http协议正确返回结果。一般为代理服务器下面的节点出现问题导致

- the server returned an invalid or incomplete response => HTTP 502

- The server was acting as a gateway or proxy and received an invalid response from the upstream server.

503 - Service Unavailable(服务当前不可用),可能因为超载或停机维护。

- no server was available to handle the request => HTTP 503

- The server is currently unavailable (because it is overloaded or down for maintenance).

504 - Gateway Timeout(网关超时),一般是网关服务器请求后端服务时,后端服务没有在特定的时间内完成服务。一般是服务器过载超时

- the server failed to reply in time => HTTP 504

- The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.

可以通过curl命令附带相关参数查看

例如:curl -I -s -w %{http_code} -o /dev.null www.bu.com

http报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:一种是从web客户端发往web服务端的请求报文,而另一个是从web服务器端发往web客户端的响应报文

HTTP请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成

请求行:由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。

请求头部:由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

空行:发送回车符和换行符,通知服务器以下不再有请求头。

请求数据:不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length

HTTP响应报文

一个HTTP响应报文由响应起始行(request line)、响应头部(header)、空行和响应数据4个部分组成

HTTP响应报文的每部分格式基本同HTTP请求报文

响应起始行由协议版本号、数字状态码、状态信息组成

HTTP通信基本原理请求及响应报文画图剖析

http协议请求的工作流程原理步骤

终端客户端在web浏览器地址栏输入访问地址http://www.etiantian.org/index.html

web浏览器请求DNS服务器把域名http://www.etiantian.org解析成web服务器的IP地址,此处的解析过程就是DNS解析的原理流程,这里不再累述。

web浏览器通过解析后的IP地址及端口号与web服务器之间建立一条TCP连接

建立连接后,web浏览器向web服务器发送一条HTTP报文请求,请求报文内容格式及信息细节这里不再累述

web服务器读取浏览器的请求信息,并返回一条HTTP响应报文,响应报文内容格式及信息细节这里不再累述

客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开http连接,断开TCP连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

上述就是HTTP协议通信原理过程,整个通信原理的重要知识点有:

用户访问网站的流程

DNS解析流程细节

建立TCP连接发送HTTP报文的过程

HTTP请求报文的细节

HTTP响应报文的细节

web服务器请求后端集群存储的细节(此处后文会讲到)

结论:DNS解析原理,htt协议原理是高薪面试的重点,高级运维必会知识

老男孩推荐书籍:《http权威指南》、《TCP/IP协议》卷一

http资源

  1. 媒体(MIME)类型

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

当Web服务器响应HTTP请求时,会为每一个HTTP对象数据加一个MIME类型。当浏览器获取到服务器返回到的对象时,会去查看相关的MIME类型,进行相应处理

MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。下表为生产场景最常见的MIME类型

可以从www重要服务软件Nginx的配置文件conf目录下,查看其支持的媒体(MIME)类型,

URL介绍

URL : 统一资源定位符 (Uniform Resource Locator, URL),也被称为网页地址

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名

URL的一般语法格式为:protocol :// hostname[:port] / path / [;parameters][?query]#fragment

protocol(协议):file、ftp、https、mailto、MMS等。

hostname(主机名):是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址

port(端口号):各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。

path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址

parameters(参数):这是用于指定特殊参数的可选项。

query(查询):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP、NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

fragment(信息片断):字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

URI介绍

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源,而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。

URL是URI的子集

静态网页资源

静态页面的最大的优点是速度快,可以跨平台,跨服务器,在早期网站建设大多都是静态页面制作的,静态的网址就是以.htm、.html等为后缀的,在这种静态网站上也可以由动态效果,像滚动字幕,GIF格式的动画,或是FLASH,这些视觉上的动态效果并不就是动态页面,他们是截然不同的概念,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件等。所谓静态网页就是说网页文件中没有程序,只有HTML代码,一般以.html或.htm为后缀名的网页,静态网站内容不会在制作完成后发生变化,每次更改网站上面的内容都要人工修改代码,然后再上传到服务器上,在不更改的情况下任何人访问都显示的一样的内容。

运行于客户端的程序、网页、插件、组件,属于静态网页,例如 html 页、Flash、JavaScript、VBScript等等,它们是永远不变的。

以静态网页为主的网站最大的困难在于对网页的管理,在这种框架里,网页框架和网页中的内容混杂在一起,很大程度地加大了内容管理的难度。为了减轻这种管理的成本,发展出了一系列的技术,在笔者的理解中,甚至连css本身,原本也是针对这种乱七八糟的网页维护而设计的,目的就是把网页表达的框架和内容本身抽象分离出来

静态网页的特点

静态网页每个网页都有一个固定的URL,且网页URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”;

网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;

静态网页的内容相对稳定,因此容易被搜索引擎检索

静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;

静态网页的交互性交叉,在功能方面有较大的限制。

优势与劣势

优势:A、 对搜索引擎友好,被收录的质量高;B、访问速度快;C、资源(cpu 等)占用少。

劣势:A、对于大型门户,或者社区来说,不断的修改将会产生大量I/O,会导致磁盘出现碎片甚至出现磁盘坏道。相当恐怖一个隐患。用户信息一旦没有了就没戏玩了。B、储存空间占用会多一些。

有关静态网页架构思想

高并发高访问量的场景,做架构优化,关键的节点:就是把动态网页转成静态网页,不直接请求数据库和动态服务器,并且可以把静态内容推送到前段缓存中提供服务可以提供用户体验,节约服务器和维护成本

动态网页的基本概述

动态网页是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”或&符。动态网页与网页上的各种动画、滚动字幕等视觉上的“动态效果”没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页.动态网站也可以采用静动结合的原则,适合采用动态网页的地方用动态网页,如果必要使用静态网页,则可以考虑用静态网页的方法来实现,在同一个网站上,动态网页内容和静态网页内容同时存在也是很常见的事情。

动态网页特色

交互性:即网页会根据用户的要求和选择而动态改变和响应。例如访问者在网页填写表单信息并提交,服务器经过处理将信息自动存储到后台数据库中,并打开相应提示页面。

自动更新:即无需手动操作,便会自动生成新的页面,可以大大节省工作量。例如,在论坛中发布信息,后台服务器将自动生成新的网页。

随机性:即当不问的时间、不问的人访问同一网址时会产生不同的页面效果。例如,登录界面自动循环功能。

动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求

程序在服务端解析,服务端如:php引擎,Java容器(tomcat,resin,jboss),耗时长,效率低,会消耗大量的CPU和内存等资源并且多数还要读取数据库等服务,因此,效率远不如静态网页

有关动态网页架构思想

一般来说,静态网页的效率是动态网页的10-30倍

动态网站效率很差,并发能力也很低,高并发场景中,尽可能换成静态网页提供服务

动态转静态也要根据业务需求设计。例如,对于更新频繁的网站会产生数据不一致的情况,即用户看到的内容不会是最新的内容

动态转静态,高并发网站必备的架构方案,是高级架构师的职责所在

优势与劣势

优势:相对于静态,它的劣势也就是动态的优势所在——占用空间少,对硬盘友好。

劣势:A、对搜索引擎不友好。搜索引擎会不收录带问号的网址?因为搜索引擎怕由于问号而进入死循环。详细可见另外一篇札记(学习札记——网页搜索基础知识 )

B、高并发时资源占用较多。

注意事项

静态网页和动态网页各有特点,网站采用动态网页还是静态网页主要取决于网站的功能需求和网站内容的多少,如果网站功能比较简单,内容更新量不是很大,采用纯静态网页的方式会更简单,如果网站功能复杂的话最好采用动态网页技术来实现

伪静态网页

伪静态即是网站本身是动态网页如.php、.asp、.aspx等格式动态网页有时这类动态网页还跟“?”加参数来读取数据库内不同资料。很典型的案例即是discuz论坛系统,后台就有一个设置伪静态功能,开启伪静态后,动态网页即被转换重写成静态网页类型页面,通过浏览器访问地址和真的静态页面没区别。前提服务器支持伪静态重写URL Rewrite功能。

优点:静态的优点+动态的优点:由于搜索引擎无法正确读取带参数的动态网页,造成网页中很多具有丰富信息的页面无法被搜索引擎收录,伪静态技术的作用是把动态URL改写成静态网页的URL,同样是消除了动态网页的参数,但是并不需要生成任何网页,仅仅是改变了网页地址路径,这样做的主要目的有两个:一是让搜索引擎收录网站内容让更多的用户访问网站内容,二是提升用户访问体验,动态带的特殊符号等的URL看起来不如静态网页舒服

不足:流量稍大一些使用伪静态就出现CPU使用超负荷,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病.

实现机制:是利用服务器端,对请求的动态页面做改动,让浏览器认为访问的也是静态页面,这个时候,浏览器地址栏中显示的就是静态地址信息(不带问号)了

两种实现方法:

1、使用ISAPI_Rewrite进行动态链接重写HTML静态网址。ISAPI_Rewrite是一个dll组件,re_write是iis里的一个模块。这个筛选器实现是通过正则表达式,将动态网页网址映射成为静态网址。如可将news.asp?id=95通过re_write将其转换成news/95.html。映射的正则表达式在httpd.ini文件里进行设置。

举个小小例:处理数据翻页,那么写法是:

More_<%=Page%>_<%=type%>.html (注:page是翻页页数,type是数据类型)表现形式:More_1_95.html

如果翻下一页,则为:More_2_95.html,继续下一页的循环,则是:

More_3_95.html,以此类推。

不过你需要在httpd.ini文件中增加以下代码:

RewriteRule /More_(\d+)_(\d+)\.html /jsp/more\.asp\?page=$1&type=$2 [N,I]字串

如果你的动态程序有多个参数需要传递,那么就增加多个(\d+)即可,如下:

RewriteRule /More_(\d+)_(\d+)_(\d+)\.html /asp/more\.asp\?page=$1&type=$2&type2=$3 [N,I]

优点:在程序上基本不需做什么变化。麻烦:要实现这个需要对iis进行控制,所以当你租用别人的服务器时,则需要先跟服务商联系。(当然这个是对asp而言,asp.net就不用——直接将dll程序集放到程序中的bin再适当的配置即可实现)

2、IIS的404错误处理机制:通过自定义错误,转向我们准备好的处理页。不过这种可拓展性有待研究,对程序处理的统筹要求也高,不大适合实际应用的样子。

首先,设置站点属性-自定意错误

找到HTTP错误404,然后编辑属性->消息类型选中URL->URL填入“/index.asp”,或您的错误处理页面.

这样,比如用户或蜘蛛访问http://tech.todo.net.cn/12345.html 时(12345为文章在数据库的ID).由于些页面不存在,所以触发了404错误.转向了index.asp

在index.asp里加

CurrDomain=Request.ServerVariables("HTTP_HOST") '当前访问域名

CurrURL=Replace(Request.ServerVariables("QUERY_STRING"),"404;http://"&CurrDomain&":80","") '当前访问URL

此时的CurrURL应该是:12345.html .

这样,就得到用户正在试图访问的页面.然后提取里边的文章ID(应该为:12345),用正则,这里就不多说了.

然后到数据库里提取出文章内容.输出到页面里,就OK了.

结论:伪静态太适合用在普通的企业网站上了——既不要求高并发,但同时又很在乎seo(搜索引擎优化),而且也要求后台可动态更新。——当然实现直接生成静态页也行,因为这种不像社区那种修改量那么大。因为伪静态网页还是动态网页,从性能上考虑,伪静态功能不但没有提升网站性能,反而会降低网站的性能

伪静态网页的实现过程,一般是由运营产品提出需求,开发和运维共同实现

课后作业:当部署完开源站点discuz bbs和wordpress blog程序后,请把这两个网站做成伪静态访问。提示:各自官方文档有说明。

生产Web架构优化实战方案

由于静态网页程序在客户端解析,大大降低了服务器端的访问压力,因此解析效率更高,在实际高并发网站架构中,我们可以把用户请求的数据解析后存成静态文件放于磁盘中或防于内存中,来降低服务器的压力,节约企业成本,提升用户体验,

浅谈千万级PV/IP规模高性能高并发网站架构http://oldboy.blog.51cto.com/2561410/736710

高并发网站架构从动态转静态不用业务产品实现的例子

门户新闻业务

新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此对于新闻的业务内容静态化相对比较简单

第一步:程序发布内容直接转成静态

第二部:运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件

第三部:运维人员通过发布出发把生成的静态网页发布到实现搭建好的公司缓存集群服务器上,或者把静态内容同步到购买的全国所有CDN服务器节点上,然后,在提供给用户提供访问浏览。

视频网站业务(一旦发布完成,几乎不会再改动)

优酷视频网,用户上传视频,需要经历审核-转码的过程,大概1-2个小时,审核-转码-推送(同步到购买的全国所有CDN服务器节点)

注意:blog/bbs/sns/微博社区业务/电商(淘宝,京东)(用户发布完成,可能会随时更新)

异步方式,消息中间件、消息队列

HTTPS协议

  1. https协议建立流程

客户端发起请求(携带秘钥算法套件)

服务器端收到后查看算法套件如果支持则选出一种加密算法和hash算法,并返回(加密算法、hash算法、公钥)

客户端验证证书合法性;生成随机密码;返回信息:【公钥加密(随机密码)+ 加密算法(握手消息+随机数密码) + hash算法(握手消息)】

服务端:私钥解密出随机数密码;握手消息密文+随机数密码-->解密出握手消息;计算握手消息hash值并对比

利用随机密码通信

网站流量度量术语

  1. IP-Internet Protocal

IP(独立IP):即Internet Protocal,这里指独立IP数,独立IP数是指不同IP地址的计算机访问网站的被计算的总次数。一般00:00-24:00内相同IP地址只被计算一次,记录独立IP的时间可为一天活一个月。目前通用的标准为“一天”。

PV-Page View

PV(访问量):即Page View,页面浏览量或点击量,不管客户端是不是相同,也不管IP是否相同,用户每访问一个网站页面都会被计算一个PV。PV的具体度量方法就是从客户端浏览器发出一个对web服务器的请求,web服务器连接到这个请求后,将该请求对应的一个网页发给浏览器,就产生了一个PV,一般为了防止用户快速刷PV,很多网站把PV的统计程序放在页面的最下面。

UV-Unique Vistor

UV(独立访客):即Unique Vistor,同一台客户端访问网站被计算为一个访客。一天00:00-24:00内相同的客户端访问同一个网站只被计算一次UV。UV一般是以客户端Cookie等技术作为统计依据的世纪同机会有误差

企业网站对PV/IP/UV的度量

IP的度量

分析所有Web服务器的访问日志,对IP地址段去重后计数,这是IT人员的基本计算手段

在网站的每一个页面结尾嵌入js等统计程序代码,当用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或者企业内部开发日志分析程序时使用

用第三方大家比较信任的统计工具例如:谷歌的统计(GA)

IP的统计方法简单、易用,因此成为了多数网站衡量网站流量的重要指标之一

PV的度量

分析web服务器的访问日志(需要排除js,css等各种图片的日志信息),只计算HTML,PHP等页面URL

在网站的每一个页面结尾,嵌入js等统计程序代码,当用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或者企业内部开发日志分析程序时使用

用第三方大家比较信任的统计工具例如:谷歌的统计(GA)

PV的统计方法也简单、易用,因此成为了多数网站衡量网站流量的重要指标之一

老男孩提示:IP和PV也是linux运维人员要掌握的重点

面试题:统计网站某一段时间所有IP对应的PV数排序,前十

UV的度量

  1. 通过客户端HTTP请求报文分析

一个客户端会多次请求网站服务器,每次HTTP请求都会携带客户端自身的大量信息,比如:IP地址,请求发出时间,浏览器版本,操作系统版本等等,网站服务器对这些请求进行分析,如果这些请求满足一些共同特征,比如来自同一个IP地址,且浏览器版本,操作系统版本相同,请求时间又相近等等,如果满足这一系列定义,那么就可以认为这些请求是来自同一个客户端,那么多个页面访问也只能算一个UV。共同特征的定义是由服务器方决定的。通常用IP地址+其他特征共同定义的情况较多。此种度量方法无法度量以下问题:

多个人的电脑软硬件经常雷同,并且是一个公司或者学校的人

多人共用一台电脑的情况

通过Cookie鉴别

当客户端第一次访问某个网站服务器的时候,网站服务器会给这个客户端的电脑发出一个Cookie,通常放在这个客户端的C盘当中。在这个Cookie中会分配一个独一无二的编号,这其中会记录一些访问服务器的信息,如访问时间,访问了哪些页面等等。当你下次再访问这个服务器的时候,服务器就可以直接从你的电脑中找到上一次放进去的Cookie文件,并且对其及进行一些更新,但那个独一无二的编号是不会变的。如果在一定时间内,服务器发现有两个来访者对应的是一个编号,那么我们自然可以认为这个来源于同一个来访者了,就计算1个UV

使用Cookie的方法要比分析客户端HTTP请求头部信息更精确些。但也存在一些问题,比如:有的客户端为保证客户端更高级别的安全,关闭了Cookie功能;或者有些客户端设置了在退出页面时自动删除Cookie,亦或你经常自己动手清理Cookie,那么这个方法就不精确了。

其他网站常见术语

最高IP : 指选择时间段范围内,某日访问IP最多的数值。

最高PV:指选择时间段范围内,某日访问量最高的数值。

日均流量:指选择时间范围内,平均每日流量。 (日均流量=总访问量/总天数)

人均访问量:指选择时间范围内,每个访客访问网站的PV数。(计算公式:人均访问量=访问量/唯一访客数)。

访问过程:每个访问者从进入您的网站开始访问,一直到最后离开您的网站,整个过程中发生的一切点击访问行为,称为一次访问过程。

访问入口:每次访问过程中,用户进入的第一个页面为访问入口页面。

访问出口:每次访问过程中,用户结束访问,离开前点击的最后一个页面为访问出口页面。

平均停留时间:所有访客的访问过程,访问持续时间的平均值。

平均访问页数:所有访客的访问过程,连续访问页面数的平均值。

贡献用户数:每个访问来源带来的独立访客数,即UV数;

贡献IP数:每个访问来源带来的独立IP数。

贡献PV数:每个访问来源带来的访客的一切后续访问行为所产生的PV数。

并发连接

下面有是网络上的一些说法

网站服务器每秒能够接受的最大用户请求数

网站服务器每秒能够响应的最大用户请求数

网站服务器在单位时间能够处理的最大连接数

对于网站服务器来说,所谓的并发就是单位时间内服务器能够处理的最大连接数

其他服务并发连接

QPS每秒查询率(Query Per Second)

每秒查询率QPS是对一个特定的查询服务器在规定的时间内所处理流量多少的衡量标准,运维工作中,DNS系统以及数据库等服务的查询性能经常用每秒查询率来衡量

IOPS(Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能

常见企业网站排名及PV/IP访问量

提示:以上数据来自第三方http://alexa.chinaz.com/alexa_more.aspx网站数据,仅供参考,不同的统计程序差别也很大,有一定误差,实际访问量要比此表大,具体的误差和chinaz.com的统计方法有关,后面的最大并发以及机器数量级别为作者根据访问量及业务类型估算而来,对初学者是个参考

C:\Users\Administrator\Desktop\QQ截图20160301200616.png

30万左右IP(都使用CDN),百万左右PV,并发2000左右,服务器数量10台左右

C:\Users\Administrator\Desktop\QQ截图20160302183547.png

百万左右IP(都使用CDN),七百万左右PV,并发20000左右,服务器数量80台左右

有关网站度量linux企业运维常见面试题

  1. 请问你们如何理解并发

你们公司网站的访问量是多少?是怎么计算的

老男孩的学生一定要回答:IP,PV,并发量3个点,这三个点的多少决定面试时说多大的架构,不能说几万PV,还说十台的集群架构,这样就乌龙了

访问量的计算:

运维部分日志分析

开发在页面嵌入JS程序统计

运营市场通过第三方提供的统计工具程序统计,例如:GA统计

www软件服务介绍

  1. www软件全球使用排行参考

上述数据来自http://w3techs.com/technologies/overview/web_server/all整理

通过上述趋势变化,不难发现,Apache虽然份额最大,但是有逐年下降趋势,而这个后起之秀Nginx上升趋势显著,另外,Nginx的分支Tengine也从看不见身影,逐渐占有一定份额了

当前互联网主流web服务说明

  1. 常用来提供静态Web服务的软件:

apache 中小型静态web服务的主流,web服务器中的老大哥

nginx 大型新兴网站静态web服务主流,web服务器中的初生牛犊

lighttpd 静态web服务不温不火,逐渐被淘汰的意味,社区不活跃,静态解析效率很高

常用来提供动态服务的软件

IIS(Internet information services) 微软的WEB服务器(asp,aspx)

tomcat #中小型企业动态web服务主流,互联网java容器主流(jsp,do)

resin #大型动态web服务主流,互联网java容器主流(jsp,do)

php(fcgi) #大中小网站,php程序的解析容器

配合apache,php不是守护进程,而是mod_php5.so(module)

配合nginx,lighttpd,php守护进程模式,FCGI模式

www静态程序服务软件apache

apache version

1.3 系列;2.0 系列;2.2 系列;2.4 系列,目前主流2.2 系列,正在向2.4 系列过度阶段。建议读者当下使用2.2 系列。

apache官网:http://apache.org

www静态程序服务软件nginx

Nginx版本只有一个系列,但是版本更新很快,目前的最新稳定版为1.6.2

nginx官网:http://nginx.org/

www动态程序服务软件resin

Resin官方号称是世界上最快的Web服务,是大型动态Web服务主流,互联网java程序的解析容器,目前企业使用较多的是3.1系列,正在向4.0过渡

resin官方地址:

http://www.caucho.com/download/

http://caucho.com/resin-3.1/doc/

http://caucho.com/resin/doc/install-apache.xtp

www动态程序服务软件tomcat

Tomcat一直是中小型企业动态Web服务的主流,常用来作为解析java程序,其版本变化如下表

Tomcat官网地址:

http://tomcat.apache.org/whichversion.html

http://tomcat.apache.org

www动态程序服务软件PHP

PHP软件是大中小型网站程序前台页面开发的首选,存世开源软件众多,也是中小企业网站开发的首选,它是动态网页语言php程序的解释器。PHP的版本系统、列有5.2,5.3,5.4,5.5,5.6,其中最经典的版本为5.2系列

php提供解析的方式,配合Apache解析动态程序,是mod_php5.so(module)模块的方式,配合nginx解析动态程序,常用Fastcgi守护进程模式提供服务

官方网站:http://php.net/

Nginx和Apache的区别

  1. apache 相对于nginx 的优点:

rewrite ,比nginx 的rewrite 强大

动态页面,nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。

模块超多,基本想到的都可以找到

少bug ,nginx 的bug 相对较多超稳定

nginx相对于apache的优点:

轻量级,同样起web 服务,比apache占用更少的内存及资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 这归功于Nginx为我们选择了 epoll and kqueue 作为开发模型.

抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

高度模块化的设计,编写模块相对简单

社区活跃,各种高性能模块出品迅速啊

Nginx本身就是一个反向代理服务器

负载均衡能力突出,Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.

核心区别:apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。

先说Select:

Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.

操作限制:通过遍历FD_SETSIZE个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍(这就是apache慢的原因).

再说Epoll:

Socket数量无限制:操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询(这当然是nginx快的原因啦).

原理部分小编觉得读者知道这些就够了,起码当别人问起你选择上述二者之一的理由你已经够应付啦,当然小编还给你推荐一种折中的方案,nginx做前端,apache做后端啦

服务器技术交流群请加微信 YJZyjz