浅读 《构建高性能Web站点》

偶然看到此书的推荐,发现自己也是好久没有静下心去读一本书了。所以,图书馆找到。
自己是比较浅的把书翻了一遍,这里记下一些比较有意思或者有启发的点吧

简介

  • 书名:构建高性能Web站点
  • 作者:郭欣
  • ISBN:9787121170935

改善性能和扩展规模的具体做法

这本书深入浅出,从方方面面的解释,如果去优化一个 Web 站点。从前面的 ab 压测开始介绍,到后面的内容缓存,浏览器缓存,数据库优化,以及反向代理等等。
虽然比较少接触到里面的一些内容,但是通过本书,也是很好的了解了,关于服务器的优化的各个方面,以及可以去优化的地方。

本书的绪论

序列部分,对书的各个章节做了一个引子。抨击了:速度不快就增加带宽的想法

数据网络传输

这一章写的比较有意思,因为全是局的各种例子,虽然学了计算机网络,不过,看起来还是收益不小。

  • 普通调度站
    相当于最早的集线器,所有的数据帧,不经分帧的转发到各个端口,很容易出现数据的碰撞
  • 高级调度站
    相当于交换机,可以根据路由表的mac把数据包进行精准转发

数据如何发送

这里从内核的角度解释了数据的发送,挺有意思的。

  1. 先把数据写入进程的内存空间里面去。
  2. 通过系统调用 send,向内核发起请求,内核进行数据拷贝,从用户空间拷贝到内核空间。而且发送数据以队列形式存在进行缓冲。
  3. 内核通知网卡控制器来取走数据,网卡控制器把内核网络数据搬运到网卡的缓冲区中。数据赋值都是按照数据的总线宽度的整数倍进行复制。比如 pci-x 的口是32 位宽度。
  4. 网卡缓冲区的数据被转换位线路中的电信号,并且数据被从缓冲区中清除。
  5. loop 至此实现网络的数据发送。

服务器的并发

吞吐率 reqs/s 之每秒完成的请求次数,这里就引出了 ab 来进行的压测。
ab -n 1000 -c 10 -H Host:test.example.org http://atom0:8080/


CPU 的大多数的时间都是消耗在 IO 的过程中。当fork() 占用了太多的资源,那么 apache 就使用了 prefork 的模型,实现了提前的fork 不过再大量的并发的时候,内存倒是成了问题。
在 top 命令里面的pr,意味着时间片的长短 一般为 PR*10ms ,系统负载 一般理解为 CPU 的负载状态 0~x 。当系统负载小于1的时候,说明进程正常被调度,大于一,表示会有进程不能及时的得到时间片。


进程分析的时候 strace 适用于进程的调用统计。很好用

IO模型

PIO 与 DMA

PIO 这种传输方式是需要CPU进行控制的,从磁盘读书数据到内存里面是需要通过CPU进行转发的,需要占用大量的CPU时间进行文件的读写。

后来有了 DMA 的方式,(Direct Memory Access)取代了PIO,直接向DMA下达指令,就可以直接通过系统总线进行数据传输。

  • 同步阻塞IO
    IO的阻塞等等,进程停下来,效率低
  • 同步非阻塞 IO
    需要轮询检测是否就绪,花费CPU时间
  • 多路IO就绪通知
    异步回调IO,select/poll/SIGIO/epoll,水平触发和边缘触发。
    SIGIO 是最快的方式,不过属于边缘出发,容易丢失状态

缓存

动态内容缓存

通过 PHP 的插件实现 一些动态结构的缓存

动态脚本加速

指的是对于 PHP 解释器的 OPcode 来进行缓存。

浏览器缓存

通过指定缓存的过期时间达到对内容进行缓存的目的,减少对服务器的请求

Web 服务器缓存

在webserver的配置里启用cache。

反向代理缓存

Ningx 里的反向代理,里对静态资源进行缓存。

分布式缓存

memcached 实现分布式的缓存系统

数据库优化

解决慢查询问题,又是大学问。当查询数据占表的多数时候线性查找是由于索引的

Web负载均衡

  • 通过重定向实现,可以使用 RR 的轮询方式,实现轮询的负载均衡。
  • 基于 DNS 的负载均衡,可以一个域名指向多条 A 记录。
  • DNS 的故障转移,如果TTL过久就不行,所以需要使用 DDNS 实现迅速的故障转移
  • 通过 反向代理实现 ,这里面应该是最常用的了。

IP负载均衡

这里在四层进行的负载均衡,需要去重点了解一下了,LVS作为IP负载均衡的各种组态。

  • LVS-NAT
    这里由网关作为内部子网的 NAT,请求和回源都经过网关主机,导致网关的吞吐量可能成为瓶颈。
  • LVS-DR
    主机和网关都处于 WAN 上,通过网关进行ip的负载均衡,通过Wan来进行回源,而无需通过网关,这样很大的提升了吞吐量。可以理解,网关和主机都是在一个wan上的,对外使用同一个 VIP ,

内容同步与分发

SSH,SCP,SFTP,rsync。

草草的翻过这本书,整体感觉不错,虽然接触较少,但是也是有了基本的印象和认真。
OK,就这样,下一本

标签:

留下点什么吧