本文主要包括以下内容的介绍
硬件设备
计算机架构
性能设计
软件性能设计原则(不要让硬件成为瓶颈):
- 均衡使用CPU多核处理能力
- 消除不必要的性能消耗
- 高效合理地使用和控制内存
- 最大化磁盘IOPS和吞吐,异步化处理
- 小包跑满万兆网卡,中断平衡
CDN Cache系统模型设计
- Net模块: 支持大并发,跑满万兆网卡
- ACL模块: 高效匹配,减少CPU消耗
- Store模块: 提高命中率,高效利用磁盘IOPS
- 回源模块: L7-check,长连接保持
Net 模块设计
- I/O模型 – epoll + O_NONBLOCK
- TCP选项 – TCP_DEFER_ACCEPT / TCP_SYNCNT – TCP_CORK / TCP_NODELAY / TCP_QUICKACK
- 收发包的方式 – RSS, SMP_AFFNITY – SO_REUSEPORT
完美hash处理HTTP header
• 完美hash( Perfect Hash Function )
- Hash table: key = value
- PHF将key集合没有冲突地映射到一组整数
- 查找key操作转换为索引整数表
• PHF场景&作用
- 适合在key集合确定或不经常更新的情况
- 主要作用是提高hash查找的速度
Store模块设计
• DIRECT IO写裸盘、绕过FS、不使用page cache
• 顺序写/随机读,stripe 8MB/block 512B
• mem_buf在内存做写合并
• 省去open和close系统调用
故障排查
/proc/meminfo 项的关系
• MemTotal = LowTotal + HighTotal
• MemFree = LowFree + HighFree
• Slab = SReclaimable + SUnreclaimable
• Active = Active(anon) + Active(file)
• Inactive = Inactive(anon) + Inactive(file)
• Buffers + Cached = Active(file) + Inactive(file)
• AnonPages + Buffers + Cached = Active + Inactive
• SwapTotal = SwapFree + SwapCached
性能调优
参考
- http://tutorials.jenkov.com/soVware-architecture/computer-architecture.html
- http://exadat.co.uk/2015/01/29/cpus-memory-storage-and-database-engines-the-shape-of-things-to-come/
- http://mechanical-sympathy.blogspot.com/2013/02/cpu-cache-flushing- fallacy.html
- http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait/
- https://soVware.intel.com/en-us/ar0cles/detec0ng-memory-bandwidth- satura0on-in-threaded-applica0ons
- https://soVware.intel.com/en-us/ar0cles/op0mizing-applica0ons-for-numa
- https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram
- http://www.mimuw.edu.pl/~lichota/09-10/Optymalizacja-open-source/Materialy/ 10%20-%20Dysk/gelato_ICE06apr_blktrace_brunelle_hp.pdf
- http://codecapsule.com/2014/02/12/coding-for-ssds-part-2-architecture-of-an- ssd-and-benchmarking/
- http://codecapsule.com/2014/02/12/coding-for-ssds-part-3-pages-blocks-and-the- flash-transla0on-layer/