Netty源码剖析与应用
  • 推荐1
  • 收藏3
  • 浏览3.6K

Netty源码剖析与应用

刘耀林 (作者)  宋亚东 (责任编辑)

  • 书  号:978-7-121-39853-7
  • 出版日期:2020-11-11
  • 页  数:280
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:宋亚东
电子书 ¥62.30
购买电子书
纸质版 ¥89.00
Netty涉及多线程技术、复杂数据结构与内存管理模型,它运用了各种设计模式及一些TCP的底层技术。本书对这些难点一一进行攻破,让读者能快速掌握相关知识。
本书包含大量的分布式底层架构的编写,涉及多线程、负载均衡算法、性能调优、线上问题紧急处理等内容。本书通过非常简易的代码来讲解Netty在企业中的实际用法,通过对实例进行调试的方式对Netty源码进行了详细的剖析,力图使读者通过实际操作快速入门,并深入了解Netty底层的各个组件。

本书适合有一定Java基础的架构师、设计师、开发工程师、测试工程师,以及对Java NIO框架、Netty感兴趣的相关人士阅读。
深入解读Netty 底层核心源码及架构设计,全面分析Netty 特性,掌握多线程实战技巧
刘耀林,从2012年到2017年一直从事Java后台服务开发工作。在此期间曾创办过大象在线分享网,网名夜行侠老师,录制过Netty源码剖析教学视频,同时在多家互联网公司担任过系统架构师,有丰富的Java工作实战经验。从2018年至今,从事大数据研发工作,对Flink、HBase、Kafka、Elasticsearch等大数据组件有深入的研究。
前言
Netty是一款基于NIO(非阻塞I/O)开发的网络框架,与传统BIO相比,它的并发性能得到了很大的提高,而且更加节省资源。Netty不仅封装了NIO操作的很多细节;在设计上还基于灵活、可扩展的事件驱动模型与高度可定制的线程模型,让Netty的应用更加灵活。作为一个被广泛使用的Java网络编程框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、物联网行业等都得到了广泛的应用。很多流行的大数据框架的核心通信模块也都使用的是Netty,如Elasticsearch、HBase、Flink等。

为什么编写本书
如今,大数据已是互联网应用的大趋势,很多Java程序员都想转向大数据方向,而Netty不仅是大数据框架的核心,还是Java高并发中最火的框架之一。因此,学好Netty更有利于深入了解大数据框架底层源码。学习Netty,不仅要学会如何运用它,还要对其底层原理、底层代码的编程技巧有深度的了解。目前,国内Netty方面的图书较少,尤其是既有深度,又比较简洁,并有企业级通用案例的图书更是凤毛麟角,这加大了很多Java程序员向大数据方向转变的难度,本书试图弥补这一空白。
本书主要基于Netty的稳定版本Netty v4.1.38.Final(对以后的新版本也具有普适性)编写。本书的主要目的是帮助软件工程师读懂Netty v4.1.38.Final版本源码,并能开发一款类似Dubbo的分布式RPC(Remote Procedure Call,远程过程调用),以及Netty的特性在Flink分布式流式计算框架中的实际应用。在本书中,作者对平常在编程中遇到的重点、难点进行了分析,并给予了充分的论述。对于一名软件工程师来说,本书可以使他们少走弯路,并更快地掌握Netty v4.1.38.Final版本源码及编程技巧。

关于本书作者
作者从2012年到2017年一直从事Java后台服务开发工作,在此期间曾创办大象在线分享网,网名夜行侠老师,录制Netty源码剖析教学视频,同时在多家互联网公司担任系统架构师,有丰富的Java工作实战经验。2018年转型从事大数据研发工作,对Flink、HBase、Kafka、Elasticsearch等大数据组件进行了深入的研究。

本书主要内容
本书以实战为导向,深入解读Netty底层核心源码及架构设计。通过阅读本书,读者可以灵活运用Netty的特性、加深多线程实战应用、熟悉Netty的底层核心源码。全书共包含2个高级应用项目,分别为分布式RPC与10亿级任务调度和监控引擎。读者可以在实战过程中找到学习Netty的成就感,在学完Netty内存管理及Netty核心组件的源码剖析后,能够比较彻底地掌握Netty。

如何阅读本书
在阅读本书前,读者应学过Java语言、网络通信等课程,并具备并发编程的能力。本书的章节安排是依据读者循序渐进地学习Netty的顺序设立的,建议初学者从前至后阅读。由于Netty源码复杂难懂,建议读者分以下几部分阅读本书。
第一部分:以实战为主,学会Netty客户端与服务端的长连接通信,灵活运用Netty的Future机制,同时对照第3章,尝试编写一套完整的分布式RPC。
第二部分:仔细、反复地阅读Netty核心源码解读知识,主要包括NioEventLoop线程处理逻辑、Netty的Channel功能设计、ByteBuf缓冲区内存、内存泄漏检测机制。熟练掌握这部分内容有利于理解框架的整体实现原理。
第三部分:内存管理源码解读。这部分是Netty源码中最难掌握的,需要有一定的耐心。先了解jemalloc内存分配思想,再从底层PoolChunk的内存分配到上层的PoolArena对内存的整体管理。在深入学习具体的分配算法时,可把部分代码单独拿出来进行单元测试,以加深理解。
第四部分:Netty的高级应用、线上问题分析和性能调优。这部分主要是作者的一些实战经验。通过前面对Netty的运用和源码解读,读者对Netty有了一定的了解,但还缺乏线上部署经验,以及高并发大数据的实际应用经验。这部分内容采用Netty时间轮实时监控10亿级任务,运用Jmeter长连接压测分布式RPC,让读者在实际项目中更加全面和自信地使用Netty。
源码阅读非常需要耐心,通过阅读Netty源码,读者会明显感觉到自身编程能力及源码阅读能力的提升,尤其是多线程编程能力。建议读者反复阅读至少3遍以上,直至对Netty的Channel、Handler、NioEventLoop、ByteBuf的各个方法都了如指掌。

致谢
我首先要特别感谢我的妻子谭小兰,写书需要大量的时间,我起初只是以视频在线教学的方式来总结自己的经验和收获,并分享给部分学员。是她在背后默默地支持我,我才能全身心投入书稿的写作去,从而与更多想深入学习Netty的读者分享本书。
同时感谢电子工业出版社博文视点宋亚东先生对本书的重视和他们为本书所做的一切。
由于水平有限,书中难免存在不足及疏漏,敬请专家和读者批评指正。



刘耀林
2020年11月

目录

目录
第1章 Netty基础篇 1
1.1 Netty概述 1
1.2 Netty服务端构建 2
1.3 Netty客户端的运用 6
1.3.1 Java多线程交互 6
1.3.2 Netty客户端与服务端短连接 12
1.3.3 Netty客户端与服务端长连接 18
1.4 小结 22

第2章 原理部分 23
2.1 多路复用器 23
2.1.1 NIO与BIO的区别 24
2.1.2 epoll模型与select模型的区别 25
2.2 Netty线程模型 27
2.3 编码和解码 28
2.4 序列化 30
2.4.1 Protobuf序列化 30
2.4.2 Kryo序列化 31
2.5 零拷贝 33
2.6 背压 34
2.6.1 TCP窗口 34
2.6.2 Flink实时计算引擎的背压原理 36
2.7 小结 39

第3章 分布式RPC 40
3.1 Netty整合Spring 41
3.2 采用Netty实现一套RPC框架 43
3.3 分布式RPC的构建 52
3.3.1 服务注册与发现 53
3.3.2 动态代理 68

第4章 Netty核心组件源码剖析 81
4.1 NioEventLoopGroup源码剖析 82
4.2 NioEventLoop源码剖析 86
4.2.1 NioEventLoop开启Selector 87
4.2.2 NioEventLoop的run()方法解读 89
4.2.3 NioEventLoop 重新构建Selector和Channel的注册 98
4.3 Channel源码剖析 100
4.3.1 AbstractChannel源码剖析 101
4.3.2 AbstractNioChannel源码剖析 102
4.3.3 AbstractNioByteChannel源码剖析 107
4.3.4 AbstractNioMessageChannel源码剖析 112
4.3.5 NioSocketChannel源码剖析 116
4.3.6 NioServerSocketChannel源码剖析 119
4.4 Netty缓冲区ByteBuf源码剖析 120
4.4.1 AbstractByteBuf源码剖析 122
4.4.2 AbstractReferenceCountedByteBuf源码剖析 127
4.4.3 ReferenceCountUpdater源码剖析 129
4.4.4 CompositeByteBuf源码剖析 134
4.4.5 PooledByteBuf源码剖析 145
4.5 Netty内存泄漏检测机制源码剖析 151
4.5.1 内存泄漏检测原理 152
4.5.2 内存泄漏器ResourceLeakDetector源码剖析 153
4.6 小结 164

第5章 Netty读/写请求源码剖析 165
5.1 ServerBootstrap启动过程剖析 165
5.2 Netty对I/O就绪事件的处理 172
5.2.1 NioEventLoop就绪处理之OP_ACCEPT 172
5.2.2 NioEventLoop就绪处理之OP_READ(一) 175
5.2.3 NioEventLoop就绪处理之OP_READ(二) 182
第6章 Netty内存管理 195
6.1 Netty内存管理策略介绍 195
6.2 PoolChunk内存分配 197
6.2.1 PoolChunk分配大于或等于8KB的内存 197
6.2.2 PoolChunk分配小于8KB的内存 201
6.3 PoolSubpage内存分配与释放 205
6.4 PoolArena内存管理 214
6.5 RecvByteBufAllocator内存分配计算 223
6.6 小结 227

第7章 Netty时间轮高级应用 228
7.1 Netty时间轮的解读 229
7.1.1 时间轮源码剖析之初始化构建 230
7.1.2 时间轮源码剖析之Worker启动线程 236
7.2 Netty时间轮改造方案制订 239
7.3 时间轮高级应用之架构设计 241
7.4 时间轮高级应用之实战10亿级任务 243
7.5 小结 245

第8章 问题分析与性能调优 246
8.1 Netty服务在Linux服务器上的部署 246
8.2 Netty服务模拟秒杀压测 255
8.3 常见生产问题分析 264
8.4 性能调优 267
8.5 小结 270

读者评论

  • 有没有带注释的netty源码啊!看书感觉思维有点飘散 很多地方对应不上

    liuxiaokai发表于 2022/4/2 9:04:59
  • @管理员

    Rubicon发表于 2021/9/5 18:34:52
  • 为什么所有的电子书购买页面都是404

    Rubicon发表于 2021/9/5 18:34:22
  • 这本书真的很不错,里面的思想很经典,只看了前面第一章就觉得受益匪浅,我要好好研究一下

    楚河发表于 2021/3/10 16:13:36
  • 源码在哪可以下载

    598156412发表于 2020/11/24 15:27:01
    • 在本书页面右侧的“下载资源”处,新的文件正在更新中。谢谢!

      宋亚东发表于 2020/11/26 9:10:02

电子书版本

  • Epub

图书类别

相关图书

深入集群:大型数据中心资源调度与管理

李雨前 (作者)

本书内容聚焦资源侧:集群调度和管理,非一般性的应用集群调度和管理。尽管按集群调度和集群管理两大部分来进行内容组织,实质上这两部分是一体的。集群管理是为了保障集群...

¥89.00

架构解密:从分布式到微服务(第2版)

吴治辉 (作者)

微服务、云原生、Kubernetes、Service Mesh是分布式领域的热点技术,它们并不是凭空出现的,一定继承了某些“前辈”的优点。我们不仅要了解这些技术...

 

趣谈网络协议

刘超 (作者)

网络协议是每个程序员入门的必修课,但是完全掌握网络协议知识并进行实际应用却并非易事。在本书中,作者将结合自己从业多年的“泣血”经验,以通俗易懂、更加贴近日常生活...

¥108.00

大型系统应用架构实战:部署、容灾、性能优化

李彦超 郭东白 陈禹 谢松林 周志伟 桑植 (作者)

本书理论与实战相结合,以AliExpress 网站为基础,全面介绍大型系统的总体技术方案、全球区域化部署技术、全球网络调度技术、性能优化,以及SRE 在AliE...

 

Java微服务测试:基于Arquillian、Hoverfly、AssertJ、JUnit、Selenium与Mockito

Alex Soto Bueno, Jason Porter, Andy Gumbrecht (作者) 刘梦馨 (译者)

本书从实战出发,介绍微服务架构所带来的测试方面的挑战,以及如何利用新的技术来应对这些挑战。通过本书,读者可以学会如何编写微服务架构下的单元测试、组件测试、集成测...

¥89.00

Spring响应式微服务:Spring Boot 2+Spring 5+Spring Cloud实战

郑天民 (作者)

《Spring响应式微服务:Spring Boot 2+Spring 5+Spring Cloud实战》主要包含构建响应式微服务架构过程中所应具备的技术体系和工...