我曾在某乎的一条回答下看到这样一条评论:
确实,Netty 大家肯定都会,不会的绝对是初级或者XX
上面的说有失偏颇,学习技术没必要上升到人身攻击,更重要的是如何学会技术,面好的大厂,拿到高的薪资。
不过跳出来看,会用 Netty 不等于就会进行项目优化,会进行优化不等于会二次开发。成为一名高级的 Java 工程师,Netty 一定是必经之路,当然更牛的同学手写 NIO JDK 就不在内。
说回主题,高级 Java 程序员需要学习什么?
写这篇文章之前,我试着在各大招聘网站检索 Netty,以下岗位都要求了会使用或熟悉 Netty:
阿里巴巴 - Java 工程师 (服务端),20k-40k / 北京 / 经验 3-5 年 / 本科及以上 / 全职
小米 - 高级 Java 开发工程师,13k-26k / 武汉 / 经验 3-5 年 / 本科及以上 / 全职
拼多多 - 资深 Java 研发工程师,30k-50k / 上海 / 经验 3-5 年 / 本科及以上 / 全职
当然还有美团、搜狗、平安科技、自如、携程、搜狐等等公司都在岗位要求中加入了熟练掌握或熟悉 Netty。
阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。
淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,采用 Netty 进行高性能、异步通信。
Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。
除了 Dubbo、RocketMQ、Hadoop,还有开源集群运算框架 Spark、分布式计算框架 Storm、构建 JVM 上的并发应用和分布式应用 Akka,都采用了 Netty 作为通信基础。
这里我可以很正确的说:Netty 基本是 Java 语言处理网络 IO 的首选框架,性能和稳定性都有保障,社区比较活跃,基于 Netty 进行二次定制服务成本小。
举个简单例子:普通的服务器 100000 个连接需要 100000 个线程,服务器可能就直接卡住了,但对于 Netty 服务器,也许几个线程就够了,请求放线程池,服务器面对电商促销,应用推送服务,完全无压力。
从电商、游戏、大数据、企业软件再到通信行业,Netty 的各种特性都能够很好的支持和帮助业务快速发展,Netty 满足了过去用 Socket 进行网络编程时的几乎所有美好愿景。
设计:统一的 API,适用于不同的协议、基于灵活、可扩展的事件驱动模型、高度可定制的线程模型、可靠的无连接数据 Socket 支持(UDP)。
安全:完整的 SSL/TLS 和 STARTTLS 的支持
健壮性:不再因过快、过慢或超负载连接导致 OutOfMemoryError、不再有在高速网络环境下 NIO 读写频率不一致的问题
易用:完善的 JavaDoc,用户指南和样例,更有活跃的社区支持
所以我们准备了一个新专栏《深入浅出学 Netty 》来帮助大家学习深入 Netty。
扫码了解《 深入浅出学 Netty 》专栏详情
▼
是的,开发网络应用程序是一个复杂的系统工程,稍有疏忽便容易造成错误。而直接基于 Java 提供的原生 API 编写一个健壮的,高性能的网络应用是一个很大的挑战。
Netty 的存在帮助我们解决了这个问题,虽然 Netty 简单易用容易上手,但是毕竟网络编程是复杂的,会存在各种的状况和可能性。在遇到一些问题时,仅仅只是掌握的程度是不足以对问题进行定位和排查。
通过本专栏的学习,对网络开发所需掌握的基础理论知识会更加牢固,对网络应用涉及的线程模型,设计模式,高性能架构等更加明确。
通过对 Netty 的源码深入讲解,使得读者对 Netty 达到 “知其然更之所以然” 的程度。在遇到一些线上的问题时,具备了扎实理论功底的情况,可以有的放矢而不会显得盲目。
第一部分:入门篇
这个部分阐述网络 IO 模型的分类以及如何使用 Java 原生接口进行开发。让读者建立起对网络 IO 开发的感性印象。其后会详细讲解 NIO 的相关知识,NIO 是后续学习的整体基石。在了解 NIO 的基础上,对 Netty 进行模型,API,组件方面的介绍,并且编写第一个 Netty 应用程序。通过这个例子,读者可以掌握对 Netty 的基本使用,达到初步使用 Netty 进行开发的能力。
第二部分:实战篇
结合第一部分的理论知识,本章节使用 Netty 开发两个实际项目中可能会涉及到项目,分别是在线 IM 聊天和 HTTP 文件下载器。通过实战项目,讲解在实战中,对 Netty 的使用。并且通过实战,还会涉及诸如协议设计、数据存储、并发安全考量等等实战类知识。
第三部分:进阶篇
经过入门和实战的学习,读者对使用 Netty 开发高质量的项目已经没有问题。但是在遇到一些疑难杂症时,可能需要更多对 Netty 内部的了解;或者与项目深度结合时,希望能够了解到 Netty 的实现。进阶篇将从源码分析的角度入手,带领读者从源码的层级上分析整个 Netty 的实现。几个重点的组件,线程池,管道,启动器以及一些设计模式,线程模式等都会详细分析。
林斌,博思软件技术架构部技术经理,8 年研发经验。福建省省级标准《双离线场景二维码标准》撰写人,多年大型项目研发经验。关注团队效率,高并发等方面。
对 Java 中几种 IO 实现模式的了解
掌握使用 Java NIO 开发的能力
掌握使用 Netty 开发项目的能力
深入理解和掌握 Netty 的设计精髓,诸如并发安全保证,设计原理,重点算法等
从源码的深度掌握 Netty 重点设计背后的代码细节和思路
读懂 Netty 的高性能架构之道