深入理解Apache Dubbo与实战
  • 推荐0
  • 收藏4
  • 浏览4.6K

深入理解Apache Dubbo与实战

诣极 , 林琳 (作者) 

  • 书  号:978-7-121-36634-5
  • 出版日期:2019-07-08
  • 页  数:300
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥79.00
本书首先介绍Dubbo的简史、后续的规划和整体架构大图;接着介绍Dubbo环境配置,并基于Dubbo开发第一款应用程序;然后介绍Dubbo内置的常用注册中心的实现原理,Dubbo扩展点加载的原理和实现,Dubbo的启动、服务暴露、服务消费和优雅停机的机制,Dubbo中RPC协议细节、编解码和服务调用实现原理,Dubbo集群容错、路由和负载均衡机制,Dubbo的扩展点相关知识,Dubbo高级特性的实现和原理,Dubbo常用的Filter的实现原理,Dubbo中新增etcd3注册中心的实战内容和Dubbo服务治理平台的相关知识;最后介绍Dubbo未来生态和Dubbo Mesh的相关知识。
本书适合对Dubbo有一定了解、对Dubbo框架感兴趣的读者,也适合想深入理解Dubbo原理的资深开发者阅读。
详细解读Dubbo框架工作原理和底层机制
展示动手扩展Dubbo特性的实战场景
商宗海,花名诣极,Apache Dubbo PMC。曾就职于阿里巴巴、有赞,担任Dubbo框架技术负责人,长期活跃在Dubbo社区。现就职于蚂蚁金服中间件团队,负责sofa-rpc和云原生方向的产品研发。


林琳,花名景竹,曾就职于华软集团、递四方等公司,担任技术经理、高级架构师等职位。现就职于蚂蚁金服支付宝事业群,负责工程平台架构工作。
前言
本书的由来
在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相关的资料大都是一些博客文章,并且内容也相对陈旧。于是我“怂恿”诣极与我一起写这本书,作为这些年来工作的一个总结,他也欣然答应。
然后就是历时半年的写作过程,一波三折。中途有一些朋友加入,又因为各种不可抗拒的原因退出。我和诣极平时的工作都非常饱和,又要关注开源工作,常常焦头烂额。道虽迩,不行不至;事虽小,不为不成。时间是一点一点挤出来的,最终我们还是坚持完成了本书,并且没有偏离原计划太多。由于时间紧迫和能力有限,本书的内容难免有错漏,读者的勘误可以发送到以下电子邮箱:
yiji@apache.org或315157973@qq.com。
面向的读者
由于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相关知识。
致谢
首先感谢我的领导与同事,也感谢我的团队,你们给了我很大的帮助。
然后要感谢我妻子,在我写作期间,她承担了家里的大小事务,让我可以有更多的时间投入写作。如果没有妻子的支持,那么这本书我肯定是无法完成的。

目录

目录
第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

本书勘误

印次
  • 页码:5  •  行数:5  •  印次: 1

    在微服务架构中,一个应用会被拆分一个个独立、可配置、可运行、可维护的子服务……

    应为:

    在微服务架构中,一个应用会被拆分 一个个独立、可配置、可运行、可维护的子服务……

    王序猿 提交于 2019/8/8 13:18:58
    陈晓猛 确认于 2019/8/8 14:50:28
  • 页码:24  •  行数:4  •  印次: 3

    telnet localhost 20890 应该是20880端口,在23页声明中dubbo开启的是20880端口

    huchaolan 提交于 2020/6/26 16:07:36
    陈晓猛 确认于 2020/7/3 8:35:40
  • 页码:39  •  行数:11  •  印次: 2

    表3-2 中目录名称「/dubbo/service/consumers」的存储值样例应该为「consumer://192.168.0.1.5002/com.alibaba.demo.Service?key=value&…」

    gallenzhang 提交于 2019/9/17 0:32:04
    陈晓猛 确认于 2019/9/18 10:21:48
  • 页码:42  •  行数:8  •  印次: 1

    都会被认为是“事物”操作,应该是“事务”操作。后面的第10行同理。

    邱道长 提交于 2019/8/30 13:55:00
    陈晓猛 确认于 2019/8/30 14:23:56
  • 页码:65  •  行数:1  •  印次: 1

    错误:我们在代码清单 4-4 中可以看到,
    应为:4-5

    yanshuojia 提交于 2019/7/31 22:56:03
    陈晓猛 确认于 2019/8/5 13:10:32

读者评论

  • 书的源码呢?怎么没有发现

    hudeyi100发表于 2022/7/22 16:05:10
  • 什么时候出电子版的?

    kevin0331发表于 2019/7/20 23:39:52
    • 这本书没有电子版权

      陈晓猛发表于 2019/7/22 7:50:58

图书类别

相关博文

  • 被Dubbo虐过吗,反击开始!

    被Dubbo虐过吗,反击开始!

    管理员账号 2019-07-19

    5 月 21 日,经过一年多的孵化,Apache软件基金会宣布 Dubbo 正式毕业,成为 Apache 的顶级项目。 从孵化器毕业是一种荣誉,也是另一种开始。Apache Dubbo(以下简称Dubbo)是阿里巴巴于于2011年开...

    管理员账号 2019-07-19
    871 0 0 0

相关图书

ATT&CK框架实践指南

过去,入侵检测能力的度量是个公认的行业难题,各个企业得安全负责人每年在入侵防护上都投入大量费用,但几乎没有人能回答CEO 的问题:“买了这么多产品,我们的入侵防...

¥148.00

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

吴治辉 (作者)

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

 

RabbitMQ实战指南

朱忠华 (作者)

本书从消息中间件的概念和RabbitMQ的历史切入,主要阐述RabbitMQ的安装、使用、配置、管理、运维、原理、扩展等方面的细节。本书大致可以分为基础篇、进阶...

¥79.00

Spring Boot 2精髓:从构建小系统到架构分布式大系统

李家智 (作者)

Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring ...

¥79.00

架构探险:从零开始写分布式服务框架

李业兵 李业兵 (作者)

分布式服务框架目前已经是互联网公司实现SOA服务化架构的必备基础设施,对于一般的开发而言,自己要独立实现一个分布式服务框架,还是有相当的难度的。本书围绕如何从零...

 

Apache Kafka源码剖析

徐郡明 (作者)

本书以 Kafka 0.10.0 版本源码为基础,针对 Kafka的架构设计到实现细节进行详细阐述。本书共5 章,从 Kafka 的应用场景、源码环境搭建开始逐...

¥89.00