这一本是2009年出版的书,朋友推荐的。
刚开始我有些疑惑,已经是十年前的书了,要知道这十年间的Web技术有了天翻地覆的变化,那么这本书还值得阅读吗?由于朋友力荐,所以我翻开了此书。
粗翻目录,果然值得拜读,于是详细写一下笔记。
(未完待续)
Ch1. 绪论
概述了和Web站点性能相关的知识点。
Ch2. 数据的网络传输
这里花费不少篇幅举了一个火车运输的例子,用来解释网络传输的概念。
但是个人觉得,此例子十分难懂,且并不恰当,有种适得其反的作用。如果对这块内容感兴趣,不如直接翻开《计算机网络》这本书。
当然,本书也不是专门讲网络的,所以也理解作者了。
Ch3. 服务器并发处理能力
吞吐率
并发处理能力,一般用单位时间内服务器的请求数来描述其并发能力。也就是吞吐率,单位是reqs/s。
吞吐率是指在一定并发用户数的情况下,服务器处理请求能力的量化体现。
并发用户数是指在某一时刻同时向服务器发送请求的用户总数。
请求等待时间,一般我们所关心的有这样两种:用户平均请求等待时间;服务器平均请求处理时间。
并不存在一个对所有性质的请求都高效的并发策略。因此需要了解你的站点正在处理哪些性质的请求,并根据这些性质来选择最佳的并发策略。
CPU并发计算
操作系统通过多执行流体系设计使得多个任务可以轮流使用系统资源。
本部分描述了如下概念:进程、轻量级进程、线程、进程调度器、系统负载、进程切换、IOWaite、锁竞争。
IOWait:CPU空闲并等待I/O操作完成的时间比例。
锁竞争:在服务器处理大量并发请求的时候,多个请求处理任务之间也存在一些资源抢占竞争。我们一般采用“锁”机制来控制资源的占用。
系统调用
进程有用户态和内核态两种运行模式。进程在两种模式之间切换,也需要一定的开销。
系统调用涉及进程从用户态到内核态的切换,有比较昂贵的开销。因此,减少不必要的系统调用,是Web服务器性能优化的一个方面。
内存分配
Web服务器工作的过程中,需要用到大量的内存,因此内存的分配和释放尤其重要。
不同的Web服务器也有各自不同的内存分配策略,可以在了解后根据需要进行选择。
持久连接
从性能的角度看,建立TCP连接的操作本身便是一项不小的开销,所以在允许的情况下,连接次数越少,越有利于性能的提升。
持久连接的动机:尽量减少连接次数,尽量重用连接通道。
I/O模型
本书关注的I/O操作主要是网络数据的接受和发送,以及磁盘文件的访问。采用不同的I/O模型,会对性能有不同的影响。
同步阻塞I/O、同步非阻塞I/O、多路I/O就绪通知、内存映射、直接I/O、异步I/O、
服务器并发策略
几种常见的Web服务器并发策略:
一个进程处理一个连接,非阻塞I/O;
一个线程处理一个连接,非阻塞I/O;
一个进程处理多个连接,非阻塞I/O;
一个线程处理一个连接,异步I/O;
Ch4. 动态内容缓存
重复的开销
动态网页在多次请求时存在重复开销,因此考虑引入缓存技术。
页面缓存
将动态内容的计算结果进行缓存,并在需要的时候直接取出返回给用户。
对于动态网页来说,缓存的内容实际上就是动态网页输出的HTML,称为页面缓存(Page Cache)。对于其他的动态内容,比如动态图片或动态XML数据,也可以将它们的输出结果整体进行缓存,实现机制和动态网页是一样的。
局部无缓存
有些特殊的动态网页,需要页面中某一块区域的内容及时更新。流行的模板框架中,在整页缓存的基础上,都提供了局部无缓存的支持,它允许在页面中指定一块包含动态数据的HTML代码段,每次这些动态数据都需要实时计算,然后和其余部分的缓存合成为最终的网页。
静态化内容
前面几种动态内容缓存方法中,每次用户的请求都要首先被送到动态程序,然后动态程序根据缓存有效期来决定是否输出缓存。这种方法使得动态内容对于缓存数据有着较强的控制权,但是这种控制权的代价是比较昂贵的,它带来了性能上的不足。
网友评论