以下内容为《构建高性能Web站点》的读书笔记

因材施教

根据Web组件的来分析Web组件的差异

  • 文件大小

  • 文件数量

  • 内容更新的频率

  • 预计并发的用户数

  • 是否需要脚本解释器

  • 是否涉及大量CPU计算

  • 是否访问数据库

  • 访问数据库的主要操作是读还是写

  • 是否包含远程调用(RPC)

对应的优化方法

  • 是否使用epoll模型

  • 是否使用sendfile()系统调用

  • 是否使用异步I/O

  • 是否支持HTTP持久连接(HTTP Keep-alive)

  • 是否需要支持opcode缓存

  • 是否使用动态内容缓存以及有效期为多长

  • 是否使用Web服务器缓存以及有效期为多长

  • 是否使用浏览器缓存以及有效期为多长

  • 是否使用反向代理缓存以及有效期为多长

  • 是否使用负载均衡策略

Web组件的分离的目的是便于采取针对性的最佳优化方案,是的Web组件能够充分利用服务器资源,达到符合各自实际情况的吞吐率最大化(单位时间内的处理请求数,一般指每秒处理的请求权数)

组件拥有自己的域名

分离前
www.demo.com

分离后
images.demo.com
upload.demo.com
static.demo.com
js.demo.com
。。。

小问题

在对分离后的组件进行请求时,会把www.demo.com也带上,对于这个有两种解决方法

  • 限制cookies顶级域名只对主机域名服务

  • 使用顶级域名来指向web组件,例如:www.img-demo.com,保存了demo.com的所有图片资料

同时,使用上面的第二种解决方案,顺带解决了浏览器并发请求同一域名站点的请求数限制。参见下表格。

浏览器 HTTP /1.1 HTTP /1.0
IE 6,7 2 4
IE 8 6 6
Firefox 2 2 8
Firefox 3 6 6
Chomre 1,2 6 -

动态内容

  • 开启opcode动态缓存

  • 足够快的CPU(例如使用多核CPU)

  • 大的内存(内存不大,会使用swap空间,与硬盘之间频繁复制数据)

  • 多进程(多实例web进程或者fastcgi进程)

  • 与数据库保持高速连接(单机使用unix socket连接,多机只能通过TCP进行连接,跨机房建立DDN专线)

  • 可靠的数据中心

动态内容放在反向代理的后端,并且对一些动态内容进行了反向代理的缓存。

如果是使用web api的话,则可以单独设置域名,例如:api.demo.com,部署在反向代理后端之外,此时的数据不会被反向代理缓存

同时分离代理的好处

  • 域名更具有可读性,用户容易记忆

  • 有利于服务独立统计

  • 有利于服务独立扩展,该处涉及dns的负载轮询

同时压力小的时候,可以把所有域名指向一台服务器,静态内容再分发到其他服务器上

静态网页

  • 支持epoll

  • 非阻塞I/O

  • 异步I/O

  • sendfile()系统调用

  • 单进程

  • 使用Raid分区

  • 足够大的带宽

图片和样式表和Javascript

开启Web服务器的keep-alive,设置Expires过期时间,避免重复的请求开销


甄城
1.2k 声望35 粉丝