web 服务基础
用户通过网站访问浏览器都发生了什么
如图,用户请求www.joker.com发生
1. 用户访问网站流程框架
2. dns解析原理
3. tcp/ip三次握手过程原理
4. http协议原理(www服务的请求过程),请求报文细节
5. 大规模网站集群架构细节
6. http协议原理(www服务的响应过程),响应报文细节
7. tcp/ip四次挥手过程原理
DNS 解析
根服务器 世界13台
dns domain name system
主要作用是负责把网站域名解析为对应的ip地址
1. 从域名到ip的解析过程,叫作A记录
2. CNSAME别名记录,这个别名解析功能常被CDN加速服务商应用
我们在访问www.joker.com这个域名的时候,dns是如何将域名解析成ip的呢
第一 二步是ldns解析,如果本地没有缓存
第三步 将从dns系统的.根开始请求www.joker.com域名的解析,根服务器下面是没有www.joker.com域名解析记录的,但是根下面有www.joker.com对应的顶级域.com的解析记录,因此,根会把.com对应的dns服务器地址返回给ldns
第四步 ldns获取到.com对应的dns服务器地址后,就会去.com服务器请求www.joker.com域名的解析,而.com服务器下面也没有www.joker.com域名对应的解析记录,但是有joker.com的解析记录,因此,.com服务器会把joker.com对应的dns服务器地址返回给ldns
第五步 ldns获取到joker.com对应的dns服务器地址后,就会去joker.com服务器请求对www.joker.com域名的解析,joker.com域名对应的dns服务器是该域名的授权dns服务器,这个dns服务器正是企业购买域名时用于管理解析的服务器
第六步 joker.com域名,dns服务器会把www.joker.com对应的ip解析记录发给ldns
第七步 ldns把来自授权dns服务器的与www.joker.com对应的ip解析记录发给客户端浏览器,并且ldns会在本地把域名和ip的对应解析记录缓存起来
dns解析命令
dig hosts nslookup 需要安装 yum install bind-utils
[root@Poppy ~]# dig +trace www.joker.com ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> +trace www.joker.com ;; global options: +cmd . 170865 IN NS l.root-servers.net. . 170865 IN NS f.root-servers.net. . 170865 IN NS j.root-servers.net. . 170865 IN NS a.root-servers.net. . 170865 IN NS m.root-servers.net. . 170865 IN NS h.root-servers.net. . 170865 IN NS i.root-servers.net. . 170865 IN NS k.root-servers.net. . 170865 IN NS d.root-servers.net. . 170865 IN NS g.root-servers.net. . 170865 IN NS c.root-servers.net. . 170865 IN NS e.root-servers.net. . 170865 IN NS b.root-servers.net. . 491827 IN RRSIG NS 8 0 518400 20180703170000 20180620160000 39570 . AWoVbG/68+WWYALHuMhz2e4r9QJf2+uSy6FOBLqHSdpof+KbuoCH/W/U sQgM5za3F0fxC/at9VwTTq32tmIuwl8v5/V5YaLa24zijdpJRmPoI3UT yp5DiUM0kj+qHhKHR7f17Mrptaoa1Ld1GkZgUQzgZvb7UftiznOM+l3U m8sOOcL5EKKqQ5VtTfLn2WUPZDp8weKzG55EF7tNCpnoNJORDl4H/tmA K23umiyYPBiHqxcIZ1PDRUrFwJuNUX4+iJPg4a1lAjUp5MjFG6DQzHpr NA+KR7Xb0FAWU9FiFF9ZqyYT7oKR2qwIu26zEd6hCYKWFEUdJgSbAsc4 W+m5Tw== ;; Received 525 bytes from 100.100.2.136#53(100.100.2.136) in 42 ms org. 172800 IN NS a0.org.afilias-nst.info. org. 172800 IN NS a2.org.afilias-nst.info. org. 172800 IN NS b0.org.afilias-nst.org. org. 172800 IN NS b2.org.afilias-nst.org. org. 172800 IN NS c0.org.afilias-nst.info. org. 172800 IN NS d0.org.afilias-nst.org. org. 86400 IN DS 9795 7 1 364DFAB3DAF254CAB477B5675B10766DDAA24982 org. 86400 IN DS 9795 7 2 3922B31B6F3A4EA92B19EB7B52120F031FD8E05FF0B03BAFCF9F891B FE7FF8E5 org. 86400 IN RRSIG DS 8 1 86400 20180703170000 20180620160000 39570 . mzYJcAKpBCaXKvZ7zTmxuaiNGNf2jE9fcpyubQ2hU+vf+/fVLLWxElZQ 9xtfShyEKoHuZFgf6e505Lfj9lYCRjwgx3Yx8hfuuwr5L6XY1ECkK5rT pt4StQZngAVxAaDD8LgZcoj+OxXzYGWGEhwhA0kkneV7IRn0v0rmEwVD z0GYU5aARfE1K8DRVfoIkC1IkmSVdswrO0P5YVKLSMqxgq/ObRxJPuGj 2awBxlV25LHFDZ2CsYQhjOyn/UGLy/h+iObXNv/9+4UjzxZMfboubYFG OM4np9/5eoNwe+P3hWW4F1ZeM2XpjWAMyuce/Guu25BQ3CpiQtAaI2p8 pj/Oaw== ;; Received 825 bytes from 192.5.5.241#53(f.root-servers.net) in 4 ms etiantian.org. 86400 IN NS dns.bizcn.com. etiantian.org. 86400 IN NS dns.cnmsn.net. h9p7u7tr2u91d0v0ljs9l1gidnp90u3h.org. 86400 IN NSEC3 1 1 1 D399EAAB H9PARR669T6U8O1GSG9E1LMITK4DEM0T NS SOA RRSIG DNSKEY NSEC3PARAM h9p7u7tr2u91d0v0ljs9l1gidnp90u3h.org. 86400 IN RRSIG NSEC3 7 2 86400 20180712072331 20180621062331 1862 org. YcZkCUWooAgsPB98ndrbreyBNCYc35I4DaDaq8UQ2ssPE00HkCMytXSm cgnS7gQjhDexaVZJDvN8/Ph5vTh6vv1eS3bhsWOrl9P0xfMSqXCfahxW SORWfSzTQJBP/GCBWNJrs/PN5lFrL1S/Ys65ke42S4mO64sHa6EWdep0 /vk= hjkvc91ahlsun5l5aaae2u87gu5h41f0.org. 86400 IN NSEC3 1 1 1 D399EAAB HJL9RDF6TES68LJ3OTVU3RJIH7VDPLIN A RRSIG hjkvc91ahlsun5l5aaae2u87gu5h41f0.org. 86400 IN RRSIG NSEC3 7 2 86400 20180708152845 20180617142845 1862 org. C8lCzdaeLN58pjb9LJjLGwr6ZGKDT6n47vTmYy7T5CfsRkiE1U+DcZ+2 Brame+3ugR+L1C9LSJhwTwLSrmNUwIBqYIhBnGOXttNaAowkMHbcPwET ekB7MFn5JrkGEheQPwp+2F9J4/KSBN/dITewKxigArtlrLsk0uF+WbPY UZU= ;; Received 593 bytes from 199.249.112.1#53(a2.org.afilias-nst.info) in 276 ms www.joker.com. 600 IN A 42.62.5.158 etiantian.org. 600 IN NS dns.cnmsn.net. etiantian.org. 600 IN NS dns.bizcn.com. ;; Received 116 bytes from 180.163.194.139#53(dns.bizcn.com) in 51 ms [root@Poppy ~]# nslookup www.joker.com Server: 100.100.2.136 Address: 100.100.2.136#53 Non-authoritative answer: Name: www.joker.com Address: 1.1.1.1
HTTP 协议
http协议,hypertext transfer protocol,超文本传输协议,是互联网中最常用的一种网络协议。http的重要应用之一是www服务。
www,全称为world wide web,常称为web,万维网,目前互联网上最受用户欢迎的信息服务形式
ssh nfs rsync
客户端和服务端 c/s架构,局域网内部用
http协议www应用
浏览器和服务端 b/s,广域网用
HTTP 协议版本
1.0版本比0.9版本的基础上增加了http请求头,可支持更多的请求方法,并且能对多媒体对象进行处理。使得包含生动图片的web页面和交互式表格成为可能,而正是这些页面和表格促使互联网被人们广泛地接受。规定浏览器与服务器只保持短暂的链接,浏览器的每次请求都需要与服务器建立一个tcp链接,服务器完成请求处理后即断开tcp链接
1.1版本修复http设计的缺陷,从扩展性,缓存处理,带宽优化,持久链接,host头,错误通知,消息传输,内容协商等多个方面都做了相关改进。目前,1.1版本是互谅网的主流版本
1.1 版本支持持久链接,在一个tcp链接上可以传送多个http请求和响应,减少了建立和关闭链接的消耗和时间延迟
1.1 版本增加了更多的请求头和响应头信息,用以增强http功能
1.1 提供了身份认证,状态管理和cache缓存等机制相关的请求头和响应头
HTTP 请求方法
http通信中,每个http请求报文都包含一个方法。用以告诉web服务器端需要执行哪些具体的动作
HTTP 状态码
状态码介绍
用来表示web服务器响应http请求状态的数字代码。每当web客户端向web服务器发送一个http请求时,web服务器都会返回一个状态响应代码。作用是告知web客户端此次请求是否成功,或者是否要采取其他的动作方式
http响应的状态码种类很多,常见的状态码如下
http状态码的命令行查看
[root@Poppy ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 277
Content-Type: text/html
Date: Thu, 21 Jun 2018 14:34:21 GMT
Etag: "575e1f72-115"
Last-Modified: Mon, 13 Jun 2016 02:50:26 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
HTTP 报文
http报文中有很多行内容,这些行字段都是由一些ascii码组成 ,分为请求报文和响应报文
请求报文
由请求行,请求头部,空行和请求报文主体组成
(1)请求行是请求报文的第一行,用来说明客户端想要做什么。内容由请求方法字段,url字段和http协议版本字段组成,它们之间用空格分开
(2)请求头部由关键字/值对组成,每行一对
最常用的请求头是content-type和content-length
(3) 空行
通过发送回车和换行符,通知web服务器空行以下不会有请求头部信息了
(4)请求报文主体
get请求不会有请求报文主体,psot请求才会有请求报文主体
响应报文
由起始行,响应头部,空行和响应报文主体这几个部分组成
(1) 起始行,响应报文的起始行也叫状态行,用来说明服务器响应客户端请求的状况。一般啊为协议及版本号,数字状态码,状态情况。例如: http/1.1 200 OK
(2) 响应头部,和请求报文类似,起始行的后面一般有若干个头部字段每个头部字段都包含一个字和一个值,俩者之间用冒号分隔。
(3) 空行,通过发送回车和换行符,通知客户端空行下文无头部信息了
(4) 响应报文主体,壮哉了要返回给web客户端的数据。这些数据可以是文件,二进制,等
web客户端发送一条http请求报文,请求http://www.joker.com/index.html资源,请求报文的起始行中有一个get命令,资源名称为index.html。使用http1.1协议,由于请求的方法是get,因此请求报文不需要有请求主体。
web服务器收到请求后,返回一条http响应报文。这条响应报文中包含了http的版本号http1.1成功的状态码200,状态描述ok,以及若干响应头部字段,在所有这些内容之后跟着包含了所请求资源的响应主体。content-lenght响应主体的长度,content-type文档的mime类型
HTTP 协议原理
http协议属于osi模型中的第七层应用层协议,重要的应用就是www服务应用。以http协议进行通信时,需要有客户端和服务器端,在web客户端向web服务器端发送请求报文之前,先要通过tcp/ip协议在web客户端和服务器之间建立一个tcp/ip连接
- 终端客户在web浏览器地址输入访文http://www.joker.com/index.html
- web浏览器请求dns服务器把域名www.joker.com转换成web服务器的ip地址
- web浏览器将端口从访问地址(URL)中解析出来
- web浏览器通过解析后的ip地址及端口与web服务器之间建立一条tcp连接
- 建立tcp连接后,web浏览器向web服务器发送一条http请求报文
- web服务器响应并读取浏览器的请求信息,然后返回一条http响应报文
- web服务器关闭http连接,关闭tcp连接,web浏览器显示访问的网站内容到屏幕上
HTTP 资源
媒体资源
当web服务器响应http请求时,回味每一个http对象数据加一个mime类型。当web浏览器后去到服务器返回的对象时,会去查看相关的mime类型,并进行响应处理。
mime类型存在于http响应报文的响应头部信息里,它是一种文本标记
我们可以在nginx的配置文件conf目录下,查看它支持的媒体类型
[root@Poppy conf]# cat mime.types types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; image/jpeg jpeg jpg;
URL 介绍
Uniform Resource Location. 统一资源定位符,也被称为网页地址,是因特网上标注的资源唯一地址。是internet上用来描述信息资源的字符串,主要用在各种www客户端和服务器程序上。
URL 的格式由下列三部分组成
- 协议,例如http
- 主机资源服务器ip地址或域名,例如www.joker.com
- 主机资源的具体地址,如目录和文件名,例如joker/index.html
URL说明
URI 介绍
Uniform Resource Identifier.统一 资源标识符,是一个用于标识某一互联网资源名称的字符串。这个字符串在世界范围内唯一标识并定位某一个信息资源
URI说明与URL说明一样,但是URI可以指向邮箱
URL是URI命名机制的一个子集
静态网页资源
介绍:
纯粹的HTML格式的网页,包含图片,视频,js,css等通常被称为“静态网页”,静态网页是相对于动态网页而言的,指没有后台数据库,不含程序,如php,jsp,asp,不可交互的网页
特点:
开发者编写的是什么,它显示的就是什么。静态网页维护和更新相对比较麻烦,每个不同的网页都需要单独编辑更新,所以,静态网页适用于更新较少的宣传展示型网站
常见扩展名为:
- 纯文件类程序或文件,如htm,html,xml,js,css
- 图片文件或者数据文档,如jpg,gif,png,bmp,ppt,doc,txt
- 视频类流媒体文件,如mp4,swf,avi,wmv,flv
几个重要的特征:
- 每个页面都有一个固定的url地址,且url一般以htm,html,等常见形式为后缀,而且地址中不包含有问好?或&等特殊符号
- 网页内容一经发布到网站服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器文件系统上的,也就是说,静态网页实实在在保存在服务器上的文件实体,每个网页都是一个独立的文件
- 网页内容是固定不变的,因此,容易被搜索引擎收录(优点)
- 网站制作和维护方面的工作量较大,当网站信息量很大时,完全依靠静态网页比较困难(缺点)
- 网页的交互性差,程序的功能实现方面有较大的限制(缺点)
- 网页程序在用户浏览器解析,解析率很高,由于服务器端不进行解析,并且不需要读取数据库,因此服务器端可以接受更多的并发访问。客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据,不做任何解析,待客户端拿到数据后,在浏览器端解析并展现出来(优点)
静态网页语言:
常见的静态语言有html,js,css,xml等
核心特点:
- 客户浏览器端解析程序
- 不需要读取数据库,性能和效率很高
- 后端没有数据库支持,和用户的交互性差,功能实现很差
静态网页的架构思想
在高并发,高访问量的场景下做架构优化,涉及的关键环节就是把动态网页转成静态网页,而不是直接请求数据库和动态服务器,并且可以把静态内容推送到前端缓存中提供服务,可提升用户体检,节约服务器和维护成本
动态网页资源
介绍:
动态网页是与静态网页相对而言的,动态网页的URL后缀不是.htm,html,xml,js,css等静态网页的常见扩展名形式,而是.asp,.aspx,.php,js,do,cgi等形式的,并且一般在动态网页网址中会有标志性的符号--"?","&",此外,还需要后端数据库支持
特点:
- 网页扩展名后缀常为 asp,aspx,php,jsp,do
- 网页一般以数据库技术为基础,大大降低了网站维护的工作量
- 采用动态网页技术的网站可以实现更多的功能,如用户注册,用户登录,在线调查,投票,用户管理,订单管理,发博文
- 动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并可能通过读取数据库来返回一个完整的网页内容
- 动态网页中的“?”在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者出于技术等方面的考虑,搜索引擎一般不会抓取网址中“?”后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求
程序在服务器端解析,会消耗大量的cpu和内存,i/o等资源,并且多数还要提供读取数据库等服务,因此,其访问效率远不如静态网页,在服务器端解析动态程序的服务常见有php,java容器
动态网页的架构思想
静态网页的性能效率是动态网页的10-30倍,且动态网站效率很差,并发能力也很低,在高并发场景中,应尽可能转换成静态网页提供服务。动态转静态几乎是所有高并发网站必备的架构方案思路
伪静态网页
伪静态就是通过某些技术把动态网页的URL地址伪装成静态网页URL地址,但实质上用户访问的还是动态网页,只不过看起来符合静态网页地址特征,因此,用户及搜索引擎会误以为是静态网页
特点:
从网站的RUL地址看,伪静态表面上看起来是静态内容,但这其实是通过rewrite规则实现的URL地址重写。改写后的URL地址规范,美观,有利于搜索引擎抓取,以及提升用户访问体验。
作用:
把动态网页URL改写成静态网页的URL,虽然消除了动态网页中的参数,但是并不需要生成任何网页,仅仅是改变了网页地址路径。这样做的主要目的是,一是让搜索引擎收录网站内容,让更多的用户访问企业网站内容,二是提升用户访问体验,动态地址带特殊符号等的URL看起来也不如静态网页地址舒服
小结:
- 利用rewrite技术将动态网页伪装成静态网页
- 便于嗖嗖引擎搜寻,提升用户访问量及用户体验
- 访问性能没有提升,并且转换成伪静态会消耗资源,因此性能反而会下降
- 尽可能的将动态网页转换成真正的静态页面
网站流量度量术语
ip
独立ip,即Internet Protocol,独立ip数是指不同的IP地址的计算机访问网站时被计的总次数。
公司,学校,家里一般都是nat上网,属于一个独立ip,但是如果是ADSL拨号上网,拨号了三次,每次都访问网站,那么计作三次访问,因为ip每次不一样,都是独立的
pv
访问量,即Page View,页面流浪,不管客户端是不是相同,也不管ip是不是相同,用户只要访问网站页面就会被计算pv,一次页面计一个pv
pv的具体度量方法是从客户端浏览器发出一个对web服务器的请求,web服务器接到这个请求后,将该请求对应的网页发送给浏览器,这样就产生了一个pv。只要这个该请求对应的网页发送给了浏览器,无论这个页面是否完全打开,都会被计数,一般为了防止用户快速刷pv,很多网站会把pv的统计程序放在页面的最下面
用pv衡量网站时,pv数反映出来的是浏览某网站的页面数量,没刷新一次页面也算一次pv。因此可以说pv数与来访用户的数量成正比,但pv数并不是真正的页面来访者数量,而是网站被访问的页面数量。因为一个来访者可能产生多个pv
uv
独立访客,即Unique Visitor,同一个客户端访问网站被计为一个访客。一天内相同的客户端访问同一个网站只计一次uv。uv一般是以cookie等计数作为统计数据的
并发链接
所谓的并发就是单位时间内,服务器能够同时处理的最大连接数,因为有的请求1秒结束,有的请求可能10秒才结束,因此,网站并发不是客户端每秒的并发请求数,而是服务器在一段时间内可以处理的最大连接数,这个连接既包含正在创立的连接,也包含已经建立的连接。
我们去餐馆吃饭,餐馆一共有10张桌子,每张桌最多坐4个人同时吃饭,一般来说,这个餐馆能够接收的并发吃饭人数为10*4,即40个并发,这里就是没有考虑时间问题,1秒并发可以是40个,20分钟也可以是40个,因为第一秒可以是40个人同时进来,但是第二秒就无人可进了,满员了,如果说10分钟并发是40个,下一个10分钟还是40个,第三个10分钟还可以是40个
其他服务并发连接
QPS Query Per Second,每秒查询率
用于衡量一个特定的查询服务器在规定时间内所处理流量多少的标准,DNS系统及数据库等服务的查询性能经常用QPS来衡量
IOPS Input/Output Operations Per Second,每秒进行读写(i/o)操作次数
多用于数据库,衡量随机访问性能。存储端的IOPS性能和主机端的i/o是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次i/o需要多少次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过发送写入请求,写入数据,收到写入确认三个步骤,也就是3个存储端访问