构建高性能Web站点(修订版)2012.6
- p14 ‘反馈机制’:逐包确认 --> 小batch连续发送
- 一定需要全局编址吗?(可以使用邻居路由+端到端IBE)
- 电磁波速度:铜线中电信号2.3*10^8,光纤约2*10^8(全反射增加了传输距离)
- 系统负载:/proc/loadavg
- 上下文切换:Nmon
- IOWait(注意一点:磁盘IO是串行的!)
- 减少系统调用... ZeroCopy?AIO?
- strace:每次请求都要检测.htaccess?(哦,设置了AllowOverride all)
- 内存分配:Apache是多进程+内存池(prefork模式,VS work/M2M模式),
- 而NginX是单进程多线程:10000个非活跃http连接只需2.5MB内存
- 长连接:KeepAliveTimeout 30(默认5s)
- ab -n10000 -c100 -k http://...
- 进程阻塞查看:strace -p <PID> 这个工具不错
- 同步非阻塞I/O:一般只对网络I/O有效,O_NONBLOCK
- 多路就绪I/O:
- 4.2 BSD select
- Unix v3 poll
- Linux 2.4 SIGIO 边缘触发
- Sun Solaris /dev/poll
- /dev/epoll:+mmap(节省了fd复制?)
- Linux 2.6 epoll:EPOLLET(Lighttpd×,NginX支持)
- FreeBSD kqueue
- 内存映射
- strace:open --> mmap2 --> writev --> munmap(对小文件更好,大文件用sendfile)
- 直接I/O:O_DIRECT, 如InnoDB引擎用到
- 异步I/O(似乎底层用的是内核线程,并没有原生的实现?)
- 动态脚本加速
- Zend/zend_language_scanner.l <-- 最终映射到对C函数的调用,但似乎跟JIT还是不一样的?
- 作者所谓的opcode可能是针对PHP而言的,对Java应该是字节码(bytecode)
- apc.cache_by_default = on
- 或使用XCache/eAccelerator(嗯,这个时候HHVM还没出来呢)
- XDebug
- xdebug_time_index()
- xdebug_start_code_coverage(); <-- ?这个是怎么实现的
- Profiler:xdebug.profiler_ouput_dir/name=...%p
- KCacheGrind图形方式查看
- Zend/zend_language_scanner.l <-- 最终映射到对C函数的调用,但似乎跟JIT还是不一样的?
- 浏览器缓存
- 协商:Last_Modified/ETag
- 不用协商:Expires(依据服务器端时间!)
- Cache-Control: max-age=30
- Web缓存
- 反向代理:反向NAT(DNAT)-->服务器集群
- Nginx:proxy_pass
- Squid --> Varnish:HTTP响应头部增加了Via:...字段
- VCL?wordpress:关闭admin以外的cookie设置
- ESI --> Ajax
- 用户IP:+ HTTP_X_FORWARDED_FOR
- Web组件分离
- 视频:吞吐率无意义,只要下载速度>码率即可
- 分布式缓存(memcached,略)
- 数据库性能优化
- p270 MemcacheDB
- Web负载均衡
- 动态DNS(RFC2126)
- IPVS:LVS-NAT LVS-DR(配置方法略)
- 共享文件系统(略)
- 内容分发和同步
- WebDAV、rsync、inotify+hash树
- 分布式文件系统(MogileFS,略)
- 数据库扩展
- 主从复制
- 读写分离(反向代理:MySQL Proxy + Lua配置)<-- 不错!这个工具很好!!
- 垂直分区*
- 水平分区:Spock Proxy(基于MySQL Proxy)
- 分布式计算:Gearman?
- 性能监控(略)
时间: 2024-10-13 01:32:43