《Netty进阶之路 跟着案例学Netty》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:李林锋著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2019
  • ISBN:9787121352621
  • 页数:322 页
图书介绍:Netty将Java NIO接口封装,提供了全异步编程方式,是各大Java项目的网络应用开发必备神器。本书作者是国内Netty技术的先行者和布道者,本书是他继《Netty权威指南》之后的又一力作。本书中作者将过去几年实践中遇到的问题,以及Netty学习者咨询的相关问题,进行了归纳和总结,以问题案例做牵引,通过对案例进行剖析,讲解问题背后的原理,并结合Netty源码分析,让读者能够真正掌握Netty,在实际工作中少犯错。本书中的案例涵盖了Netty的启动和停止、内存、并发多线程、性能、可靠性、安全等方面,囊括了Netty绝大多数常用的功能及容易犯错的地方。在案例的分析过程中,还穿插讲解了Netty的问题定位思路、方法、技巧,以及解决问题使用的相关工具,对读者在实际工作中用好Netty具有很大的帮助和启发作用。

第1章 Netty服务端意外退出案例 1

1.1 Netty服务端意外退出问题 1

1.1.1 Java Daemon线程简介 2

1.1.2 Netty服务端启动原理 4

1.1.3如何防止Netty服务端意外退出 6

1.1.4实际项目中的优化策略 8

1.2 Netty优雅退出机制 9

1.2.1 Java优雅退出机制 10

1.2.2 Java优雅退出的注意点 12

1.2.3 Netty优雅退出机制 14

1.2.4 Netty优雅退出原理和源码分析 15

1.2.5 Netty优雅退出的一些误区 20

1.3总结 21

第2章 Netty客户端连接池资源泄漏案例 22

2.1 Netty连接池资源泄漏问题 22

2.1.1连接池创建代码 23

2.1.2内存溢出和线程膨胀 23

2.1.3错用NIO编程模式 25

2.1.4正确的连接池创建方式 26

2.1.5并发安全和资源释放 28

2.2 Netty客户端创建机制 29

2.2.1 Java NIO客户端创建原理分析 29

2.2.2 Netty客户端创建原理分析 32

2.2.3 Bootstrap工具类源码分析 34

2.3总结 36

第3章 Netty内存池泄漏疑云案例 37

3.1 Netty内存池泄漏问题 37

3.1.1路由转发服务代码 38

3.1.2响应消息内存释放玄机 39

3.1.3采集堆内存快照分析 42

3.1.4 ByteBuf申请和释放的理解误区 45

3.2 Netty内存池工作机制 48

3.2.1内存池的性能优势 48

3.2.2内存池工作原理分析 51

3.2.3内存池核心代码分析 54

3.3总结 58

第4章 ByteBuf故障排查案例 59

4.1 HTTP协议栈ByteBuf使用问题 59

4.1.1 HTTP响应Body获取异常 59

4.1.2 ByteBuf非法引用问题 63

4.1.3 ByteBuf使用注意事项 66

4.2 Netty ByteBuf实现机制 67

4.2.1 Java原生ByteBuffer的局限性 67

4.2.2 Netty ByteBuf工作原理分析 67

4.2.3 ByteBuf引用计数器工作原理和源码分析 70

4.3总结 73

第5章 Netty发送队列积压导致内存泄漏案例 74

5.1 Netty发送队列积压案例 74

5.1.1高并发故障场景 74

5.1.2内存泄漏原因分析 76

5.1.3如何防止发送队列积压 78

5.1.4其他可能导致发送队列积压的因素 80

5.2 Netty消息发送工作机制 82

5.2.1 WriteAndFlushTask原理和源码分析 83

5.2.2 ChannelOutboundBuffer原理和源码分析 86

5.2.3消息发送源码分析 88

5.2.4消息发送高低水位控制 94

5.3总结 95

第6章 API网关高并发压测性能波动案例 96

6.1高并发压测性能波动问题 96

6.1.1故障场景模拟 96

6.1.2性能波动原因定位 98

6.1.3主动内存泄漏定位法 101

6.1.4网关类产品的优化建议 102

6.2 Netty消息接入内存申请机制 102

6.2.1消息接入的内存分配原理和源码分析 102

6.2.2 Netty ByteBuf的动态扩容原理和源码分析 107

6.3总结 108

第7章 Netty ChannelHandler并发安全案例 109

7.1 Netty ChannelHandler并发安全问题 109

7.1.1串行执行的ChannelHandler 110

7.1.2跨链路共享的ChannelHandler 114

7.1.3 ChannelHandler的并发陷阱 116

7.2 Netty ChannelHandler工作机制 118

7.2.1职责链ChannelPipeline原理和源码分析 118

7.2.2用户自定义Event原理和源码分析 122

7.3总结 123

第8章 车联网服务端接收不到车载终端消息案例 124

8.1车联网服务端接收不到车载终端消息问题 124

8.1.1故障现象 125

8.1.2故障期线程堆栈快照分析 126

8.1.3 NioEventLoop线程防挂死策略 128

8.2 NioEventLoop线程工作机制 129

8.2.11/O读写操作原理和源码分析 130

8.2.2异步任务执行原理和源码分析 133

8.2.3定时任务执行原理和源码分析 135

8.2.4 Netty多线程最佳实践 137

8.3总结 137

第9章 Netty 3.X版本升级案例 139

9.1 Netty 3.X的版本升级背景 139

9.1.1被迫升级场景 140

9.1.2升级不当遭遇各种问题 140

9.2版本升级后数据被篡改问题 141

9.2.1数据篡改原因分析 142

9.2.2问题总结 143

9.3升级后上下文丢失问题 143

9.3.1上下文丢失原因分析 144

9.3.2依赖第三方线程模型的思考 144

9.4升级后应用遭遇性能下降问题 145

9.4.1性能下降原因分析 145

9.4.2性能优化建议 146

9.5 Netty线程模型变更分析 147

9.5.1 Netty 3.X版本线程模型 147

9.5.2 Netty 4.X版本线程模型 149

9.5.3线程模型变化点源码分析 150

9.5.4线程模型变化总结 152

9.6总结 154

第10章 Netty并发失效导致性能下降案例 155

10.1业务ChannelHandler无法并发执行问题 155

10.1.1服务端并发设计相关代码分析 155

10.1.2无法并行执行的EventExecutorGroup 159

10.1.3并行执行优化策略和结果 161

10.2 Netty DefaultEventExecutor工作机制 163

10.2.1 DefaultEventExecutor原理和源码分析 164

10.2.2业务线程池优化策略 165

10.2.3 Netty线程绑定机制原理和源码分析 168

10.3总结 170

第11章 IoT百万长连接性能调优案例 171

11.1海量长连接接入面临的挑战 171

11.1.1 IoT设备接入特点 172

11.1.2 IoT服务端性能优化场景 172

11.1.3服务端面临的性能挑战 172

11.2智能家居内存泄漏问题 173

11.2.1服务端内存泄漏原因定位 173

11.2.2问题背后的一些思考 174

11.3操作系统参数调优 174

11.3.1文件描述符 175

11.3.2 TCP/IP相关参数 175

11.3.3多网卡队列和软中断 177

11.4 Netty性能调优 177

11.4.1设置合理的线程数 177

11.4.2心跳优化 180

11.4.3接收和发送缓冲区调优 183

11.4.4合理使用内存池 184

11.4.5防止I/O线程被意外阻塞 185

11.4.6 I/O线程和业务线程分离 187

11.4.7针对端侧并发连接数的流控 187

11.5 JVM相关性能优化 189

11.5.1 GC调优 189

11.5.2其他优化手段 193

11.6总结 193

第12章 静态检查修改不当引起性能下降案例 195

12.1 Edge Service性能严重下降问题 195

12.1.1 Edge Service热点代码分析 195

12.1.2静态检查问题不是简单的一改了之 197

12.1.3问题反思和改进 200

12.2克隆和浅拷贝 201

12.2.1浅拷贝存在的问题 201

12.2.2 Netty的对象拷贝实现策略 203

12.3总结 204

第13章 Netty性能统计误区案例 205

13.1时延毛刺排查相关问题 205

13.1.1时延毛刺问题初步分析 205

13.1.2服务调用链改进 207

13.1.3都是同步思维惹的祸 208

13.1.4正确的消息发送速度性能统计策略 209

13.1.5常见的消息发送性能统计误区 212

13.2 Netty关键性能指标采集策略 212

13.2.1 Netty I/O线程池性能指标 213

13.2.2 Netty发送队列积压消息数 214

13.2.3 Netty消息读取速度性能统计 215

13.3总结 215

第14章 gRPC的Netty HTTP/2实践案例 216

14.1 gRPC基础入门 216

14.1.1 RPC框架简介 216

14.1.2当前主流的RPC框架 218

14.1.3 gRPC框架特点 218

14.1.4为什么选择HTTP/2 219

14.2 gRPC Netty HTTP/2服务端工作机制 220

14.2.1 Netty HTTP/2服务端创建原理和源码分析 220

14.2.2服务端接收HTTP/2请求消息原理和源码分析 224

14.2.3服务端发送HTTP/2响应消息原理和源码分析 231

14.3 gRPC Netty HTTP/2客户端工作机制 234

14.3.1 Netty HTTP/2客户端创建原理和源码分析 235

14.3.2客户端发送HTTP/2请求消息原理和源码分析 238

14.3.3客户端接收HTTP/2响应消息原理和源码分析 242

14.4 gRPC消息序列化机制 243

14.4.1 Google Protobuf 简介 243

14.4.2消息的序列化原理和源码分析 244

14.4.3消息的反序列化原理和源码分析 245

14.5 gRPC线程模型 246

14.5.1服务端线程模型 246

14.5.2客户端线程模型 247

14.5.3线程模型总结 248

14.6总结 249

第15章 Netty事件触发策略使用不当案例 250

15.1 channel ReadComplete方法被调用多次问题 250

15.1.1 ChannelHandler调用问题 250

15.1.2生产环境问题模拟重现 252

15.2 ChannelHandler使用的一些误区总结 255

15.2.1 channelReadComplete方法调用 255

15.2.2 ChannelHandler职责链调用 257

15.3总结 258

第16章 Netty流量整形应用案例 259

16.1 Netty流量整形功能 259

16.1.1通用的流量整形功能简介 260

16.1.2 Netty流量整形功能简介 260

16.2 Netty流量整形应用 261

16.2.1流量整形示例代码 261

16.2.2流量整形功能测试 263

16.3 Netty流量整形工作机制 264

16.3.1流量整形工作原理和源码分析 264

16.3.2并发编程在流量整形中的应用 271

16.3.3使用流量整形的一些注意事项总结 274

16.4总结 278

第17章 Netty SSL应用案例 279

17.1 Netty SSL功能简介 279

17.1.1 SSL安全特性 280

17.1.2 Netty SSL实现机制 281

17.2 Netty客户端SSL握手超时问题 282

17.2.1握手超时原因定位 282

17.2.2 Netty SSL握手问题定位技巧 283

17.3 SSL握手性能问题 284

17.3.1 SSL握手性能热点分析 284

17.3.2缓存和对象池 285

17.4 SSL事件监听机制 286

17.4.1握手成功事件 286

17.4.2 SSL连接关闭事件 286

17.5总结 287

第18章 Netty HTTPS服务端高并发宕机案例 288

18.1 Netty HTTPS服务端宕机问题 288

18.1.1客户端大量超时 288

18.1.2服务端内存泄漏原因分析 289

18.1.3 NioSocketChannel泄漏原因探究 290

18.1.4高并发场景下缺失的可靠性保护 292

18.2功能层面的可靠性优化 294

18.2.1 Netty HTTPS服务端可靠性优化 295

18.2.2 HTTPS客户端优化 296

18.3架构层面的可靠性优化 297

18.3.1端到端架构问题剖析 297

18.3.2 HTTP Client切换到NIO 298

18.3.3同步RPC调用切换到异步调用 299

18.3.4协议升级到HTTP/2 303

18.4总结 307

第19章 MQTT服务接入超时案例 308

19.1 MQTT服务接入超时问题 308

19.1.1生产环境问题现象 308

19.1.2连接数膨胀原因分析 309

19.1.3无效连接的关闭策略 309

19.1.4问题总结 310

19.2基于Netty的可靠性设计 311

19.2.1业务定制I/O异常 311

19.2.2链路的有效性检测 312

19.2.3内存保护 313

19.3总结 315

第20章 Netty实践总结 316

20.1 Netty学习策略 316

20.1.1入门知识准备 316

20.1.2 Netty入门学习 319

20.1.3项目实践 319

20.1.4 Netty源码阅读策略 319

20.2 Netty故障定位技巧 320

20.2.1接收不到消息 320

20.2.2内存泄漏 321

20.2.3性能问题 322

20.3总结 322