描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121366345
第1章 Dubbo——高性能RPC通信框架 1
1.1 应用架构演进过程 1
1.1.1 单体应用 1
1.1.2 分布式应用 3
1.2 Dubbo简介 6
1.2.1 Dubbo的发展历史 7
1.2.2 Dubbo是什么 7
1.2.3 Dubbo解决什么问题 9
1.2.4 谁在使用Dubbo 10
1.2.5 Dubbo后续的规划 11
1.3 Dubbo总体大图 11
1.3.1 Dubbo总体分层 11
1.3.2 Dubbo核心组件 12
1.3.3 Dubbo总体调用过程 13
1.4 小结 15
第2章 开发第一款Dubbo应用程序 16
2.1 配置开发环境 16
2.1.1 下载并安装JDK 17
2.1.2 下载并安装IDE 17
2.1.3 下载并配置Maven 18
2.1.4 下载并配置ZooKeeper 18
2.1.5 使用IDEA调试Dubbo源码 18
2.2 基于XML配置实现 21
2.2.1 编写Echo服务器 21
2.2.2 编写Echo客户端 24
2.3 基于注解实现 26
2.3.1 基于注解编写Echo服务器 26
2.3.2 基于注解编写Echo客户端 28
2.4 基于API实现 30
2.4.1 基于API编写Echo服务器 30
2.4.2 基于API编写Echo客户端 31
2.5 构建并运行 32
2.6 小结 34
第3章 Dubbo注册中心 35
3.1 注册中心概述 35
3.1.1 工作流程 36
3.1.2 数据结构 37
3.1.3 ZooKeeper原理概述 37
3.1.4 Redis原理概述 39
3.2 订阅/发布 40
3.2.1 ZooKeeper的实现 40
3.2.2 Redis的实现 44
3.3 缓存机制 48
3.3.1 缓存的加载 49
3.3.2 缓存的保存与更新 50
3.4 重试机制 50
3.5 设计模式 51
3.5.1 模板模式 51
3.5.2 工厂模式 52
3.6 小结 54
第4章 Dubbo扩展点加载机制 55
4.1 加载机制概述 55
4.1.1 Java SPI 56
4.1.2 扩展点加载机制的改进 57
4.1.3 扩展点的配置规范 59
4.1.4 扩展点的分类与缓存 60
4.1.5 扩展点的特性 61
4.2 扩展点注解 62
4.2.1 扩展点注解:@SPI 62
4.2.2 扩展点自适应注解:@Adaptive 63
4.2.3 扩展点自动激活注解:@Activate 65
4.3 ExtensionLoader的工作原理 66
4.3.1 工作流程 66
4.3.2 getExtension的实现原理 67
4.3.3 getAdaptiveExtension的实现原理 70
4.3.4 getActivateExtension的实现原理 73
4.3.5 ExtensionFactory的实现原理 73
4.4 扩展点动态编译的实现 76
4.4.1 总体结构 77
4.4.2 Javassist动态代码编译 78
4.4.3 JDK动态代码编译 79
4.5 小结 80
第5章 Dubbo启停原理解析 81
5.1 配置解析 81
5.1.1 基于schema设计解析 82
5.1.2 基于XML配置原理解析 85
5.1.3 基于注解配置原理解析 91
5.2 服务暴露的实现原理 97
5.2.1 配置承载初始化 97
5.2.2 远程服务的暴露机制 97
5.2.3 本地服务的暴露机制 105
5.3 服务消费的实现原理 106
5.3.1 单注册中心消费原理 106
5.3.2 多注册中心消费原理 113
5.3.3 直连服务消费原理 114
5.4 优雅停机原理解析 115
5.5 小结 116
第6章 Dubbo远程调用 117
6.1 Dubbo调用介绍 117
6.2 Dubbo协议详解 119
6.3 编解码器原理 122
6.3.1 Dubbo协议编码器 123
6.3.2 Dubbo协议解码器 128
6.4 Telnet调用原理 136
6.4.1 Telnet指令解析原理 136
6.4.2 Telnet实现健康监测 140
6.5 ChannelHandler 141
6.5.1 核心Handler和线程模型 141
6.5.2 Dubbo请求响应Handler 145
6.5.3 Dubbo心跳Handler 148
6.6 小结 150
第7章 Dubbo集群容错 151
7.1 Cluster层概述 151
7.2 容错机制的实现 153
7.2.1 容错机制概述 153
7.2.2 Cluster接口关系 155
7.2.3 Failover策略 157
7.2.4 Failfast策略 158
7.2.5 Failsafe策略 158
7.2.6 Failback策略 159
7.2.7 Available策略 160
7.2.8 Broadcast策略 160
7.2.9 Forking策略 161
7.3 Directory的实现 162
7.3.1 总体实现 162
7.3.2 RegistryDirectory的实现 163
7.4 路由的实现 166
7.4.1 路由的总体结构 166
7.4.2 条件路由的参数规则 167
7.4.3 条件路由的实现 168
7.4.4 文件路由的实现 169
7.4.5 脚本路由的实现 170
7.5 负载均衡的实现 171
7.5.1 包装后的负载均衡 171
7.5.2 负载均衡的总体结构 173
7.5.3 Random负载均衡 175
7.5.4 RoundRobin负载均衡 176
7.5.5 LeastActive负载均衡 178
7.5.6 一致性Hash负载均衡 179
7.6 Merger的实现 181
7.6.1 总体结构 181
7.6.2 MergeableClusterInvoker机制 183
7.7 Mock 185
7.7.1 Mock常见的使用方式 185
7.7.2 Mock的总体结构 186
7.7.3 Mock的实现原理 187
7.8 小结 189
第8章 Dubbo扩展点 190
8.1 Dubbo核心扩展点概述 190
8.1.1 扩展点的背景 191
8.1.2 扩展点整体架构 191
8.2 RPC层扩展点 192
8.2.1 Proxy层扩展点 192
8.2.2 Registry层扩展点 194
8.2.3 Cluster层扩展点 195
8.3 Remote层扩展点 198
8.3.1 Protocol层扩展点 199
8.3.2 Exchange层扩展点 202
8.3.3 Transport层扩展点 203
8.3.4 Serialize层扩展点 206
8.4 其他扩展点 207
第9章 Dubbo高级特性 210
9.1 Dubbo高级特性概述 210
9.2 服务分组和版本 211
9.3 参数回调 214
9.4 隐式参数 217
9.5 异步调用 218
9.6 泛化调用 219
9.7 上下文信息 220
9.8 Telnet操作 221
9.9 Mock调用 224
9.10 结果缓存 226
9.11 小结 226
第10章 Dubbo过滤器 227
10.1 Dubbo过滤器概述 227
10.1.1 过滤器的使用 228
10.1.2 过滤器的总体结构 228
10.2 过滤器链初始化的实现原理 231
10.3 服务提供者过滤器的实现原理 233
10.3.1 AccessLogFilter的实现原理 233
10.3.2 ExecuteLimitFilter的实现原理 234
10.3.3 ClassLoaderFilter的实现原理 235
10.3.4 ContextFilter的实现原理 237
10.3.5 ExceptionFilter的实现原理 237
10.3.6 TimeoutFilter的实现原理 238
10.3.7 TokenFilter的实现原理 238
10.3.8 TpsLimitFilter的实现原理 239
10.4 消费者过滤器的实现原理 240
10.4.1 ActiveLimitFilter的实现原理 240
10.4.2 ConsumerContextFilter的实现原理 242
10.4.3 DeprecatedFilter的实现原理 242
10.4.4 FutureFilter的实现原理 243
10.5 小结 243
第11章 Dubbo注册中心扩展实践 245
11.1 etcd背景介绍 245
11.2 etcd数据结构设计 246
11.3 构建可运行的注册中心 248
11.3.1 扩展Transporter实现 248
11.3.2 扩展RegistryFactory实现 249
11.3.3 新增JEtcdClient实现 250
11.3.4 扩展FailbackRegistry实现 260
11.3.5 编写单元测试 263
11.4 搭建etcd集群并在Dubbo中运行 263
11.4.1 单机启动etcd 264
11.4.2 集群启动etcd 265
11.5 小结 266
第12章 Dubbo服务治理平台 267
12.1 服务治理平台总体结构 267
12.2 服务治理平台的实现原理 269
12.3 小结 273
第13章 Dubbo未来展望 274
13.1 Dubbo未来生态 274
13.1.1 开源现状 274
13.1.2 后续发展 275
13.2 云原生 281
13.2.1 面临的挑战 281
13.2.2 Service Mesh简介 283
13.2.3 Dubbo Mesh 284
13.3 小结 285
近年来,随着业务规模的发展和复杂度的增加,传统的单体应用已经很难适应业务迭代的诉求,越来越多的公司开始进行服务化的改造。很高兴看到Apache Dubbo被许多公司采用,作为服务化改造的基础架构进行演进。这里面就包括了许多互联网公司、国字头的大型企业,以及金融行业的巨头公司。Apache Dubbo因为良好的设计和扩展性受到许多开发者的欢迎,然而当开发者需要深入了解Dubbo底层的架构设计和实现的时候,往往会有些不知所措。网上也有很多爱好者撰写的源码分析等文章,虽有所有启发和裨益,但总觉得不够成体系。令人遗憾的是,市面上始终缺乏一本完整的、体系化的对Apache Dubbo进行深入原理剖析的书。
本书的出现填补了这一空白,本书由浅入深,娓娓道来。既有对Dubbo基本概念的讲解、底层原理的分析,同时又不乏生动的实战内容。作为进阶的内容,对扩展点、过滤器,以及Dubbo的高级特性,都有深入浅出的介绍。非常适合想了解Dubbo,对Dubbo内部实现感兴趣的读者阅读。
我和本书作者因为共同参与Dubbo社区而认识,彼时Dubbo刚刚加入Apache基金会进行孵化。在参与社区开发的过程中,经常有过深入的交流,在此过程中,本书作者所展现出来的对Dubbo内核机制透彻的理解,以及对细节的准确把握,让我受益匪浅。正式因为本书作者出色的贡献,他也成为Dubbo加入Apache孵化器之后首个committer(提交者,对代码具有提交权限),后续更是成为首个PMC Member(项目管理委员会成员,对项目发展具有决定性的投票权)。由他提笔来撰写本书,我认为再合适不过。在阅读本书的过程中,我收获颇丰。
工欲善其事,必先先利器。希望更多的读者因为本书而受益,也希望有更多的人阅读本书之后,了解Dubbo,参与到社区中,一起把社区发展得越来越好。
写在Dubbo从Apache基金会毕业之际。
张乎兴,阿里云技术专家,
Apache Member,Apache Dubbo/Tomcat PMC Member
序二
过去十多年互联网产业的高速发展,在给社会带来深刻变革的同时,也催生了服务架构的演进:从传统的单体应用到面向服务的SOA,再到现今主流的微服务架构,而Apache Dubbo就是微服务领域中的先行者和佼佼者。
Apache Dubbo是阿里巴巴于于2011年开源的一款高性能Java RPC框架,开源伊始就在业界产生了很大的影响,被大量公司广泛使用,甚至在很多公司自研的RPC框架中也能看到不少Dubbo的影子,可以说Dubbo在国内服务化体系演进过程中扮演了一个非常重要的角色。虽然中间经历了几年时间的沉寂,不过2017年阿里巴巴又重启了对Dubbo的开源维护,受到了社区的广泛欢迎,社区活跃度也随之迅速提升,Dubbo也正在从一个微服务领域的高性能RPC框架,逐步演变为一个完整的微服务生态。
之前由于工作关系,对Dubbo有过比较深入的研究,在阅读Dubbo的源码过程中,深深体会到了作者的匠心设计和深厚功底。我们知道服务往往是一家公司技术体系中最核心的部分,是整个业务的基石,所以作为一款涵盖了服务交互全过程的通用RPC框架,就必须能非常简单、无侵入地支持业务对服务调用过程中的各个阶段做扩展和定制,比如通信协议、序列化格式、路由策略、负载均衡、监控运维等。而Dubbo通过微内核设计、SPI扩展的方式完美地解决了这一难题,不管是Dubbo自身的特性,还是业务方的扩展,都统一通过SPI来实现,在Dubbo内核面前都是“一等公民”,从而保证了框架自身的可持续性和稳定性。有特殊需求的业务或公司可以在不修改一行Dubbo源码的情况下加载自己的扩展或接入自己的产品和运维体系,这一点非常值得我们学习。
和诣极认识也是源于Dubbo,他是Apache Dubbo项目的PMC,为Dubbo贡献了很多有价值的特性,如HTTP2协议、etcd注册中心等,现在有幸成为同事,对他也有了更深的了解。在我看来,他是一个很纯粹的技术人,熟读众多开源框架的源码并对其原理了然于胸,对技术也充满了热情,能在工作非常饱和的情况下坚持完成本书的写作,可见一斑。受其热情感染,所以当收到邀请为本书作序时,我也是毫不犹豫地就答应了。
收到书稿后第一时间细细通读了一遍,本书作为第一本体系化讲解Apache Dubbo的书籍,深入浅出地解释了Dubbo的工作原理,配以源码级解析,向读者展现了一款优秀的分布式中间件的设计用心和实现细节,非常适合有志于成为优秀架构师的技术爱好者细细阅读和品味。同时本书在Dubbo的协议设计、编解码原理、线程模型等方面也做了深度剖析,使读者不仅知其然也能知其所以然,有助于理解分布式环境下的服务通信范式,对问题排查也会有很大益处。所以在此向大家推荐本书,相信不管是初学者还是有多年经验的资深工程师,通过阅读本书,都会有所收获。
宋顺,蚂蚁金服高级技术专家
开源配置中心Apollo作者
前言
本书的由来
在Apache Dubbo(以下简称Dubbo)重新开源之前,Dubbo已经被很多公司广泛用于生产环境并获得了良好的反馈,很多公司内部也会建立私有分支自己维护,其中Dubbox就是基于Dubbo分支进行扩展并二次维护的。重新开源后,社区维护的Dubbo版本进行了大量“bug fix”和特性支持,收到了大量Dubbo用户的支持和参与。编写本书的想法是在开源后提出来的,因此本书取名《深入理解Apache Dubbo与实战》。
我最早接触Dubbo是2015年在参与云基础设施建设和微服务框架搭建时,那时的Dubbo基本是分布式系统的不二之选。我在使用过程中遇到了不少问题,不得不通过调试Dubbo源码来解决。在源码调试过程中,我逐渐理解Dubbo的设计理念,越发惊叹其架构设计的巧妙,正所谓:优秀的设计万里挑一。
后来我加入另外一家公司担任架构师,在基础架构组负责中间件与框架的研发,也是基于Dubbo等框架做二次开发。此时,我与本书另一位作者诣极成为同事,我们志趣相投,也为编写本书埋下了伏笔。
2017年,Dubbo经历了数年的停滞后,终于又重启维护。我还依稀记得阿里巴巴公司宣布的那天诣极的兴奋状,诣极是首批投入Apache Dubbo开源工作中去的开发者,期间为Apache Dubbo贡献了众多特性,如HTTP 2、etcd注册中心等,现在已经成为Apache Dubbo PMC。
Dubbo在重启维护后,短时间内有了大量的更新。此时我正就职于蚂蚁金服,每天苦于繁重的CRUD。我发现市面上没有一本系统讲解Dubbo的书籍,Dubbo相关的资料大都是一些博客文章,并且内容也相对陈旧。于是我“怂恿”诣极与我一起写这本书,作为这些年来工作的一个总结,他也欣然答应。
然后就是历时半年的写作过程,一波三折。中途有一些朋友加入,又因为各种不可抗拒的原因退出。我和诣极平时的工作都非常饱和,又要关注开源工作,常常焦头烂额。道虽迩,不行不至;事虽小,不为不成。时间是一点一点挤出来的,最终我们还是坚持完成了本书,并且没有偏离原计划太多。由于时间紧迫和能力有限,本书的内容难免有错漏,读者的勘误可以发送到以下电子邮箱:
[email protected]或[email protected]。
面向的读者
由于Dubbo重启维护后,官方的使用文档已经非常详细,本书如果再讲使用方法就没有太多的意义,所以一开始就按源码解析、设计原理说明的方向定位,因此需要读者有一定的基础。涉及源码的讲解,注定会有很多地方枯燥乏味,我们在编写的时候也尽量用自己的语言去提炼总结,让读者可以少看代码。
在开始动笔编写本书时,Apache Dubbo 2.7正在开发中,考虑到代码的稳定性,我们最终决定基于公开发布的2.6.5版本(release)来写。当本书快完成的时候,Apache Dubbo 2.7正式发布了。因此,本书的内容并不是基于最新的代码的,写书的速度永远比不上框架更新的速度,也希望读者能够谅解。
本书内容
第1章主要介绍Dubbo的简史、后续的规划和整体架构大图。
第2章主要介绍Dubbo的环境配置和基于Dubbo开发第一款应用程序。
第3章主要介绍Dubbo内置的常用注册中心的实现原理。
第4章主要介绍Dubbo扩展点加载的原理和实现。
第5章主要介绍Dubbo的配置解析、服务暴露、服务消费和优雅停机的机制。
第6章主要介绍Dubbo的RPC协议细节、编解码和服务调用的实现原理。
第7章主要介绍Dubbo的集群容错、路由和负载均衡机制。
第8章主要介绍Dubbo扩展点的相关知识。
第9章主要介绍Dubbo高级特性的实现和原理。
第10章主要介绍Dubbo过滤器的实现原理。
第11章主要介绍Dubbo中新增的etcd3注册中心的实战内容。
第12章主要介绍Dubbo服务治理平台的相关知识。
第13章主要介绍Dubbo的未来生态和Dubbo Mesh相关知识。
致谢
首先感谢我的领导与同事,也感谢我的团队,你们给了我很大的帮助。
然后要感谢我妻子,在我写作期间,她承担了家里的大小事务,让我可以有更多的时间投入写作。如果没有妻子的支持,那么这本书我肯定是无法完成的。
——温绍锦,Druid & Fastjson 作者
Dubbo自开源以来,市面上一直缺乏一本适合初学者实战和进阶的书籍,相关的内容散落在个人爱好者和官方的博客里。在Dubbo成为Apache*项目之际,诣极出版的这本生动翔实、深入浅出的书籍,对于想系统掌握Dubbo的读者来说,是案头颇具参考价值的一本图书,也期待读者在掌握Dubbo后,可以一起加入Dubbo的社区。
——罗毅,Apache Dubbo PMC副总裁
本书是由Apache Dubbo PMC参与编写的书籍,其内容的权威性具有指标性意义。一方面得益于作者长期作为Dubbo资深用户,能够感同使用者求知心理。另一方面,作者作为Dubbo的改良者和革新者,将自己的独到见解著于此书,将技术的广度和深度提升到令人印象深刻的地步。如果您期待掌握“Hello,World”使用技巧,本书或许会令人失望。倘若您有志成为Apache Dubbo开源社区的合伙人,学习此书会是一种明智的选择,也将是Dubbo 2.6 通往Dubbo 2.7的捷径。
——小马哥,Apache Dubbo PMC,《Spring Boot编程思想》作者
评论
还没有评论。