以下内容为《构建高性能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过期时间,避免重复的请求开销
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。