11月29日 19:30-20:30 在华为云视界举办了一场《Netty和Vert.x在Apache顶级项目ServiceComb中的应用》直播,线上听众提了很多关于Netty实践相关的问题,由于线上互动时间有限,很多问题没有在线答疑,现将典型问题整理出来,供大家参考。
1、问题1:Netty和Mina有哪些区别?公司的老项目是基于Mina构建的,有必要迁移到Netty吗?
答复:
1)两者相同点:
-
都是一个高性能的NIO通信框架,历史上两者有一些渊源
-
都提供了编解解码扩展机制和协议定制能力,可以方便的构建各种协议栈
2)两者差异:
-
功能差异,相比较而言,Netty的功能更丰富,提供了HTTP/2、MQTT,支持OpenSSL等
-
社区活跃度差异,Netty目前应用的范围、版本发布速度等更胜一筹
-
学习成本,Mina的API更加简洁和清晰,源码学习和维护成本更低一些,Netty的整个架构和代码更复杂一些,学习成本相对较高
如果公司其它一些项目中使用到了Netty,或者需要使用HTTP/2等Netty独有的新特性,可以考虑切换到Netty;如果是遗留项目,功能上没太多新需求,没有重构的必要性,则不建议切换。
2、问题2:Netty的高性能体现在哪些方面?
答复:请参考2014年我在infoQ发表的文章《Netty系列之Netty高性能之道》:
https://www.infoq.cn/article/netty-high-performance
3、问题3:Netty HTTP协议栈与Tomcat的HTTP协议栈有什么区别?
答复:
1)Tomcat的HTTP协议栈是Servlet2/3.X等的一种实现,是基于Servlet实现的,Netty的HTTP协议栈是一种更轻量级实现方式
2)性能方面,Netty的HTTP协议栈性能更高,大家可以自己做下性能对比测试(Netty通常场景下性能要高2-3倍左右)
3)在非Web场景下,例如不涉及到JSP、JS、Servlet的解析、执行和Portal展示,纯后台的HTTP调用,则使用Netty性能更高、也更加轻量,可以方便的被各种第三方容器集成。反之,如果是web场景,则仍然需要运行到Web容器中,例如Tomcat、Jetty。
4、问题4:Netty内部都有哪些队列,如何防止内存泄漏?
答复:Netty内部主要有三个队列,分别如下:
1) 消息发送队列ChannelOutboundBuffer,它是个无界队列,需要通过高低水位 控制来保护消息积压,防止OOM
2) NioEventLoop中的taskQueue,用于执行I/O相关的Task,需要业务自己做保护,如果投递的任务过多,会导致NioEventLoop忙于处理Task而影响消息的读写,如果严重积压会导致OOM
3) NioEventLoop中的scheduledTaskQueue,用于执行I/O相关的定时任务,例如定时发送心跳消息。需要业务自己做保护,防止OOM
上述三个队列都可能会发生OOM,需要对它们的长度和容量做监控和告警,《Netty进阶之路》中有更详细的介绍和示例代码实现。
5、问题5:在IoT中使用到了Netty,请问有什么性能优化措施?
答复:Netty在IoT中的性能优化,主要有如下几点措施:
1)操作系统参数优化,主要包括:文件描述符、TCP/IP相关参数、多网卡队列和软中断
2)Netty性能调优,主要包括:线程数、心跳优化、接收和发送缓冲区、内存池、I/O和业务线程分离、线程绑定、连接池以及针对并发连接数的流控等
3)JVM相关参数优化:GC策略和参数调优等
在《Netty进阶之路》中,专门有一章详细介绍了如果在IoT中对Netty做性能优化。
===============================================================================
完整录播地址:http://zhibo.huaweicloud.com/watch/2578836
【直播介绍】
Netty是Java高性能网络编程的明星框架,互联网公司程序员必须掌握的基础组件。Netty将Java NIO接口封装,提供了全异步编程方式,是个大Java项目的网络应用开发必备神器。
Vertx,是一个基于JVM、轻量级、高性能的应用平台,非常适用于移动端后台、互联网、企业应用架构。Vert.x框架基于事件和异步,依托于全异步Java服务器Netty,并扩展了很多其他特性,以其轻量、高性能、支持多语言开发而备受开发者青睐。
ServiceComb,业界第一个Apache微服务顶级项目, 是一个开源微服务框架,提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。华为微服务引擎CSE(Cloud Service Engine)提供ServiceComb商业版。
【直播议题】
-
何为Netty,Vertx,与ServiceComb有何关系?
-
ServiceComb支持同步和异步调用,如何实现异步转同步?
-
ServiceComb如何实现Reactive机制,与Netty的NIO线程有何关系 vs Netty的Reactor线程模型
-
从API接口契约、协议标准化等角度解读ServiceComb同时支持的Highway和私有RPC协议 vs 内部RPC使用HTTPS的进阶之路
-
ServiceComb与HTTP/2
-
ServiceComb实战利器之性能统计,通信队列排队、还是工作线程阻塞,统统帮你搞定 vs 《Netty进阶之路》之性能统计
-
Netty本身不支持HTTP连接池,ServiceComb是如何实现连接池