构建高性能Web站点(修订版)笔记

本文探讨了构建高性能Web站点的技术和策略,包括减少系统调用、使用ZeroCopy和AIO等技术提升性能,介绍NginX如何高效处理大量非活跃连接,并讨论了KeepAlive连接的优化。此外还对比了Apache与NginX的内存使用情况,提出了动态脚本加速的方法,如使用APC和XCache等。

构建高性能Web站点(修订版)2012.6

  1. p14 ‘反馈机制’:逐包确认 --> 小batch连续发送
  2. 一定需要全局编址吗?(可以使用邻居路由+端到端IBE)
  3. 电磁波速度:铜线中电信号2.3*10^8,光纤约2*10^8(全反射增加了传输距离)
  4. 系统负载:/proc/loadavg
  5. 上下文切换:Nmon
  6. IOWait(注意一点:磁盘IO是串行的!)
  7. 减少系统调用... ZeroCopy?AIO?
    1. strace:每次请求都要检测.htaccess?(哦,设置了AllowOverride all)
  8. 内存分配:Apache是多进程+内存池(prefork模式,VS work/M2M模式),
    1. 而NginX是单进程多线程:10000个非活跃http连接只需2.5MB内存
  9. 长连接:KeepAliveTimeout 30(默认5s)
    1. ab -n10000 -c100 -k http://...
  10. 进程阻塞查看:strace -p <PID> 这个工具不错
  11. 同步非阻塞I/O:一般只对网络I/O有效,O_NONBLOCK
  12. 多路就绪I/O:
    1. 4.2 BSD select
    2. Unix v3 poll
    3. Linux 2.4 SIGIO 边缘触发
    4. Sun Solaris /dev/poll
    5. /dev/epoll:+mmap(节省了fd复制?)
    6. Linux 2.6 epoll:EPOLLET(Lighttpd×,NginX支持)
    7. FreeBSD kqueue
  13. 内存映射
    1. strace:open --> mmap2 --> writev --> munmap(对小文件更好,大文件用sendfile)
  14. 直接I/O:O_DIRECT, 如InnoDB引擎用到
  15. 异步I/O(似乎底层用的是内核线程,并没有原生的实现?)
  16. 动态脚本加速
    1. Zend/zend_language_scanner.l <-- 最终映射到对C函数的调用,但似乎跟JIT还是不一样的?
      1. 作者所谓的opcode可能是针对PHP而言的,对Java应该是字节码(bytecode)
    2. apc.cache_by_default = on
      1. 或使用XCache/eAccelerator(嗯,这个时候HHVM还没出来呢)
    3. XDebug
      1. xdebug_time_index()
      2. xdebug_start_code_coverage(); <-- ?这个是怎么实现的
      3. Profiler:xdebug.profiler_ouput_dir/name=...%p
        1. KCacheGrind图形方式查看
  17. 浏览器缓存
    1. 协商:Last_Modified/ETag
    2. 不用协商:Expires(依据服务器端时间!)
      1. Cache-Control: max-age=30
  18. Web缓存
  19. 反向代理:反向NAT(DNAT)-->服务器集群
    1. Nginx:proxy_pass
    2. Squid --> Varnish:HTTP响应头部增加了Via:...字段
      1. VCL?wordpress:关闭admin以外的cookie设置
    3. ESI --> Ajax
    4. 用户IP:+ HTTP_X_FORWARDED_FOR
  20. Web组件分离
    1. 视频:吞吐率无意义,只要下载速度>码率即可
  21. 分布式缓存(memcached,略)
  22. 数据库性能优化
    1. p270 MemcacheDB
  23. Web负载均衡
    1. 动态DNS(RFC2126)
    2. IPVS:LVS-NAT LVS-DR(配置方法略)
  24. 共享文件系统(略)
  25. 内容分发和同步
    1. WebDAV、rsync、inotify+hash树
  26. 分布式文件系统(MogileFS,略)
  27. 数据库扩展
    1. 主从复制
    2. 读写分离(反向代理:MySQL Proxy + Lua配置)<-- 不错!这个工具很好!!
    3. 垂直分区*
    4. 水平分区:Spock Proxy(基于MySQL Proxy)
  28. 分布式计算:Gearman?
  29. 性能监控(略) 
此文档一共两部分,此下载链接为第1部分。 第1章 绪论 1.1 等待的真相 1.2 瓶颈在哪里 1.3 增加带宽 1.4 减少网页中的HTTP请求 1.5 加快服务器脚本计算速度 1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.1 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.13 优化数据库 1.14 考虑可扩展性 1.15 减少视觉等待 第2章 数据的网络传输 2.1 分层网络模型 2.2 带宽 2.3 响应时间 2.4 互联互通 第3章 服务器并发处理能力 3.1 吞吐率 3.2 CPU并发计算 3.3 系统调用 3.4 内存分配 3.5 持久连接 3.6 I/O模型 3.7 服务器并发策略 第4章 动态内容缓存 4.1 重复的开销 4.2 缓存与速度 4.3 页面缓存 4.4 局部无缓存 4.5 静态化内容 第5章 动态脚本加速 5.1 opcode缓存 5.2 解释器扩展模块 5.3 脚本跟踪与分析 第6章 浏览器缓存 6.1 别忘了浏览器 6.2 缓存协商 6.3 彻底消灭请求 第7章 Web服务器缓存 7.1 URL映射 7.2 缓存响应内容 7.3 缓存文件描述符 第8章 反向代理缓存 8.1 传统代理 8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式缓存 10.1 数据库的前端缓存区 10.2 使用memcached 10.3 读操作缓存 10.4 写操作缓存 10.5 监控状态 10.6 缓存扩展 第11章 数据库性能优化 11.1 友好的状态报告 11.2 正确使用索引 11.3 锁定与等待 11.4 事务性表的性能 11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡 12.5 IP负载均衡 12.6 直接路由 12.7 IP隧道 12.8 考虑可用性 第13章 共享文件系统 13.1 网络共享 13.2 NFS 13.3 局限性 第14章 内容分发和同步 14.1 复制 14.2 SSH 14.3 WebDAV 14.4 rsync 14.5 Hash 14.6 分发还是同步 14.7 反向代理 第15章 分布式文件系统 15.1 文件系统 15.2 存储节点和追踪器 15.3 MogileFS 第16章 数据库扩展 16.1 复制和分离 16.2 垂直分区 16.3 水平分区 第17章 分布式计算 17.1 异步计算 17.2 并行计算 第18章 性能监控 18.1 实时监控 18.2 监控代理 18.3 系统监控 18.4 服务监控 参考文献 索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值