同步操作将从 edgevagrant/JAVA-000 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
当前的网关大体模块如下图:
代码地址 netty-gatewayDemo : https://github.com/lw1243925457/netty-gatewayDemo
目前系统分为四个模块:server模块、route模块、client模块
类似于NGINX,将用户请求根据配置转发到相应的后端服务程序中。目前还不支持restful json的请求。
配置示例:
{
"server": {
"group1": [
"http://192.168.101.105:8080"
],
"group2": [
"http://192.168.101.105:8080",
"http://192.168.101.109:8080"
]
},
"route": [
{
"source": "/greeting",
"target": "group1"
},
{
"source": "/hello",
"target": "group2"
}
]
}
目前采用前缀匹配,示例如下:
这里压测一下网关,基本命令如下,在2分钟左右基本能得到稳定值,不再大幅度抖动
sb -u http://localhost:80/greeting -c 20 -N 120
得到的相关结果如下:
测试条件说明 | 测试结果 |
---|---|
不用网关直接访问单服务 | RPS: 5887.5 (requests/second) |
经过网关访问单服务 | RPS: 5191.9 (requests/second) |
经过网关访问两个服务器(负载均衡) | RPS: 5664.5 (requests/second) |
经过上面的测试数据可以发现,经过网关性能是要差一些的。感觉这样应该是正常的,毕竟网络链路都要多走一步。
如果后端服务的host和port相同的话,那就相当于代理了,经过测试,如果简单代理的话,性能几乎是相同的。
目前网关假设是后端服务会有不同的ip地址和端口,所以Server端测试的时候线程新建和销毁比代理要多,而且客户端必须是异步的,有状态的客户端会导致更多的线程新建和销毁。
&ensp ;经过网关访问两个服务器(负载均衡)的测试结果不是预料中的,想象中应该是两倍的性能,但这里要考虑到网关的性能是否能够支撑了。由于机器的性能基本上已经打满了,这里就没法去测试这个准确的。但可以看到相对于单服务器,两个服务器的性能是有所提升的。
目前来看功能上是达到作业要求了,但性能上可能有些不足。做下来感觉网关这个东西还有很多很多的点,这里只是一小部分,不简单。
没时间搞太详细的总结了,就简单的写写了,想写出一个Netty的同步非阻塞高性能客户端有点难,时间大部分花在这上面了,但还是没写出来
启动-创建连接-接收请求-处理业务-发送相应-断开连接-关闭服务
处理业务包含了编解码、过滤、拦截等操作
启动-连接服务端-发送请求-接收响应-处理业务-关闭服务
ctx.channel.write/ctx write 的区别
SimpleChannelInboundHandler/SimpleChannelOutboundHandler:一般最后的handler可以直接继承这个,会自动释放buf
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。