[Netty在Apache ServiceComb] 中的实践问题答疑

本文整理了《Netty和Vert.x在Apache顶级项目ServiceComb中的应用》直播中的典型问题,包括Netty与Mina的区别、Netty的高性能特点、与Tomcat HTTP协议栈的对比、内存泄漏预防及IoT中的性能优化措施。同时,介绍了ServiceComb在微服务架构中的角色及其与Netty的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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商业版。

【直播议题】

  1. 何为Netty,Vertx,与ServiceComb有何关系?

  2. ServiceComb支持同步和异步调用,如何实现异步转同步?

  3. ServiceComb如何实现Reactive机制,与Netty的NIO线程有何关系  vs Netty的Reactor线程模型

  4. 从API接口契约、协议标准化等角度解读ServiceComb同时支持的Highway和私有RPC协议   vs  内部RPC使用HTTPS的进阶之路

  5. ServiceComb与HTTP/2

  6. ServiceComb实战利器之性能统计,通信队列排队、还是工作线程阻塞,统统帮你搞定   vs  《Netty进阶之路》之性能统计

  7. Netty本身不支持HTTP连接池,ServiceComb是如何实现连接池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值