书名:构建高性能Web站点
出版社: 电子工业出版社
ISBN:9787121170935
一 绪论
等待的时间:
(1) 数据在网络上的传输时间
(2) 站点服务器处理请求并生成回应数据的时间
(3) 浏览器本地计算和渲染的时间
二 数据的网络传输
数据如何发送
(1) 应用程序通过系统函数库接口(如send)向内核发出系统调用
(2) 系统内核将数据从用户态内存区复制到由内核维护的内核缓冲区(这块地址空间的大小有限,需要发送的数据以队列的形式进入)
(3) 内核通知网卡来取数据,网卡将数据复制到网卡缓冲区
(4) 网卡缓冲区的数据完成从字节到位的转换,网卡通过特定的物理装置产生不同的电信号(铜线)或是光信号(光纤)
三 服务器并发处理能力
1 吞吐率
单位时间内服务器处理请求数 单位:reqs/s
2 apache ab 压力测试
3 系统调用的减少对于降低请求处理时间有着不可忽视的作用
4 内存分配
Apache使用了基于内存池策略的内存管理方案,在运行开始便一次性申请大片内存作为内存池,随后需要的时候在内存池中直接获取,不需要再次分配
Nginx使用多线程来处理请求,这使得多个线程之间可以共享内存资源,从而是内存总体使用量大大减少
5 持久连接
在一次TCP连接中持续发送多份数据而不断开连接,与其相反的是短连接,也就是建立连接后发送一份数据便断开,然后再次建立连接发送下一份数据。建立TCP连接的操作开销较大,所以连接次数越少,越有利于性能的提升。主流Web服务器都支持长连接,Apache中默认长连接是打开的,配置文件httpd.conf中 KeepAliveTimeout 5。浏览器和服务器各自超时时间不同,以最短时间为准。
6 I/O模型
I/O模型分为很多种类型,比如内存I/O,网络I/O,磁盘I/O,这里讲的是网络I/O。
同步阻塞I/O:默认情况下socket都是阻塞的,进程调用某些涉及I/O操作的函数时,如:connect、accept、recv/recvfrom、send/sendto、closesocket,I/O操作完成后再继续运行
同步非阻塞I/O:在socket选项中设置O_NONBLOCK可以实现非阻塞I/O,非阻塞I/O通过反复轮询来尝试数据是否就绪,防止进程被阻塞,最大的好处是可以在一个进程中同时处理多个I/O事件
多路I/O就绪通知:可以同时处理多个connection,允许进程通过同一种方法同时监视所有文件描述符,并可以快速获得所有就绪的文件描述符。当数据就绪后,一般选择非阻塞方式。比如select和linux下的epoll
异步I/O:主动请求数据后便可以继续处理其他任务,随后等待I/O操作完毕的通知
四 动态内容缓存
缓存的目的就是把需要话费昂贵开销的计算结果保存起来,这里指动态内容自行实现缓存机制。
缓存和缓冲相似之处是都需要一块存储区,他们本质都于速度不一致有关,但缓存更加注重策略,也就是说缓存命中率。
分析研究Smarty缓存。
过期检查
局部无缓存
六 浏览器缓存
Firefox 地址栏输入about:cache查看缓存,采用二进制文件的方式来存储和管理缓存文件
缓存协商:浏览器向Web服务器请求内容,服务器告诉浏览器哪些可以缓存。下次请求这个内容时,询问服务器是否可以使用本地的缓存,服务器收到浏览器询问后需要做出果断回应,到底是允许浏览器使用本地缓存还是将最新内容传回浏览器
七 Web服务器缓存
涉及Apache的缓存技术,Apache提供两个扩展,分别是mod_disk_cache和mod_mem_cache,推荐用前者。
八 反向代理缓存
正向代理:客户端隐藏在代理服务器之后,代理端代理的是客户端。
反向代理:Web服务器隐藏在代理服务器之后,客户端通过反向代理服务器来间接访问Web服务器。服务端知道客户端,客户端不知道服务端,通过代理端连接服务端。代理端代理的是服务端。向代理的一个目的是基于缓存的加速。
用Nginx作为反向代理服务器,只需要设置proxy_pass指令即可,同时别忘打开mod_proxy模块
十二 Web负载均衡
HTTP重定向:当HTTP代理向Web服务器请求某个URL后,Web服务器可以通过HTTP响应头信息中的Location标记来饭后一个新的URL,这意味着HTTP大力需要继续请求这个新的URL,这便完成了自动跳转。HTTP重定向具备了请求转移和自动跳转的本领,所以可以用来实现负载均衡。
DNS负载均衡:DNS服务器可以完成域名到IP地址的一对多的映射,通过这点来实现负载均衡
反向代理负载均衡:核心是转发HTTP请求
IP负载均衡:在HTTP层面一下实现负载均衡,这些负载均衡调度器的工作必须由Linux内核来完成,比如位于内核的Netfilter和IPVS调度器
直接路由:在链路层工作,通过修改数据包的目的MAC地址,将数据包发到实际服务器上,实际服务器的响应数据包井直接发送给用户端,而不经过调度器
IP隧道
十八 性能监控
实时监控:Nmon+Nmon Analser
监控代理:SNMP
系统监控:Cacti
本书完整版点击下载