关闭

专访李林锋:我与Netty那些不得不说的事

1089人阅读 评论(0) 收藏 举报
分类:

Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的。擅长Netty的开发者朋友对此再熟悉不过了。近日,CSDN采访了Netty领域的权威人士李林锋,请他解析Netty的主要特性以及适合哪些开发场景,分享学习Netty的经验之道。

“无论工作再忙,都需要抽些时间来学习和思考,看看业界的技术动态,想想自己未来的发展方向,选择性的找1-2个重点目标,围绕这些目标做针对性的学习。” 林锋如是说。


李林锋

CSDN:你是从什么时候开始接触Netty的?是什么地方吸引了你?

李林锋:大约在2011年左右,当时我们自己研发的NIO功能模块已经上线运行3年多,在这个领域的积累还是比较深厚的,大家都认识到了非阻塞I/O在电信软件领域的价值。当有新的产品立项时,首选的基础通信技术就是采用NIO,选择Netty而非自研产品的原因如下:

1. 自研的NIO通信模块与网关类产品功能有一定的耦合,重新梳理依赖关系,做成通用的通信框架,工作量还是比较大的;

2. 我大概花了一个月的时间阅读了Netty和Mina的主要代码,从架构、功能、API DOC、User Guide等多个角度对它们进行了深入分析,发现它们的代码质量还是非常高,核心代码量又不是很大,自己维护起来不太困难,正好功能又能完全满足我们新产品的需求,可以直接使用,提升开发效率;

3. Netty的社区非常活跃,Bug修复速度很快,使用Netty的开源产品也非常多,经历过很多项目的商用检验,这对电信类软件技术选型至关重要;

4. 在华为,我们可能会对开源产品做安全最小集、可靠性和可服务性改造,因此通常会修改开源产品的源码,Netty使用Apache License,允许这种修改,商用也没有限制。

基于上述几个原因,最终我们选择Netty作为华为电信软件的首选基础通信框架。

CSDN:Netty主要有哪些特性?主要适用于年哪些开发场景?

李林锋:Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证。

主要特性如下:

  1. API使用简单,开发门槛低;
  2. 功能强大,预置了多种编解码功能,支持多种主流协议;
  3. 定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展;
  4. 性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;
  5. 成熟、稳定,Netty修复了已经发现的所有JDK NIO Bug,业务开发人员不需要再为NIO的Bug而烦恼;
  6. 社区活跃,版本迭代周期短,发现的Bug可以被及时修复,同时,更多的新功能会加入;
  7. 经历了大规模的商业应用考验,质量得到验证。

Netty在互联网、大数据、网络游戏、企业应用、电信软件等众多行业已经得到了成功商用,它的主要使用场景如下:

  • 构建高性能、低时延的各种Java中间件,例如MQ、分布式服务框架、ESB消息总线等,Netty主要作为基础通信框架提供高性能、低时延的通信服务;
  • 公有或者私有协议栈的基础通信框架,例如可以基于Netty构建异步、高性能的WebSocket协议栈;
  • 各领域应用,例如大数据、游戏等,Netty作为高性能的通信框架用于内部各模块的数据分发、传输和汇总等,实现模块之间高性能通信。

CSDN:与其他一些Java领域开发框架相比,它的优势在哪?在处理并发事件上,Netty有哪些独特的功能?

李林锋:最大的优势有三个:

  1. 通信是软件最基础的功能之一,Netty是最流行的Java NIO通信框架,因此它的使用范围非常广;
  2. API简单,学习资料多,用户上手快,开发效率非常高;
  3. 社区活跃,用户群行业分布广,生态链比较好。

Netty的并发处理能力主要体现在两个方面:

  1. 利用Java语言自身的多线程机制实现消息的并行处理;
  2. 利用Java NIO类库的Selector实现多路复用,一个NIO线程可以同时并发处理成百上千个通信链路,实现海量客户端的并发接入和处理。

CSDN:是什么原因促使你写下《Netty权威指南》这本书的?这本书的思路是怎样的?对读者而言如何学习这本书,有哪些建议呢?

李林锋:最大的原因还是Netty爱好者的鼓励吧,2013年底的时候分享了一些Netty的学习案例材料,文章分享多了,很多Netty和NIO编程爱好者就建议我能够出一本Netty方面的书籍,帮助大家更好的、系统性的学习Netty。Netty的基础入门比较简单,但是要掌握技术细节、理解它的工作原理又有一定难度。因此,抱着分享和帮助初学者的想法,我就写了《Netty权威指南》。

《Netty权威指南》的写作思路是帮助初学者入门,同时兼顾想深入了解Netty源码和架构原理的中高端开发者。因此本书前半部分是基础入门章节,后面是源码和架构分析,适合不同层次的读者阅读。

对读者而言,我的建议是理论学习+ 实践相结合,能够把本书的例程亲自开发并调试一下,如果能够结合自己的工作场景举一反三,学以致用,那是最好不过了。

CSDN:你现在主要使用哪种语言进行开发?你平时最常用的开发工具有哪些?

李林锋:目前主要使用Java,偶尔也使用GO和其它一些脚本语言进行开发。因为以Java开发为主,所以通常选择Eclipse等IDE工具。

CSDN:你是通过哪些方式来提升个人技能的?

李林锋:对自己学而不厌,对他人诲人不倦。分两个维度来看待个人技能提升。

学的角度:1) 在实际工作中接受更多挑战,在解决问题过程中提升技能。我平时比较喜欢阅读代码,偶尔也自己写代码,离代码远了之后,技术判断力会下降;2) 与行业高端专家的交流,例如与华为美研所、谷歌的专家进行周期性的交流,这有利于我洞察硅谷最新的技术动态和行业发展趋势;3) 积极参与行业大会,例如国外的AWS,国内的QCon等,从别人的经验和分享中汲取营养,为我所用。

教的角度:现在也经常给业务培训,或者给读者答疑,在帮助别人的同时,可以让你的视野更开阔,了解到更多的行业应用和使用案例。经验在不断解决问题的过程中不断积累,脱离实战,个人能力很容易达到瓶颈而停滞不前,学习如逆水行舟,不进则退。

CSDN: 从一名技术开发者到华为软件平台架构部架构师,再到《Netty权威指南》作者。回头看这一路的努力和经历,有哪些让你最为难忘的人或事?

李林锋:我工作了8年,算上大三时就在东软实习,已经9年多了。回头看之前走过的路,可以用“回首向来萧瑟处;归去,也无风雨也无晴”来形容我现在的心情,现在很多东西已经看的很淡了。

最难忘的人:2008年在金融危机爆发前我从东软来到了华为,刚入职2天就被派到北京中国移动现场出差,我的思想导师就是我们的PM,现场开发压力是非常大的,项目组老员工很少,尽管我只工作了1年,仍被领导给予厚望。由于在东软的时候做的是ERP系统,到华为之后做的是电信软件,两者的差异非常大,当时我的压力还是非常大,有种茫然无措的感觉。

入职1个月之后,金融危机全面爆发,那个时候有传闻说公司要严格执行5%淘汰比例,新员工可能是淘汰重灾区,我们这些新员工心理压力都非常大。我的导师看出端倪之后,在生活方面经常带我出去参与集体活动,缓解我的压力,有时自掏腰包,带我出去活动。在工作上,给我分享了很多与项目相关的技术文档和参考代码,也经常会主动找我探讨技术方案,给予我指导,帮我指引方向。在导师的帮助下,我逐渐适应了华为的环境,自身的积极性也被充分调动了起来。不仅承担了最核心模块的开发,而且还被任命为实时交易模块的开发小组组长,最后提前1个半月就转正了,是同批新员工中转正最早的。

现在回想起那段经历,仍然心有余悸。远离华为研发基地,一帮新员工需要从无到有全新开发一个新项目,没有足够的资源支撑,只有不断的需求变更和不断压缩的系统上线时间。项目能够成功交付,我自己能够坚持下来,多亏我的导师,感谢我的导师董鹏越。

一个好的导师对新员工的健康成长非常重要,也希望所有的导师能够真正关心和指导自己的徒弟,让他们尽快适应并融入新环境。

CSDN:给开发者分享些经验吧。

李林锋:无论工作再忙,都需要抽些时间来学习和思考,看看业界的技术动态,想想自己未来的发展方向,选择性的找1-2个重点目标,围绕这些目标做针对性的学习。

学而不精是大忌,不要贪多,在刚入职的2-3年,需要把基础知识夯实,在此之上,选择自己真正感兴趣的领域发力,学透学精,争取成为行业专家,更好的发挥自己的价值。

作者简介:李林锋,2007年毕业于东北大学,2008年进入华为公司从事高性能通信软件的设计和开发工作,有7年NIO设计和开发经验,精通Netty、Mina等NIO框架和平台中间件,现任华为软件平台架构部架构师,《Netty权威指南》作者。目前从事华为下一代中间件和PaaS平台的架构设计工作。


转载自:http://www.csdn.net/article/2015-07-08/2825161-Netty

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1354497次
    • 积分:18496
    • 等级:
    • 排名:第512名
    • 原创:220篇
    • 转载:1763篇
    • 译文:4篇
    • 评论:93条