本文我们主要是想测试和研究几点:
基于Netty写的最简单的转发HTTP请求的程序,四层和七层性能的差异
三种代理线程模型性能的差异,下文会详细解释三种线程模型
池和非池化ByteBuffer性能的差异
本文测试使用的代码在:github.com/JosephZhu1983/
在代码里我们实现了两套代理程序:
![323e4ae6a42973e374b459e9e3ec1ca3.jpeg](https://i-blog.csdnimg.cn/blog_migrate/03ce7185cfcead664d74fe8cef596054.jpeg)
测试使用的机器配置是(阿里云ECS):
![f832c9eb30ce21ac095e335c1f093946.jpeg](https://i-blog.csdnimg.cn/blog_migrate/b45f079a87de88722b3d22d88a9c8617.jpeg)
一共三台机器:
server 服务器安装了nginx,作为后端
client 服务器安装了wrk,作为压测客户端
proxy 服务器安装了我们的测试代码(代理)
Nginx后端
nginx 配置的就是默认的测试页(删了点内容,减少内网带宽):
![1de03e0b8ca377e5a2c3f917a7be3059.jpeg](https://i-blog.csdnimg.cn/blog_migrate/938f63c7dcd1b0a2ec586e06fb231723.jpeg)
直接对着nginx压测下来的qps是26.6万:
![4d58a85cbd056730783b03ba0802a2a5.jpeg](https://i-blog.csdnimg.cn/blog_migrate/c8bb66175901509f8c9264dfab901bf2.jpeg)
有关四层和七层
四层的代理,我们仅仅是使用Netty来转发ByteBuf。 七层的代理,会有更多额外的开销,主要是Http请求的编码解码以及Http请求的聚合,服务端:
![b1e239f2b8c93152a4c77d06908f4ae7.jpeg](https://i-blog.csdnimg.cn/blog_migrate/912a0138b9f6d4d074caeebb2f80b0c1.jpeg)
客户端:
![2b57cd0b95e79d3ceac880b88363c210.jpeg](https://i-blog.csdnimg.cn/blog_migrate/604414e11ba09284c77b1451a143c75e.jpeg)
这里我们可以想到,四层代理因为少了Http数据的编解码过程,性能肯定比七层好很多,好多少我们可以看看测试结果。
有关线程模型
我们知道作为一个代理,我们需要开启服务端从上游来获取请求,然后再作为客户端把请