慢连接&LazyParser
Author:放翁(文初)
Mail:fangweng@taobao.com
Tblog:weibo.com/fangweng
这里要从实际的测试中给Web应用开发者一个比较直观的关于慢连接优化的建议。
测试目标:
1. 证明慢连接对于Java的应用容器的影响。
2. 不同前端反向代理服务器对于慢连接的处理差异。
3. 如何利用LazyParser的方式来优化慢连接请求(特别是大数据量的一些异常请求的处理)
测试部署环境描述:
Apache服务器(2.2.19版本)配置基本没变,增加了http proxy模块作为反向代理。
Nginx服务器(1.0.4版本)配置基本没变,增加了反向代理。
Jetty服务器(7.1.6版本)配置基本没变。Jetty的Lazy解析缓存为8k。
部署如下,外部请求可以通过三个入口访问应用真实逻辑。(apache,nginx,jetty)
测试代码:
服务端:
简单描述一下逻辑:
1. 根据http消息头判断采用lazy还是普通方式解析。
2. 输出start test表示开始。
3. 获取key1,key2的内容,并记录消耗时间输出phase 1 use:xxx作为获取这两个参数的消耗。
4. 获取key4的内容,并记录消耗时间输出phase 2 use:xxx作为获取这个参数的消耗。
5. 获取key3的内容,并记录整个请求消耗的时间,输出end total use:xxx,作为整个处理消耗的时间。
客户端代码:
1. 配置不同入口访问应用。
2. 是否设置使用lazy的http header来引导服务端处理。
3. 构建参数集合,参数顺序为(key1,key2,key3,key4)。其中key3作为一个大数据字段可变,用于多个场景测试。
测试结果及分析:
1. 设置key3大小为1000个char,对比多个场景:
a. 不用lazy解析模式
(1) 通过nginx访问:
Nginx日志(第一位是消耗时间单位秒):0.002 115.193.162.12 - - [20/Jun/2011:10:50:44 -0400] "POST /cometpipe/slowtest?key1=1 HTTP/1.1" 200 19 "-" "Jakarta Commons-HttpClient/3.0.1" "-"
Jetty日志:
start test: not use lazy
phase 1 use :0
phase 2 use :1
end total use:1
(2)