《Netty权威指南》是异步非阻塞通信领域的经典之作,基于最新版本 Netty 5.0编写,是国内首本深入介绍 Netty原理和架构的技术书籍,也是作者多年实战经验的总结和浓缩。内容包含基础功能、高级应用、系统架构、源码分析和行业应用,深入阐述了 Java I/O的 Netty NIO开发、Netty编解码开发、Netty多协议开发等各方面的技术要点,包含了对源码的深刻解读,并且对 Netty的应用现状和未来趋势进行分析,旨在帮助从业人员提升自我,更快更明确地发展职业道路。
本书适合架构师、设计师、软件开发工程师、测试人员和其他对 Java NIO框架、Java通信感兴趣的相关人士阅读,相信通过学习本书,能够熟悉和掌握 Netty这一优秀的异步通信框架,实现高可用分布式系统的构建。
1. Netty是最出色、应用最广泛的NIO框架,目前中国市场上并没有同类书籍,国外英文版的书籍售价50多$;
2. 从社区的活跃度看,想要深入了解Netty的架构师、设计师和软件工程师非常多,但是其源码没有注释、架构比较复杂、部分代码很晦涩,造成阅读源码难度比较大,很多人期待有本专门介绍Netty架构和源码的书籍。
大约在 2008年的时候,我参与设计和开发的一个电信系统在月初出帐期,总是发生大量的连接超时和读写超时异常,业务的失败率相比于平时高了很多,报表中的很多指标都差强人意。后来经过排查,发现问题的主要原因出现在下游网元的处理性能上,月初的时候 BSS出帐,在出帐期间 BSS系统运行缓慢,由于双方采用了同步阻塞式的 HTTP+XML进行通信,导致任何一方处理缓慢都会影响对方的处理性能。按照故障隔离的设计原则,对方处理速度慢或者不回应答,不应该影响系统的其他功能模块或者协议栈,但是在同步阻塞 I/O通信模型下,这种故障传播和相互影响是不可避免的,很难通过业务层面解决。
受限于当时 Tomcat和 Servlet的同步阻塞 I/O模型,以及在 Java领域异步 HTTP协议栈的技术积累不足,当时我们并没有办法完全解决这个问题,只能通过调整线程池策略和 HTTP超时时间来从业务层面做规避。
2009年,由于对技术的热爱,我作为业务骨干被领导派去参加一个重点业务平台的研发工作,与两位资深的架构师(其中一位工作 20年,做华为交换机出身)共同参与。这是我第一次全面接触异步 I/O编程和高性能电信级协议栈的开发,眼界大开 ——异步高性能内部协议栈、异步 HTTP、异步 SOAP、异步 SMPP……所有的协议栈都是异步非阻塞。后来的性能测试表明:基于 Reactor模型统一调度的长连接和短连接协议栈,无论是性能、可靠性还是可维护性,都可以“秒杀”传统基于 BIO开发的应用服务器和各种协议栈,这种差异本质上是一种代差。
在我从事异步 NIO编程的 2009年,业界还没有成熟的 NIO框架,那个时候 Mina刚刚开始起步,功能和性能都达不到商用标准。最困难的是,国内 Java领域的异步通信还没有流行,整个业界的积累都非常少。那个时候资料匮乏,能够交流和探讨的圈内人很少,一旦踩住“地雷”,就需要夜以继日地维护。在随后 2年多的时间里,经历了 10多次的在通宵、凌晨被一线的运维人员电话吵醒等种种磨难之后,我们自研的 NIO框架才逐渐稳定和成熟。期间,解决的 BUG总计 20~30个。
从 2004年 JDK1.4首次提供 NIO 1.0类库到现在,已经过去了整整 10年。JSR 51的设计初衷就是让 Java能够提供非阻塞、具有弹性伸缩能力的异步 I/O类库,从而结束 Java在高性能服务器领域的不利地位。然而,在相当长的一段时间里, Java的 NIO编程并没有流行起来,究其原因如下。
1.大多数高性能服务器,被 C和 C++语言盘踞,由于它们可以直接使用操作系统的异步 I/O能力,所以对 JDK的 NIO并不关心;
2.移动互联网尚未兴起,基于 Java的大规模分布式系统极少,很多中小型应用服务对于异步 I/O的诉求不是很强烈;
3.高性能、高可靠性领域,例如银行、证券、电信等依然以 C++为主导, Java充当打杂的角色, NIO暂时没有用武之地;
4.当时主流的 J2EE服务器,几乎全部基于同步阻塞 I/O构建,例如 Servlet、Tomcat等,由于它们应用广泛,如果这些容器不支持 NIO,用户很难具备独立构建异步协议栈的能力;
5.异步 NIO编程门槛比较高,开发和维护一款基于 NIO的协议栈对很多中小型公司来说像是一场噩梦;
一 NIO框架不成熟,很难商用;
一 NIO的陌生和认识不足,没有充分重视。
基于上述几种原因, NIO编程的推广和发展长期滞后。值得欣慰的是,随着大规模分布式系统、大数据和流式计算框架的兴起,基于 Java来构建这些系统已经成为主流, NIO编程和 NIO框架在此期间得到了大规模的商用。在互联网领域,阿里的分布式服务框架 Dubbo、RocketMQ,大数据的基础序列化和通信框架 Avro,以及很多开源的软件都已经开始使用 Netty来构建高性能、分布式通信能力, Netty社区的活跃度也名列前茅。根据目前的信息, Netty已经在如下几个领域得到了大规模的商业应用。
1 互联网领域;
2 电信领域;
3 大数据领域;
4 银行、证券等金融领域;
5 游戏行业;
6 电力等企业市场。
2014年春节前,我分享了一篇博文《 Netty5.0架构剖析和源码解读》,短短 1个月下载量达到了 4000多。很多网友向我咨询 NIO编程技术、 NIO框架如何选择等问题,也有一些圈内朋友和出版社邀请我写一本关于 Netty的技术书籍。作为最流行、表现最优异的 NIO框架, Netty深受大家喜爱,但是长期以来除了 UserGuide之外,国内鲜有 Netty相关的技术书籍供广大 NIO编程爱好者学习和参考。由于 Netty源码的复杂性和 NIO编程本身的技术门槛限制,对于大多数读者而言,通过自己阅读和分析源码来深入掌握 Netty的设计原理和实现细节是件困难的事情。从 2011年开始我系统性的分析和应用了 Netty和 Mina,转瞬间已经过去了 3年多。在这 3年的时间里,我们的系统经受了无数严苛的考验,在这个过程中,对 Netty和 Mina有了更深刻的体验,也积累了丰富的运维和实战经验。我们都是开源框架 Netty的受益者,为了让更多的朋友和同行能够了解 NIO编程,深入学习和掌握 Netty这个 NIO利器,我打算将我的经验和大家分享,同时也结束国内尚无 Netty学习教材的尴尬境地。
联系方式
尽管我也有技术洁癖,希望诸事完美,但是由于 Netty代码的庞杂和涉及到的知识点太多,一本书籍很难涵盖所有的功能点。如有遗漏或者错误,恳请大家能够及时批评和指正,如果你有好的建议或者想法,也可以联系我。我的联系方式如下。
邮箱:neu_lilinfeng@sina.com。
新浪微博: Nettying。
微信:Nettying。
致谢
如果说个人能够改变自己命运的话,对于程序员来说,唯有通过不断的学习和实践,努力提升自己的技能,才有可能找到更好的机会,充分发挥和体现自己的价值。我希望本
书能够为你的成功助一臂之力。
感谢博文视点的策划编辑丁一琼和幕后的美编,正是你们的辛苦工作才保证了本书能够顺利出版;感谢华为 Netty爱好者和关注本书的领导同事们的支持,你们的理解和鼓励为我提供了足够的勇气。感谢我的家人和老婆的支持,写书占用了我几乎所有的业余时间,没有你们的理解和支持,我很难安心写作。
最后感谢 Netty中国社区的朋友,我的微博粉丝和所有喜欢 Netty的朋友们,你们对技术的热情是鼓励我写书的最重要动力,没有你们,就没有本书。希望大家一如既往的喜欢 NIO编程,喜欢 Netty,以及相互交流和分享,共同推动整个国内异步高性能通信领域的技术发展。
李林锋
5月 11日于南京紫轩阁