服务器长短连接应用分析

为什么希望把短连接改成长连接(persistent connection)?

纯理论分析

优点
1. 对于每个请求,减少三次握手。
2. 对于服务器,将会减少建立连接导致的开销。 包括内核进程分配TCB、建立连接时产生软中断、 内核进程与用户进程切换时的时间开销。
3. 因为tcp segments的减少,减轻了网络的负担。
4. 更关键的是,减少响应时间。

缺点
1. 服务器(或代理服务器)需要维护连接队列, 这将导致内存开销增大。
2. 其它,还没想到

HTTP是基于TCP的应用层协议,一个完整的HTTP事务中, 服务器和客户端是这么交互的。
3114802092281148676.jpg
三次握手结束时,客户端与服务器约定好TCP窗口大小, 服务器的窗口最小值默认为4096字节。
在server与client都处于连接态时, client向server发送request, server处理结束时, server向client发送response。
长连接与短连接的最大区别就在于, 在保持连接的过程中减少了三次握手以及四次分手的时间和系统开销

应用分析
1. api接口返回的数据平均大小?
取2.80上100000条连续的nginx访问日志进行分析, 返回的  http response 的大小分布是(以4k做为分隔):

size < 4000                  95233          95.2%
4000 <= size < 8000   636             0.6%
size >= 8000                4018           4.0%

max : 277909
min  : 0
cnt   : 100000
sum : 3059716
avg  : 30 bytes/request


2. 十、二十、三十分钟内,api 的会话数,平均每会话发起的请求数?
取10.20的api日志进行分析。 这个时候api的日活跃用户为15w,周报活为60w)会话=userid:deviceid
  时间 会话数 总请求数 requests/session
10分钟 10:00 ~ 10:10 42677 1005937 23.5
20分钟 10:00 ~ 10:20 72048 1913270 26.5
30分钟 10:00 ~ 10:30 98959 2715227 27.4

     3. 从应用的情况来看,适宜将长连接的时间保持在10分钟,且每连接处理请求上限为50。

测试情况简述
1. 测试工具:短连接 apache bench;长连接 autobench;
2.  测试过程简述:客户端(apache-bench or autobench)向服务器发起n个静态页面请求。 记录从第一个请求和最后一个请求的响应时间t1及t2, 记录服务器平均每秒处理的请求数。 同时通过cacti记录t1和t2间系统的状况。
3. 测试数据
concurrent 测试类型 last time(s) request count rps cpu(max) system loads
(1minute,max)
系统TCP状态
300 短连接 168.783 1,200,000 7109.74 user: 7.4
sys: 14.59
soft-iraq: 18.15
sum: 40.87
4.64  
长连接 240 640,000 2666.67 user:2.88 
sys:4.48
soft-iraq:3.66
sum:11.24
1.5 ESTABISHED 0
ACTIVE  1602
1200 短连接 144.791 1,200,000 8287.8 user: 8.76
sys:15.11
soft-iraq:19.56
sum:44.05
5.88 ESTABISHED 184 
ACTIVE 12812
长连接 267 1,469,631 5504 user: 7.23
sys:9.37
soft-iraq:9.39
sum:26.52
5.15 ESTABISHED  1202
ACTIVE 6208
2400 短连接 171.292 1,200,000 7005.58 user: 8.79
sys:13.19
soft-iraq:16.95
sum:39.75
4.53 ESTABISHED  519
ACTIVE 21378
长连接 326 2244470 6884.88 user:7.06 
sys:8.90
soft-iraq:8.75
sum:25.22
4.93 ESTABISHED  1671
ACTIVE 4634

从测试的情况来看,采用长连接时, 系统的CPU相对来说处于较低的水平;而系统的吞吐率, 在并发连接数在1000以上时,才会明显一些;系统消耗的内存, 在百兆级别的范围内波动,在cacti上并不明显, 因而没有统计数据。

4. 后续跟进:因为测试工具、测试环境的限制, 比较难模拟高并发情况,将和客户端协商将短连接换成长连接, 并打开其中一台 api 服务器的nginx长连接开关,观察表现。


参考资料:
1. 短连接改成长连接之后tps 的提升
2. http persistent latency
3. lvs  源地址散列调度  http://blog.csdn.net/ixidof/article/details/6673634
6.  autobench(not ab!!!)  http://www.xenoclast.org/autobench/



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值