上上周末拜读了曹伟-鸣嵩的头条文章《提高单机短连接QPS到20万》,结合自己的思考,写点小感悟。
作者介绍
首先说下曹伟-鸣嵩是谁:曹伟,阿里巴巴-阿里云资深技术专家(P9?),擅长C++、网络编程、中间件、底层协议等领域。
原文链接:http://weibo.com/ttarticle/p/show?id=2309404037884855362229#_rnd1478422720948
原文简介
文章不是很长,总结下来,就如下几句话:
1.tcp应该由客户端发起连接关闭。
2.默认情况下,客户端关闭TCP连接后本地的临时端口会长时间进入TIME_WAIT状态,这对QPS提升限制很大。
3.某些场景下,提高QPS就是提供更多的端口。方法就是:提供更多的端口和端口更快的复用回收。
4.通过调整参数等方法,可以将qps达到20w,让内核态网络协议负载饱和。
为什么要让客户端发起连接关闭?
这里我们首先看下tcp的四次分手。由于tcp设计上是非常严谨的,其协议可以做到不可靠网络下的可靠传输,在这里也就是说分手过程中,任何一个信号发送失败,都会有对应的重试容错机制,整个连接关闭过程都会可靠实现。具体的分手细节我这里就不再累叙,大家感兴趣可以私下细聊。
综上timewait在分手最后一个环节扮演重要角色,可靠地实现TCP全双工连接的终止。同时避免了,因为不可靠网络带来的重复连接,允许老的重复分节在网络中消逝。
但是,在内网这种可靠网络情况下,仍然采取默认设置或者说是标准协议的话,带来的开销是不容小视的。
为了实现“允许老的重复分节在