老男孩Linux运维读书笔记
HTTP服务基础
用户访问网站基本流程
1,客户端输入网站地址;
2,本地缓存或hosts,或者localDNS,或者DNS服务器解析域名IP;
3,将解析域名的IP发送给客户端;
4,本地将域名和IP对应解析缓存起来,以便下次快速响应,不过会有一个TTL过期时间;
5,客户端请求IP对应网站;
6,服务器响应客户端;
dig +trace www.baidu.com
DNS几大功能
域名解析功能;
设置CNAME别名记录,常用于CDN加速服务商;
设置MX邮件记录;
设置PTR记录,反向解析,即把IP解析为对应域名;
HTTP协议
HTTP协议简介
HyperText Transfer Portocol,超文本传输协议,是互联网中最常用的一种网络协议;
HTTP有许多应用,但最流行的是WWW应用(Web应用);
HTTP协议的WWW服务默认端口是80,另一个加密的WWW服务https默认端口是443;
HTTP协议版本
主要版本为 HTTP1.0和1.1
HTTP1.0
可支持更多的请求方法,并能对多媒体对象进行处理;
规定client与server只保持短暂的连接,客户端每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后即断开TCP连接;
服务器不跟踪每个客户端,也不记录过去的请求;
HTTP1.1
重点修复HTTP设计中的缺陷,从可扩展性、缓存处理、带宽优化、持久连接、host头、错误通知、消息传递、内容协商等方面做了改进;
支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少建立和关闭连接的延迟;
增加更多的请求头和响应头信息,用以增强HTTP功能;
持久连接,通过增加新的请求头来帮助实现,如 Connection的请求头的值为Keep-Alive时,表示Client通知Server返回本次请求结果后保持连接。Connection请求头为close时,关闭连接;
HTTP请求方法
每个HTTP请求报文都包含一个方法,用以告诉Web Server需要执行哪些具体动作。
这些动作包括:GET、HEAD、POST、PUT、DELETE、MOVE,这些HTTP请求报文包括的方法被称为HTTP请求方法。
HTTP状态码
HTTP状态码介绍
HTTP Status Code,用来表示Server响应HTTP请求状态的数字代码,作用是告知Client此次请求是否成功,或者是否要采取其他动作方式。
curl -I www.baidu.com #可通过这个查看相关信息
HTTP报文
HTTP请求报文
HTTP Request Message由请求行、请求头部(header)、空行和请求报文主体组成;
请求行,用来说明Client想要做什么;
头部,通过客户端把请求的相关信息告诉给服务器;
空行,发送回车符和换行符,通知Server一下不会有请求头部的信息了;
请求报文主体,包括要发送给Server的数据信息;
HTTP响应报文
HTTP Response Message由起始行、响应头部、空行和响应报文主体组成;
起始行也叫状态行,用来说明服务器响应客户端请求的状态(HTTP/1.1 200 OK);
空行,发送回车符和换行符,通知客户端空行下无头部信息;
响应报文主体,装载了要返回给客户端的数据;
一个简单的请求报文和响应报文举例
HTTP协议原理
HTTP协议工作流程
1,Client访问地址 www.xxx.com;
2,本机解析www.xxx.com并取得IP;
3,Client将端口号从访问地址中解析出来;
4,Client通过IP和Port与Server间建立一条TCP连接;
5,Client发送请求报文;
#到达HTTP服务后,请求后端集群结点的流程是Nginx--->FastCGI--->PHP--->DataBase;
6,Server发送响应报文;
7,关闭HTTP连接,关闭TCP连接;
HTTP资源
媒体类型
互联网上的数据有很多不同的类型,Web服务会把通过Web传输的每个对象都打上MIME类型(MIME Type)的数据标签格式。MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展),用来描述数据并标记不同的数据内容类型。
当Web服务器响应HTTP请求时,回味每一个HTTP对象数据加一个MIME类型;当Client获取到Server返回的对象时,回去查看相关的MIME类型,并进行相应处理。
MIME类型存在于HTTP响应报文的头部信息里,它是一种文本标记,表示一种主要的对象类型和一个特定的子类型。
cat /etc/nginx/mime.types #查看Nginx支持的媒体类型
URL
Uniform Resource Location,统一资源定位,也被称为网址;
URL由三部分组成,协议+IP或域名+具体地址(目录,文件);
URL是URI命名机制的一个子集;
URI
Uniform Resource Identifier,统一资源标识符,用于标识某一互联网资源名称的字符串,这个字符串在世界范围内唯一标识并定位某一个信息资源;
互联网上的每个可用的数据资源(图片、视频等)皆通过URI进行定位;
静态网页资源
静态网页是相对于动态网页而言的,是指没有后台数据库、不含程序(如PHP)、不可交互的网页;
静态网页的维护和更新比较麻烦;
常见的静态网页语言有HTML、JS、CSS、XML等;
静态网页常见扩展名:
纯文本类数据: .htm、.html、.xml、.js、.css等;
图片文件类数据:.jpg、.gif、.png、.doc、.txt等;
视频类数据:.mp4、.avi、.wmv、.swf等;
静态网页资源重要特征:
1,每个页面都有一个固定的URL地址,且地址中不含 "?" 或 “&” 等特殊符号;
2,网页内容一经发布到网址服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器文件系统上,每个网页都是一个独立的文件;
3,网页内容是固定不变的;
4,因为网页没有数据库支持,所以在网站制作和维护方面的工作了较大,当网站信息量很大时,完全依赖静态网页比较困难;
5,网页交互性差,在程序功能实现方面有较大限制;
6,网页程序在用户浏览器解析,程序解析效率很高,由于服务器不进行解析,并且不需要读取数据库,因此服务器端可以接受更多的并发访问。当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析),在Client解析并展现出来;
由于静态网页不需要再服务器端解析,因此服务器的压力也大大减轻了!
在高并发、高访问量的场景下做架构优化,设计的关键环节就是把动态网页转换成静态网页,而不是直接请求数据库和动态服务器,并且可以把静态内容推送到前端缓存(或CDN)中,这样就可以提升用户体验,节约服务器和维护成本;
动态网页资源
所谓的动态网页与静态网页是相对而言的。并且一般在动态网页网址中会有标志性符号 “?” 、“&”,此外,大多数情况下后端都需要有数据库支持。
动态网页资源特点:
1,网页后缀名常见为: .asp、.php,.py、.cgi等;
2,网页一般以数据库技术为基础,大大降低了网站维护 工作量;
3,采用动态网页技术可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、文字发表修改删除等;
4,动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并可能通过读取数据库来返回一个完整的网页内容;
5,动态网页中的 “?” 在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者处于技术等方面的考虑,搜索蜘蛛一般不会抓取网址中 “?” 后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求;
#程序在服务器端解析,在此过程中,会消耗大量的CPU和内存、I/O资源,并且还要读取数据库,因此访问效率远不如静态网页。
在服务器端解析动态程序的服务常见的有PHP引擎、Java容器(Tomcat、Resin)等。
有关动态网页的架构思想
一般来说,静态网页的性能效率是动态网页的几十倍,且动态网站效率很差,并发能力也低。在高并发场景中,应尽可能转换成静态网页提供服务。动态转静态几乎是所有高并发网站必备的架构方案思路,也是高级架构师的职责所在。
此外,动态转静态也要根据业务需求来设计。
伪静态网页
伪静态网页就是通过某些技术(如rewrite)把动态网页的URL地址伪装成静态网页URL地址,但实质上用户访问的还是动态网页。
伪静态表面上看起来是静态内容(如 .html),但伪静态网页URL地址通过rewrite规则实现的URL地址重写,改写后的URL地址规范、美观,有利于搜索引擎抓取,提升用户访问体验。伪静态网页还是动态网页,所以在性能上,伪静态功能反而是降低了网站的性能。
伪静态网页作用:
由于搜索引擎无法正确读取带参数的动态网页内容,以致网页中很多具有丰富信息的页面无法被搜索引擎收录,因此就有了伪静态技术。
它的作用是把动态网页URL改写成静态网页的URL,虽然消除了动态网页中的参数,但是并不需要生成任何网页,仅仅是改变了网页地址路径。
这样做的主要目的有两个,一是让搜索引擎收录网站内容,让更多的用户访问企业网站内容;而是提升用户体验,动态地址特特殊符号等的URL看起来也不让如静态网页地址舒服。
伪静态网页的缺点:
伪静态网页并不能提升网站的访问效率,从理论上来说还会降低网站的性能,没有动态转静态网页的效率高,不过还是一个不错的功能;
现在很多大型网站都采用了动态网页生成静态网页的技术,用于消除动态网页中的参数,是搜索引擎收录更多的内容,达到优化网站的效果。但是,有些更新频率很快的业务并不适合动态转静态;
此外,如果将动态转静态有很大难度,也可以考虑将其设置为伪静态;
伪静态网页小结:
利用rewrite技术奖动态网页伪装成静态网页(URL地址改写);
便于搜索引擎搜录,提升用户访问量及用户体验;
访问性能没有提升,并且转换成伪静态会消耗资源,因此性能反而会下降;
尽可能地将动态网页 转换成真正的静态页面;
并发量不是很大或更新过于频繁时,用rewrite实现伪静态也是不错的;
伪静态网页的实现过程,一般有产品运营提出需求、开发和运维共同实现;
生产Web框架优化实战方案
由于静态网页程序在客户端解析,大大降低了服务器端的访问压力,因此在实际高并发的网站架构中,可以考虑把用户其你去的数据解析后存成静态文件放于磁盘中或内存中,从而降低动态服务器的压力,节约企业成本,提升用户体验。
门户新闻业务
新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此,新闻业务内容的静态化相对比较简单。
1,程序要支持发布的内容动态转成静态的功能;
2,运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件;
3,运维人员通过发布或事件触发把运营编辑生成的静态网页发布到事先搭建好的公司缓存集群服务器上,或者把静态内容同步到购买的CDN服务节点上,在提供给用户访问;
视频网站业务
视频网站和新闻网站类似,特点都是一旦发布完成,几乎不会改动网页内容。
用户在上传视频时,需要经历转码----> 审核的过程;
此外,一些热点视频也可能会被提前推送同步到CDN的核心节点或全国所有CDN服务器节点,这样用户访问才会更快;
Blog、BBS、微博、电商(淘宝京东)
这几类业务由动态转静态比较困难,因为用户发布内容后,可能会随时更新并查看,对于这种情况,一般会通过异步的方式来处理,例如通过消息中间间技术加上NoSQL集群技术来实现转换。
网站流量度量术语
IP
IP,这里指的是独立IP数。指不同IP地址的计算机访问网站时被计入的总次数,独立IP是衡量网站流量的一个重要指标。
PV
PV,即访问量(Page View)、点击量。不管客户端是不是相同,用户只要访问网站页面就会被计算PV,一次计一个PV。
PV的具体度量方法就是从客户浏览器发出一个对Web服务器的请(Request),Web服务器接到这个请求后,将该请求对应的网页(Page)发送给浏览器,这样就产生了一个PV。
UV
UV,即独立访客(Unique Visitor),同一个客户端(PC或移动端)访问网站被记为一个访客,一天之内相同的客户端只计算一次。UV一般是以Cookie等技术作为统计依据的。
IP、PV、UV是多数网站衡量网站流量的重要指标之一。
并发连接数
在Linux运维人员面试中,会问到:你的公司网站的最大并发是多少?
那么到底什么是并发,如何理解并发呢?
网上有三种说法:
A:网站服务器每秒钟能够接受的最大用户请求;
B:网站服务器每秒能够相应的最大用户请求;
C:网站服务器在单位时间内能够处理的最大连接数;
# C种理解感觉更为准确一些
对于网站服务器来说,所谓并发就是单位时间内,服务器能够同时处理的最大连接数,因此有的请求1秒结束,有的请求可能10秒才结束。因此,网站并发并不是客户端每秒的并发请求数,而是服务器在一段时间内可以处理的最大连接数,这个连接包含正在建立的连接和已经建立的连接。
其他服务并发连接
QPS(Query Per Second)每秒查询率
QPS用于衡量一个特定的查询服务器在规定的时间内所处理流量多少的标准。运维中,DNS系统及数据库等服务的查询性能经常用每秒查询率来衡量。
IOPS(Input/Output Operation Per Second)每秒进行I/O操作的次数
IOPS,多用于数据库等场合,衡量随机访问的性能。存储端的IOPS性能和主机端的I/O是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次I/O需要多次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过|“发送写入请求、写入数据、收到写入请求”这三个步骤,也就是三个存储端访问。
常见企业网站排名及PV/IP访问量
WWW服务软件介绍
WWW软件全球使用排名参考
当前互联网主流Web服务说明
当前互联网主流Web服务软件
Apache:这是中小型Web服务的主流;
Nginx:大型网站Web服务的主流,Nginx的分支Tengine(http://tengine.taobao.org)目前也在飞速发展;
Lighttpd:这是一个不愠不火的优秀Web软件,社区不活跃,静态解析效率很高,在Nginx流行前,它是大并发静态业务的首选;
常用来提供动态服务的软件
PHP(FastCGI):大中小型网站都会使用,动态网页语言PHP程序的解析容器。它可配合Apache解析动态程序,不过,这里的PHP不是FastCGI守护进程模式,而是mod_php45.so(module)。也可配合Nginx解析动态程序,此时的PHP常用FastCGI守护进程模式提供服务;
Tomcat:中小企业动态Web服务主流,互联网Java容器主流;
Resin:大型动态Web服务主流,互联网Java容器主流;
IIS(Internet Informatica Service):微软windows下的Web服务软件;
Python(Uwsgi);
重点回顾:
1,用户访问网站基本流程;
2,DNS系统解析原理;
3,HTTP协议通信原理,包括HTTP协议、请求报文、响应报文、状态码等;
4,动态、静态概念特点及伪静态技术;
5,动态转静态Web优化方案;
6,IP、PV、UV的概念和区别;
7,并发的概念理解;
8,了解常用的WWW服务软件特点,如Apache、Nginx、IIS、Tomcat、PHP等;