@yangwenbo
2023-02-10T17:42:41.000000Z
字数 12395
阅读 224
http
LDNS
,即:Local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端:如果没有,则LDNS会负责继续请求其他的DNS服务器。(.)
根开始请求www.baidu.com域名的解析,根DNS服务器在全球一共有13台,根服务器下面是没有www.baidu.com域名解析记录的,但是根下面有www.baidu.com对应的顶级域.org
的解析记录,因此,根会把.org
对应的DNS服务器地址返回给LDNS。.org
对应的DNS服务器地址后,就会去.org
服务器请求www.baidu.com域名的解析,而.org
服务器下面也没有www.baidu.com域名对应的解析记录,但是有baidu.com
域名的解析记录,因此.org
服务器会把baidu.com
对应的DNS服务器地址返回给LDNSbaidu.com
对应的DNS服务器地址后,就会去baidu.org
服务器请求www.baidu.com域名的解析,baidu.com
域名对应的DNS服务器是该域名的授权DNS服务器,这个DNS服务器正是企业购买域名时管理解析所在的服务器(也可能是自建的授权DNS服务器),这个服务器会有www.baidu.com对应的IP解析记录baidu.com
域名DNS服务器会把www.baidu.com对应的IP解析记录发给LDNSHTTP方法 | 作用描述 |
---|---|
GET | 客户端请求指定资源信息,服务器返回指定资源 |
HEAD | 只请求响应报文中的HTTP首部 |
POST | 将客户端的数据提交到服务器,例:注册表单 |
PUT | 从客户端向服务器传送的数据取代指定的文档内容 |
DELETE | 请求服务器删除Request-URI所标识的资源 |
MOVE | 请求服务器将制定的页面移至另一个网络地址 |
状态码范围 | 作用描述 |
---|---|
100-199 | 用于指定客户端相应的某些动作 |
200-299 | 用于表示请求成功 |
300-399 | 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息 |
400-499 | 用于指出客户端的错误 |
500-599 | 用于指出服务器端的错误 |
状态代码 | 详细描述说明 |
---|---|
200~OK | 服务器成功返回网页,这是成功的http请求,返回的标准状态码 |
301-Moved Permanently | 永久跳转,所有请求的网页将永久跳转到被设定的新的位置,例如:从baidu.com跳转到www.baidu.com |
403-Forbidden | 禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当所致。 |
404-Not Found | 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致 |
500-Internal Server Error | 内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统地报错,一般为服务器的设置或者内部程序问题导致。例如SElinux开启,而又没有为http设置规则许可,客户端访问就是500 |
502-Bad Gateway | 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为反向代理服务器下面的节点出问题导致。 |
503-Service Unavailable | 服务当前不可用,可能因为服务器超载或停机维护导致,或者是反向代理服务器后面没有可以提供服务的节点 |
504-Gateway Timeout | 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据给前端代理服务器。 |
报文格式 | 报文信息 |
---|---|
起始行 | 协议及版本号 数字状态码 状态信息 |
响应头部 | 字段1:值1 字段2:值2 |
空行 | 空白内容 |
响应报文主体 | 就是html的网页 |
响应报文的起始行,也叫状态行,用来说明服务器响应客户端请求的状况。一般为协议及版本号,数字状态码,状态情况。例如:HTTP/1.1 200 OK
和请求报文类似,起始行的后面一般有若干个头部字段。每个头部字段都包含一个名字和一个值,两者之间用冒号分隔。头部结尾也是以一个空行结束。常见的头部信息有:
最后一个响应头部信息之后是一个空行,发送回车符和换行符,通知客户端空行下文无头部信息。
响应报文主体中装载了要返回给客户端的数据。这些数据可以是文本,也可以是二进制的(图片,视频)。
HTTP协议属于OSI模型中的第七层应用层协议,HTTP协议的重要应用就是WWW服务应用,下面就以WWW服务应用为例介绍HTTP协议的通信原理了,HTTP协议进行通信时,需要有客户端(即终端用户)和服务端(即Web服务器),在Web客户端向Web服务器发送请求报文之前,先要通过TCP/IP协议在Web客户端和服务器之间建立一个TCP/IP连接。整个http协议请求的工作流程如下:
MIME类型 | 文件类型 |
---|---|
text/html | html htm shtml文本类型 |
text/css | css文本类型 |
text/xml | xml文本类型 |
image/gif | gif图像类型 |
image/jpeg | jpeg jpg图像类型 |
application/javascript | js文本类型 |
text/plain | txt文本类型 |
application/json | json文本类型 |
text.plain | txt文本类型 |
application/json | json文本类型 |
video/mp4 | mp4视频类型 |
video/quicktime | mov视频类型 |
video/x-flv | flv视频类型 |
video/x-ms-wmv | wmv视频类型 |
video/x-msvideo | avi视频类型 |
提示:
第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用"/"符号隔开。第一部分和第二部分是不可缺少的,第三部分可以省略。
协议 | 分隔符号 | IP地址域名 | 分隔符号 | 资源目录地址 |
---|---|---|---|---|
http | :// | www.yangwenbo.com | / | yangwenbo/index.html |
http | :// | www.yangwenbo.com | / | video/index.html |
协议(服务形式) | 分隔符号 | 用户名 | 分隔符号 | 域名 |
---|---|---|---|---|
mailto | : | yangwenbo | @ | yangwenbo.com |
由于静态网页程序在客户端解析,大大降低了服务器端的访问压力,因此解析效率更高,在实际高并发网站架构中,可以考虑把用户请求的数据解析后存成静态文件放于磁盘中或放于内存中,来降低动态服务器的压力,节约企业成本,提升用户体验。
新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此,对于新闻业务内容的静态化相对比较简单。
程序===>生成静态页面
- 第一步:程序要支持发布动态内容转成静态功能
- 第二步:运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件。
- 第三步:运维人员通过发布或事件触发把运营编辑生成的静态网页发布到事先搭建好的公司缓存集群服务器上,或者把静态内容同步到购买的全国所有CDN服务器节点上,然后,再提供给用户访问浏览。
- 视频网站和新闻网站类似,特点都是一旦发布完成,几乎不会再改动网页内容。因此,实现视频业务网站高效访问也很简单。
- 以优酷视频网为例,用户在上传视频时,需要经历转码-->审核的过程(大概1小时),然后一些热点视频也可能会被提前推送同步到CDN的核心节点或全国所有CDN服务器节点,用户访问时才会更快。
这几类业务的动态转静态是比较困难的,因为,用户发布完成内容,可能会随时更新并查看,这种情况一般会通过异步方式,例如消息中间件技术加上NoSQL集群技术实现转换,当然也会改进产品细节,例如:在访问的环节设置延时,异步加载等手段。
- 分析所有Web服务器的访问日志信息,对IP地址段去重后计数,这是IT人员的基本计算手段
- 在网站的每一个(所有)页面结尾,嵌入JS等统计程序代码,待用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或企业内部开发日志分析程序时使用
- 用第三方大家比较信任的统计工具例如:谷歌的统计(GA)。
IP的统计方法简单,易用,因此,成为了多数网站衡量网站流量的重要指标之一。
- 分析Web服务的访问日志(需要排除js,css及各种图片的日志信息),只计算HTML,PHP等页面数量。
- 在网站的每一个页面结尾,嵌入JS等统计程序代码,待用户加载网页后,访问数量即传给统计PV的服务器,这种方法一般被第三方统计公司或在企业内部开发日志分析程序时使用。
- 用第三方大家比较信任的统计工具例如:谷歌的统计(GA)
PV的统计方法也很简单,易用,因此,也是多数网站衡量网站流量的重要指标之一。
特别提示:
IP和PV概念,统计方法也是Linux运维人员要掌握的重点。
- 通过客户端HTTP请求报文分析
一个客户端会多次请求网站服务器,每次HTTP请求都会携带客户端自身的大量信息,比如:IP地址,请求发出时间,浏览器版本,操作系统版本等等。网站服务器对这些请求进行分析,如果这些请求满足一些共同特征,比如来自同一个IP地址,且浏览器版本和操作系统版本相同,请求时间又相近等,那么就可以认为这些是来自于同一个客户端,那么多个页面访问也只算一个UV。共同特征的定义是由服务器方决定的。通常,用IP地址+其他特征共同来定义的情况较多。但此种度量方法无法解决以下问题,例如:多个人的电脑软硬件经常雷同,并且是一个公司或者学校的人;多个人共用一个电脑的情况。- 通过cookie鉴别
当客户端第一次访问某个网站服务器的时候,网站服务器会给这个客户端的电脑发出一个cookie,通常放在这个客户端电脑的C盘当中。在这个cookie中会分配一个独一无二的编号,这其中会记录一些访问服务器的信息,如访问时间,访问了哪些页面,等等。当你下次再访问这个服务器的时候,服务器就可以直接从你的电脑中找到上一次放进去的Cookie文件,并且对其进行一些更新,但那个独一无二的编号是不会变的。如果在一定时间内,服务器发现2个来访者对应的是一个编号,那么自然可以认为它来源于同一个来访者了,于是就计算1个UV。- 使用Cookie的方法要比分析客户端HTTP请求头部信息分析更精确些。但也存在一些问题,比如:有的客户端为保证更高级别的安全,关闭了Cookie的功能;或者是有些客户端设置了在退出页面时自动删除Cookie,亦或你经常自己去手动删除Cookie,那么这个方法就不那么精确了。
- 因此,以上两个方法都只能得到近似的UV,而不是绝对精确。
- UV的度量相对IP和PV来说,不但麻烦,而且要开发比较复杂的程序系统才能得到期望的结果,因此,在Linux运维领域大家提及的较少,一般企业市场及运营人员可能会关注网站的UV。
- 假设某城市的一个网吧里,有10个人都进入了www.baidu.com网站,每个人平均访问了5个页面,但是这个网吧对外出口是一个公网IP(注意:也可以配置多个IP出口,此处不计特殊情况),所以,对于baidu网站来说,只会计算一个独立IP访问,但是因为网吧里有10人在访问www.baidu.com网站,并且平均都访问了5次,因此,对于baidu网站来说,PV数就是10*5=50个PV,而因为有10个人访问,就是10个不同的客户端访问,因此,UV为10。
- 那么,在访问示例中:网站独立IP数为1个,PV数为50个,UV(独立访客)为10个。
- 通过上述结果,我们不难得出一个结论,一个网站的独立IP数量要比网站实际访问的PV数量小的多。通常情况下(国内互联网环境),网站的UV数也会大于独立IP数。
- PV数高说明访问的页面数多,但是不一定就代表来访者多:但PV数一定与来访者的数量成正比,不过,PV并不直接决定页面的真实来访者数量。比如在访问某网站时,一个人也可通过不断的刷新页面,制造出非常高的PV数。PV数多,用户访问网站页面的总数量多,通常服务器的压力会大一些。
- 在面试过程中Linux运维人员经常会被问到:你的公司网站最大并发是多少? 那么到底什么事并发?怎么理解并发呢?
- A种理解:网站服务器每秒能够接收的最大用户请求数
- B种理解:网站服务器每秒能够响应的最大用户请求数。
- C种理解:网站服务器在单位时间内能够处理的最大连接数。
虽然A,B的理解占IT人员中的大多数,但是,C理解更为准确一些。
我们去餐馆吃饭,餐馆里一共有10张桌子,每张桌最多坐4个人同时吃饭,那么一般人的理解,这个餐馆能够接收的并发吃饭人数为10*4,即40个并发,这里就没有考虑时间问题,1秒并发可以是40个,10分钟内并发也是40个。因为这里还有一个因素,就是每个人吃饭时长的问题,如果平均每个人10分钟吃完,那么可以说10分钟内,这个餐馆的并发为40个,而不是每秒钟并发40个,因为,第一秒可以是40个人同时进来,但是第二秒就无人可进了(满员了),如果说10分钟并发是40个,下一个10分钟还能是40个,第三个10分钟还可以是40个。即网站服务器在单位时间内能够处理的最大连接数。
- 高速公路每个方向都有2条车道,那么,同一时刻并发的车辆为两辆,并且并发可以永远为2,如果按秒计算,每秒的并发可能就可以有十几辆,这个例子和餐馆不同,因为高速路处理并发不需要处理时间,但是对于Web服务器来讲,需要花费时间处理请求,这个请求可能是1秒或数秒,因此说,并发不应该只是用户访问的请求数,而是服务器同时处理的并发数,并且单位时间不一定是1秒,可能是一个连接的处理周期内的连接数。
- 对于网站服务器来说,所谓的并发就是单位时间内,服务器能够同时处理的最大连接数,因为有的请求1秒结束,有的请求可能10秒才结束(业务程序及配置不同),因此,网站并发不是客户端每秒的并发请求数,而是服务器在一段时间内(1秒或者数秒内)可以处理的最大连接数,这个连接既包含正在建立的连接,也包含已经建立的连接。
例如:某网站的并发是5000
意味着:单位时间内(理解为1秒或数秒内),正在处理的连接数,正在建立的连接数。加起来一共是5000个。
- 统计当下时刻的linux的网络连接数并发,
netstat -an|grep -i “est”|wc -l
- nginx web 层 active status
- QPS(Query Per Second)每秒查询率
每秒查询率QPS是用于衡量一个特定的查询服务器在规定时间内所处理流量多少的标准。运维工作中,DNS系统以及数据库等服务的查询性能经常用每秒查询率来衡量。- IOPS(Input/Output Operations Per Second)
IOPS即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。存储端的IOPS性能和主机端的I/O是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次I/O需要多次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过“发送写入请求,写入数据,收到写入确认”等三个步骤,也就是3个存储访问。
连续的读写向磁盘中写入大的文件 :
dd if=/dev/zero of=/tmp/test01.bin bs=1K count=10000
网站 | 独立IP万/日 | PV数万/日 | 网站并发级别 | 机器数量 |
---|---|---|---|---|
www.51cto.com | 582000 | 1338600 | 10000 | 数十台 |
www.ganji.com | 17340000 | 13872000 | 10000-30000 | 几百台 |
www.58.com | 1398000 | 22927200 | 10000-30000 | 几百台 |
www.weibo.com | 30180000 | 166593600 | 几十万 | 千台 |
www.taobao.com | 46620000 | 489510000 | 几十万-百万 | 万台 |
www.jd.com | 6108000 | 98949600 | 数万 | 千台 |
www.suning.com | 930000 | 7254000 | 10000-30000 | 百台 |
提示:以上数据于大约2015年7月从第三方http://alexa.chinaz.com/alexa_more.aspx 网站查找所得,仅供参考,不同的统计程序差别也很大,有一定误差,实际最高日访问量要比此表大,因为网站访问量也节假日等有关,另外统计的误差和chinaz.com的统计方法有关,后面的最大并发以及机器数量级别为作者根据访问量及业务类型估算而来,不代表网站的实际情况,仅对初学者是一个参考。
请问你们的网站并发是多少?你们公司网站访问量是多少?怎么计算?
- 运维部分日志分析
- 开发在页面嵌入JS程序统计收集,分析
- 运营市场通过第三方公司提供的工具程序统计,例如:GA统计
www软件 | 2012年 | 2015年 | 趋势变化 |
---|---|---|---|
Apacheo | 66.6% | 58.4% | 下降近9个百分点 |
IIS | 18.4% | 13.3% | 下面近5个百分点 |
Nginxo | 10.6% | 23.3% | 增加近13个百分点 |
tengines | 无排名 | 0.2% | 增加近0.2个百分点 |
tomcato | 0.7% | 0.4% | 下降了0.3个百分点 |
从上述趋势变化不难发现,Apache虽然份额最大,但是有逐年下降趋势,而这个Nginx后起之秀上升趋势显著,另外,Nginx的分支Tengine也从看不见身影到逐渐占有一定份额了。
- Apache:这是中小型Web服务的主流,Web服务器中的老大哥。
- Nginx:大型网站Web服务主流,曾经Web服务器中的初生牛犊,现已长大。Nginx的分支tengine(http://tengine.taobao.org/)目前也在飞速发展。
- Lighttpd:这是一个不温不火的优秀的Web软件,社区不活跃,静态解析效率很高。在Nginx流行前,它是大并发静态业务的首选,国内百度贴吧,豆瓣等众多网站都有lighttpd奋斗的身影。
- PHP(fastcgi):大中小型网站都会使用,动态网页语言PHP程序的解析容器。它可配合Apache解析动态程序,不过,这里的PHP不是Fastcgi守护进程模式,而是mod_php5.so(module).也可配合Nginx解析动态程序,此时的PHP常用Fastcgi守护进程模式提供服务。
- tomcat:中小企业动态Web服务主流,互联网Java容器主流(如jsp,do)
- resin:大型动态Web服务主流,互联网Java容器主流(如jsp,do)
- IIS(internet information services):微软Windows下的Web服务软件(asp,.aspx)
Apache软件有几个重要的版本系列,分别为:Apache1.3,Apache2.0,Apache2.2,Apache2.4等,其中,APache1.3和Apache2.0系列已经成为过去时,官方的网站也看不见其踪影了,目前主流的Apache为2.2系列,正在向Apache2.4系列过渡阶段。如果没有特别要求,建议读者当下使用Apache2.2系列。
官方地址:http://www.apache.org/
Nginx的版本只有一个系列,但是版本更新很快,仅仅半年就有数个版本,这也看出来社区的活跃程序。具体内容参见文档地址:http://www.nginx.org/以及http://www.nginx.org/en/docs/
Resin官方号称是世界上最快的Web服务,是大型动态Web服务主流,为互联网Java程序的解析容器,百度,人人都曾用过Resin
tomcat一直是中小企业动态Web服务的主流,常用作解析Java的程序的容器,其版本发展变化如下表:
Servlet/JSP Spec | Apache Tomcat version | Actual release revision | Mininum Java Version |
---|---|---|---|
3.0/2.2 | 7.0.x | 7.0.26 | 1.6 |
2.5/2.1 | 6.0.x | 6.0.35 | 1.5 |
2.4/2.0 | 5.5.x | 5.5.35 | 1.4 |
2.3/1.2 | 4.1.x(archived) | 4.1.40(archived) | 1.3 |
2.2/1.1 | 3.3.x(archived) | 3.3.2(archived) | 1.1 |
tomcat官方地址:
http://tomcat.apache.org/whicheversion.html
http://tomcat.apache.org/
- PHP软件是大中小型网站程序前台页面开发的首选,存世开源软件众多,也是中小企业网站开发的首选,它是动态网页语言PHP程序的解析容器。PHP的版本系列有PHP5.2,PHP5.3,PHP5.4,PHP5.5,PHP5.6,其中最经典的版本为PHP5.2系列,企业应用的主流版本可以说是百花争艳。
- 值得注意的是PHP提供解析的方式,在配合Apache解析动态程序时,用的是mod_php5.so(module)模块的方式:在配合nginx解析动态程序时,常用Fastcgi守护进程模式提供服务。