lenovoDTC / dubbo-G

lenovo dubbo degrade and developed
Apache License 2.0
114 stars 68 forks source link

Netty为什么不升级到4.x呢? #1

Open barrycheng opened 7 years ago

barrycheng commented 7 years ago

如题 升级Netty3.2.5 》》》》》 3.10.6

lenovoDTC commented 7 years ago

下个版本,我们会做Netty3 》》》 Netty4 的升级

lenovoDTC commented 7 years ago

dubbo2.5.3-G04 支持Netty4 兼容Netty3 默认为Netty3

barrycheng commented 7 years ago

Netty Native用C++编写JNI调用的Socket Transport,是由Twitter将Tomcat Native的移植过来。

Netty提供了以下平台特定的JNI传输: Linux (since 4.0.16) MacOS/BSD (since 4.1.11)

dubbo2.5.3-G04使用Netty 4.0.25版本,但是没用使用JNI的特性,性能相比Netty3应该没有什么提升,不知道您有没有做过性能测试?使用JNI之后可以使用一些Linux内核的特性,比如TCP Fast Open等等。

lenovoDTC commented 7 years ago

Netty4.0.25 使用了JNI C++ Native Epoll,针对Linux 采用EpollEvenLoop 由于Netty4 较Netty3 IO线程模型发生更改,dubbo single connection 模型下,较Netty3 性能低很多,但是通过配置connections 参数,在使用连接池,Netty4 要比Netty3性能高

lenovoDTC commented 7 years ago

不过,需要更改Netty4 的IO线程参数

barrycheng commented 7 years ago

好的,我稍后看下connections这块的代码。不过JNI调优之后,我测试的结果也比Netty3高很多。使用JNI之后在GC方面也有改善,性能更加平稳。

barrycheng commented 7 years ago

使用Netty Native官方的说明是需要引用netty-transport-native-epoll的,我在pom.xml里面没有发现呀。。。

io.netty netty-transport-native-epoll 4.1.11.Final linux-x86_64
lenovoDTC commented 7 years ago

我引用的netty-all,里面就包含netty-transport-native-epoll

barrycheng commented 7 years ago

dubbo single connection 模型下,修改配置connections 参数来欺负netty3我还是不是很认可。。。netty3修改连接数也会提升性能的。我都是在dubbo single connection下测试的。

lenovoDTC commented 7 years ago

netty3 线程模型和netty4 的差别很大。netty3 请求由worker线程处理。netty4 变成了单独的IO线程来处理 netty3 T时间内处理多个请求(不管single connection 还是multi connection),但是netty4 因为由独立的IO线程来处理,导致T时间内只能处理一个请求,所以single connection 模型下本身性能体现不出来。netty4 1 connetion 对应1个IO线程,所以只有在multi connections 下才能体现性能。而且netty4 这种线程模型,也是为了解决netty3 context switch 过多所导致的性能较低而设计出来的,所以,要比较两者性能高低,只有在multi connection 下进行比较。所以,我增加了netty4,并没有抛弃netty3,也是这个原因。Demo里我有多线程的例子,你可以测试一下,single connection 和 multi connection模型的差别

lenovoDTC commented 7 years ago

如何你做了什么优化,也可以提交上来,我们一起讨论,毕竟这是个开源项目