软件名称 | 性能 | 功能 | 过滤规则配置 |
Squid | 不能多核是硬伤; 磁盘缓存容量有优势; 性能中等 | 多; 支持ACL角色控制; 支持ICP缓存协议 | 支持外部文件读取及热加载; 支持热启动 |
Varnish | 多核支持; 内存缓存; 性能强 | 够用; 支持集群,但不支持ICP集群; 支持后端存活检查 | 不支持外部文件读取; 需要转义; 支持热启动 |
Nginx | 多核支持; 支持代理插件; 性能较强 | 多; 支持集群,但不支持ICP集群; 支持后端存活检查; 通过插件可以充当多角色服务器 | 不支持外部文件读取; 需要转义; 支持热启动 |
Apache TS | 多核支持; 磁盘/内存缓存; 性能强 | 够用; 支持后端存活检查; 支持ICP协议,Cluster不稳定; 支持插件开发; | 支持外部规则文件读取及热加载; 支持热启动 |
HAProxy | 多核支持; 无缓存; 支持HTTP头部解析; 性能强 | 少,只专注HTTP头部解析和转发功能; 支持ACL角色控制; 支持后端存活检查 | 支持外部规则文件读取及热加载; 支持热启动; 支持会话粘滞和长连接 |
现在,我们对这三层功能结构充分了解,在测试调优及生产线的实践检验中,我们发现:
- HTTP防御性能:HAProxy在应对大流量CC攻击时,做正则匹配及头部过滤时,CPU消耗只占10%~20%。其它软件均狂占CPU资源约90%以上,容易成瓶颈导致整个系统无响应。
- 反向代理性能:单纯转发效率以内存缓存型的Varnish性能最强,ATS和Nginx次之,考虑大容量缓存因素,ATS也是个不错的选择。Nginx是专门针对C10K的产物,性能不错,配合自己编写插件,业务可塑性很强。
- 过滤规则的可配置性:HAProxy,ATS,Squid均支持规则文件读取、ACL定制和热加载、热启动。Nginx则不支持外部文件正则匹配,略差一点,但可塑性强。