具体描述
Dubbo是阿里巴巴开发的一个开源的高性能、高可用、可扩展的分布式RPC调用框架,致力于提供高性能和透明化的 RPC 远程调用服务解决方案。作为阿里巴巴 SOA 服务化治理方案的核心框架,目前已进入 Apache 孵化器项目。在单体应用时,不同业务模块部署在同一个JVM 进程内,这时通过本地调用就可以解决不同业务模块之间的相互引用;但在多体应用时,不同业务模块大多部署到不同的机器上,这时一个高效、稳定的RPC框架就显得特别重要了。Apache Dubbo 作为阿里巴巴开源的分布式RPC 框架,在进入Apache 孵化器项目后现已毕业,相信在开源社区的不断贡献下,它会成为RPC 框架中的佼佼者。本书是对Apache Dubbo 的使用以及内核原理的深度剖析,分为三部分:第一部分为基础篇,首先从整体上讲解使用Dubbo 搭建的系统由哪些模块组成,各模块相互之间的调用关系是怎么样的,然后基于本书的Demo 讲解如何使用Dubbo ;第二部分为高级篇,主要讲解Dubbo 框架内部实现原理,包含支撑Dubbo框架的适配器类原理、动态编译原理、增强SPI 原理、消费端的泛化调用实现原理、消费端异步调用与服务提供端的异步执行、Dubbo 框架的线程模型、消费端负载均衡策略、消费端集群容错策略、并发控制原理、Dubbo 网络协议等;第三部分为实践篇,主要探讨如何使用Arthas 和一些Demo 为研究Dubbo 框架原理提供方便,并且讲解如何基于CompletableFuture 和Netty 模拟RPC 同步与纯异步调用。本书将原理与实践相结合,由浅入深、通俗易懂地讲解了Dubbo 框架的使用及内核原理实现,适合Java 中高级研发工程师,以及对RPC 框架技术感兴趣,希望探究RPC 框架内部实现原理的人员阅读。
作者简介
翟陆续,目前就职于淘宝技术,花名加多。热衷并发、异步、反应式编程,熟悉常用开源框架实现原理,微信公众号:技术原始积累。
目录信息
第1章 Dubbo 基础 2
1.1 初识Dubbo 2
1.2 本书Demo 详解 3
1.2.1 Demo 结构说明 3
1.2.2 SDK 模块 4
1.2.3 同步发布与调用服务 6
1.2.4 服务消费端异步调用服务/ 10
1.2.5 服务提供端异步执行 13
1.2.6 服务消费端泛化调用 17
1.2.7 服务消费端本地服务mock 与服务降级 21
1.2.8 隐式参数传递 24
1.2.9 本地服务暴露与引用 26
1.3 小结 28
高 级 篇
第2章 Dubbo 框架内核原理剖析 30
2.1 Dubbo 分层架构概述 30
2.2 Dubbo 远程调用细节 33
2.2.1 服务提供者暴露一个服务的概要过程 33
2.2.2 服务消费者消费一个服务的概要过程 34
2.3 Dubbo 的适配器原理 35
2.4 Dubbo 的动态编译原理 36
2.5 Dubbo 增强SPI 39
2.5.1 JDK 标准SPI 原理 39
2.5.2 增强SPI 原理 43
2.5.3 扩展点的自动包装 54
2.6 Dubbo 使用JavaAssist 减少反射调用开销 57
2.7 小结 60
第3章 远程服务发布与引用流程剖析 61
3.1 Dubbo 服务发布端启动流程剖析 61
3.2 Dubbo 服务提供方如何处理请求 74
3.3 Dubbo 服务消费方启动流程剖析 81
3.4 Dubbo 服务消费端一次远程调用过程 97
3.5 小结 100
第4章 Directory 目录与Router 路由服务 101
4.1 Directory 目录 101
4.2 RegistryDirectory 的创建 101
4.3 RegistryDirectory 中invoker 列表的更新 102
4.4 小结 107
第5章 Dubbo 消费端服务mock 与服务降级策略原理 108
5.1 服务降级原理 108
5.1.1 降级策略注册 108
5.1.2 服务消费端使用降级策略 109
5.2 本地服务mock 原理 111
5.2.1 mock 合法性检查 111
5.2.2 服务消费端使用mock 服务 113
5.3 小结 116
第6章 Dubbo 集群容错与负载均衡策略 117
6.1 Dubbo 集群容错策略概述 117
6.2 Failfast Cluster 策略源码分析 119
6.3 Failsafe Cluster 策略源码分析 120
6.4 Failover Cluster 策略源码分析 120
6.5 Failback Cluster 策略源码分析 122
6.6 Forking Cluster 策略源码分析 124
6.7 Broadcast Cluster 策略源码分析 127
6.8 如何基于扩展接口自定义集群容错策略 128
6.9 Dubbo 负载均衡策略概述 129
6.10 Random LoadBalance 策略源码分析 131
6.11 RoundRobin LoadBalance 策略源码分析 134
6.12 LeastActive LoadBalance 策略源码分析 139
6.13 ConsistentHash LoadBalance 策略源码分析 141
6.13.1 一致性 Hash 负载均衡策略原理 141
6.13.2 源码分析 147
6.14 如何基于扩展接口自定义负载均衡策略 148
6.15 小结 149
第7章 Dubbo 线程模型与线程池策略 150
7.1 Dubbo 的线程模型概述 150
7.2 AllDispatcher 源码剖析 152
7.3 DirectDispatcher 源码剖析 154
7.4 MessageOnlyDispatcher 源码剖析 154
7.5 ExecutionDispatcher 源码剖析 155
7.6 ConnectionOrderedDispatcher 源码剖析 156
7.7 线程模型的确定时机 159
7.8 如何基于扩展接口自定义线程模型 160
7.9 Dubbo 的线程池策略 161
7.10 FixedThreadPool 源码剖析 161
7.11 LimitedThreadPool 源码剖析 163
7.12 EagerThreadPool 源码剖析 164
7.13 CachedThreadPool 源码剖析 166
7.14 线程池的确定时机 168
7.15 如何基于扩展接口自定义线程池策略 168
7.16 小结 169
第8章 Dubbo 如何实现泛化引用 170
8.1 服务消费端GenericImplFilter 源码分析 170
8.2 服务提供端GenericFilter 源码分析 172
8.3 小结 176
第9章 Dubbo 并发控制 177
9.1 服务消费端并发控制 177
9.2 服务提供端并发控制 182
9.3 小结 185
第10章 Dubbo 隐式参数传递 186
10.1 服务消费端AbstractClusterInvoker 原理剖析 186
10.2 服务提供方ContextFilter 原理剖析 188
10.3 小结 189
第11章 Dubbo 全链路异步 190
11.1 服务消费端异步调用 190
11.1.1 2.7.0 版本前的异步调用实现 191
11.1.2 2.7.0 版本提供的异步调用实现 201
11.2 服务提供端异步执行 204
11.2.1 基于定义CompletableFuture 签名的接口实现异步执行 205
11.2.2 使用AsyncContext 实现异步执行 208
11.3 异步调用与执行引入的新问题 211
11.3.1 Filter 链 211
11.3.2 上下文对象传递 216
11.4 小结 218
第12章 本地服务暴露与引用原理 219
12.1 本地服务暴露流程 219
12.2 本地服务引用启动流程 222
12.3 本地服务一次引用流程 224
12.4 小结 225
第13章 Dubbo 协议与网络传输 226
13.1 Dubbo 协议 226
13.2 服务消费方编码原理 229
13.3 服务发布方解码原理 233
13.4 小结 241
实 践 篇
第14章 Dubbo 实践 244
14.1 Arthas 的简介与安装 244
14.2 查看扩展接口适配器类的源码 245
14.3 查看服务提供端Wrapper 类的源码 247
14.4 查询Dubbo 启动后都有哪些Filter 250
14.5 Demo 验证RoundRobin LoadBalance 负载均衡原理 253
14.6 如何动态获取Dubbo 服务提供方地址列表 256
14.6.1 场景概述 256
14.6.2 原理与实现 257
14.7 根据IP 动态路由调用Dubbo 服务/ 260
14.8 基于CompletableFuture 和Netty 模拟RPC 同步与纯异步调用 264
14.8.1 协议帧定义 265
14.8.2 RpcServer 的实现 265
14.8.3 RpcClient 的实现 268
14.8.4 实例 273
14.9 小结 275
· · · · · · (收起)
读后感
用户评价
这本书的排版和逻辑组织,充分体现了对读者心智负荷的尊重。它避免了长篇累牍的代码块堆砌,而是用清晰的流程图和概念模型来搭建起知识框架。在我看来,它最成功的地方在于成功地架起了Dubbo的“设计意图”与“实际运行”之间的鸿沟。许多读者能用Dubbo,却不知道在特定故障场景下它会如何反应。这本书则通过模拟极端情况,展示了框架内部的自我保护机制是如何协同工作的。例如,关于负载均衡算法在集群不健康时的动态切换策略的论述,非常精彩,它展示了框架在面对不确定性时的优雅退场或自愈能力。最终读完后,我感觉对分布式系统的理解不再是零散的知识点集合,而是一个有机联动的整体,对于如何设计一个真正高可用的微服务架构,这本书提供的思维框架比任何单一技术点都更具价值。
这本导读的深度和广度,绝对是市面上同类书籍中的一股清流。它没有陷入过度追求新特性的潮流,而是坚实地扎根于Dubbo的核心设计哲学——即如何高效、可靠地实现服务间的远程通信。我尤其赞赏作者在描述“扩展点机制”时的细腻笔触。很多框架的扩展点设计往往晦涩难懂,但在这里,通过生动的比喻和清晰的接口定义剖析,我领悟到了“面向接口编程”在框架设计中如何实现高度的解耦和可插拔性。章节之间的逻辑推进自然得如同一个精心编排的交响乐,从基础的注册发现到复杂的路由策略,每一步都铺垫得恰到好处。读完之后,我不再仅仅是会用Dubbo的消费者或提供者,而是开始思考,如果我要基于Dubbo开发一个定制化的中间件,应该从何处下手,这种由“使用者”向“设计者”的心态转变,是这本书带给我最大的收获。它为我提供了超越“使用说明书”的底层心法。
这本书的文字像是老友间的闲谈,却又暗藏乾坤,让人读起来丝毫没有技术书籍的枯燥感。作者似乎对Dubbo的每一行代码都了如指掌,但表达方式却异常亲切,仿佛不是在讲解复杂的分布式框架,而是在分享自己多年的实践心得。我特别欣赏其中对“服务治理”这个概念的阐述,它不仅仅停留在配置和参数层面,更是深入到了对服务间协作哲学层面的探讨。书中对于容错机制的讲解,那种抽丝剥茧的分析,让我对Dubbo的健壮性有了更深层次的认识。很多其他书籍只是简单罗列API,但这本书却能将底层RPC调用过程中的网络IO、序列化、线程模型等环节,描绘得清晰流畅,读完之后,脑海中仿佛形成了一张立体的调用拓扑图,这对于我理解高并发场景下的性能瓶颈和调优方向,提供了极大的帮助。那种将理论与实践完美融合的叙事手法,着实令人拍案叫绝,远超出了我对于一本纯技术手册的预期。
阅读这本书的过程,体验更像是在解谜,而不是被动接收信息。作者似乎故意设置了一些逻辑陷阱或容易混淆的概念,然后引导读者一步步揭示其背后的真相。例如,在讲解服务分组和版本控制时,它清晰地阐述了如何避免因快速迭代带来的兼容性灾难,这种对企业级应用长期维护成本的关怀,体现了作者深厚的行业洞察力。不同于某些只关注最新稳定版的教材,本书对框架演进过程中的关键取舍和历史包袱也有所涉及,这使得读者能够理解为什么某些设计是“妥协”的产物,而不是“完美”的初衷。我特别喜欢其中穿插的架构师的“黑话”和行业术语的权威解释,这极大地提升了我与资深工程师进行技术交流时的自信心,仿佛拿到了一张进入高阶技术圈的通行证。
坦白讲,我对很多技术书籍的评价都是抱持怀疑态度的,总觉得内容水分较大,或者只是对官方文档的重新包装。然而,这本书的价值体现在其对“非主流”但极其关键的角落的挖掘上。比如,它对Dubbo在不同JVM部署环境下,内存模型和垃圾回收机制可能对RPC延迟产生的影响进行了细致的分析,这是一个在标准教程中极少被提及的实战痛点。作者的叙事风格如同一个经验老到的架构师在进行Code Review,他不仅指出了“是什么”,更着重解释了“为什么会这样设计”。对于异步调用和心跳检测机制的深入探究,更是让我对如何构建一个真正的弹性系统有了更具操作性的理解。这种对细节的执着和对底层原理的尊重,使得这本书的厚度不仅仅是页数的堆砌,而是知识密度的集中体现,每一页都充满了可以被立刻应用到生产环境的真知灼见。
很少写书评,因为往往已经够多了,就懒得写。 总的来说,大范围粘贴官方网站上的文档,而且书的排版导致了不如官方网站上容易阅读,本以为会有新东西,后来发现不如看官网。
很少写书评,因为往往已经够多了,就懒得写。 总的来说,大范围粘贴官方网站上的文档,而且书的排版导致了不如官方网站上容易阅读,本以为会有新东西,后来发现不如看官网。
写得不错,要跟之前那本比,我还觉得这本比较好一点
看的电子版,代码是图片,这就有点难受了。快速地浏览了一遍,主要获取本书的核心关注点,准备开始二刷,主要关注泛化调用,线程池,异步调用,网络通信等高级特性。
写得不错,要跟之前那本比,我还觉得这本比较好一点