[Netty在Apache ServiceComb] 中的实践问题答疑
Posted Netty之家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Netty在Apache ServiceComb] 中的实践问题答疑相关的知识,希望对你有一定的参考价值。
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做性能优化。
一些朋友反映由于加班等原因没能完整的看直播,现将直播回放链接也分享给大家,点击左下角【阅读原文】观看完整版视频:
就有机会获得赠书,活动截止时间:2018年12月3号晚上 21:00点
以上是关于[Netty在Apache ServiceComb] 中的实践问题答疑的主要内容,如果未能解决你的问题,请参考以下文章
微服务直播Netty和Vert.x在Apache顶级项目ServiceComb中的应用
直播精彩回顾+开奖当Netty大咖遇到ServiceComb首席committer 唇枪舌战为哪般?
直播!《Netty进阶之路》作者ServiceComb社区首席Committer都来了!