为什么 reuse_port
记得 2008 年做性能测试的时候,新进7台 lenovo 4核4g 服务器用于性能测试。
当时资源紧张,这7台服务器都装了双系统(win2003/centos5)空闲时用于做肉鸡(压测的agent)。
当时给nginx做了一系列测试,印象很深的是:在这批机器上,nginx状态页面的压测。
大概3年后,那批 lenovo 服务器已经没人瞧得上了,只能做肉鸡。
然而,一次不经意的测试,发现再牛的服务器,短连接最佳qps也高不了多少。
而且,肉鸡的资源没用完,被测试服务器的资源也用不完,网络也没瓶颈。
最后,我们发现了 so_reuseport。对,瓶颈在这(监听的入口)!
引入 lvs fullnat
当时用的 centos 5、6,内核版本都还在 2.6。
尝试过新内核,遇到一些奇怪的现象无力维护,最终放弃。
也可以用nginx监控多个ip来突破瓶颈(多虚拟几个ip),维护成本略高。
也可以用lvs的nat方式来做转发,然而nat对网络的要求你懂的。
最终我们决定使用 淘宝lvs,依赖 淘宝内核。
然后使用 fullnat ,将对外端口映射到每个节点的多个端口(而非多ip)。
曾在线上做过极端测试,效果非常显著。然后我们就上线了!
压测 reuse_port

探个究竟
测试环境