[201907][深入理解 Apache Dubbo 与实践][诣极][林琳][著]
https://github.com/zonghaishang/dubbo-samples
第 1 章 Dubbo - 高性能 RPC 通信框架
1.1 应用架构演进过程
1.1.1 单体应用
1.1.2 分布式应用
1.2 Dubbo 简介
1.2.1 Dubbo 的发展历史
1.2.2 Dubbo 是什么
1.2.3 Dubbo 解决什么问题
1.2.4 谁在使用 Dubbo
1.2.5 Dubbo 后续的规划
1.3 Dubbo 总体大图
1.3.1 Dubbo 总体分层
1.3.2 Dubbo 核心组件
1.3.3 Dubbo 总体调用过程
1.4 小结
第 2 章 开发第一款 Dubbo 应用程序
2.1 配置开发环境
2.1.1 下载并安装 JDK
2.1.2 下载并安装 IDE
2.1.3 下载并配置 Maven
2.1.4 下载并配置 ZooKeeper
2.1.5 使用 IDEA 调试 Dubbo 源码
2.2 基于 XML 配置实现
2.2.1 编写 Echo 服务器
2.2.2 编写 Echo 客户端
2.3 基于注解实现
2.3.1 基于注解编写 Echo 服务器
2.3.2 基于注解编写 Echo 客户端
2.4 基于 API 实现
2.4.1 基于 API 编写 Echo 服务器
2.4.2 基于 API 编写 Echo 客户端
2.5 构建并运行
2.6 小结
第 3 章 Dubbo 注册中心
3.1 注册中心概述
3.1.1 工作流程
3.1.2 数据结构
3.1.3 ZooKeeper 原理概述
3.1.4 Redis 原理概述
3.2 订阅/发布
3.2.1 ZooKeeper 的实现
3.2.2 Redis 的实现
3.3 缓存机制
3.3.1 缓存的加载
3.3.2 缓存的保存与更新
3.4 重试机制
3.5 设计模式
3.5.1 模板模式
3.5.2 工厂模式
3.6 小结
第 4 章 Dubbo 扩展点加载机制
4.1 加载机制概述
4.1.1 Java SPI
4.1.2 扩展点加载机制的改进
4.1.3 扩展点的配置规范
4.1.4 扩展点的分类与缓存
4.1.5 扩展点的特性
4.2 扩展点注解
4.2.1 扩展点注解:@SPI
4.2.2 扩展点自适应注解:@Adaptive
4.2.3 扩展点自动激活注解:@Activate
4.3 ExtensionLoader 的工作原理
4.3.1 工作流程
4.3.2 getExtension 的实现原理
4.3.3 getAdaptiveExtension 的实现原理
4.3.4 getActivateExtension 的实现原理
4.3.5 ExtensionFactory 的实现原理
4.4 扩展点动态编译的实现
4.4.1 总体结构
4.4.2 Javassist 动态代码编译
4.4.3 JDK 动态代码编译
4.5 小结
第 5 章 Dubbo 启停原理解析
5.1 配置解析
5.1.1 基于 schema 设计解析
5.1.2 基于 XML 配置原理解析
5.1.3 基于注解配置原理解析
5.2 服务暴露的实现原理
5.2.1 配置承载初始化
5.2.2 远程服务的暴露机制
5.2.3 本地服务的暴露机制
5.3 服务消费的实现原理
5.3.1 单注册中心消费原理
5.3.2 多注册中心消费原理
5.3.3 直连服务消费原理
5.4 优雅停机原理解析
5.5 小结
第 6 章 Dubbo 远程调用
6.1 Dubbo 调用介绍
6.2 Dubbo 协议详解
6.3 编解码器原理
6.3.1 Dubbo 协议编码器
6.3.2 Dubbo 协议解码器
6.4 Telnet 调用原理
6.4.1 Telnet 指令解析原理
6.4.2 Telnet 实现健康监测
6.5 ChannelHandler
6.5.1 核心 Handler 和线程模型
6.5.2 Dubbo 请求响应 Handler
6.5.3 Dubbo 心跳 Handler
6.6 小结
第 17 章 Dubbo 集群容错
7.1 Cluster 层概述
7.2 容错机制的实现
7.2.1 容错机制概述
7.2.2 Cluster 接口关系
7.2.3 Failover 策略
7.2.4 Failfast 策略
7.2.5 Failsafe 策略
7.2.6 Failback 策略
7.2.7 Available 策略
7.2.8 Broadcast 策略
7.2.9 Forking 策略
7.3 Directory 的实现
7.3.1 总体实现
7.3.2 RegistryDirectory 的实现
7.4 路由的实现
7.4.1 路由的总体结构
7.4.2 条件路由的参数规则
7.4.3 条件路由的实现
7.4.4 文件路由的实现
7.4.5 脚本路由的实现
7.5 负载均衡的实现
7.5.1 包装后的负载均衡
7.5.2 负载均衡的总体结构
7.5.3 Random 负载均衡
7.5.4 RoundRobin 负载均衡
7.5.5 LeastActive 负载均衡
7.5.6 一致性 Hash 负载均衡
7.6 Merger 的实现
7.6.1 总体结构
7.6.2 MergeableClusterInvoker 机制
7.7 Mock
7.7.1 Mock 常见的使用方式
7.7.2 Mock 的总体结构
7.7.3 Mock 的实现原理
7.8 小结
第 8 章 Dubbo 扩展点
8.1 Dubbo 核心扩展点概述
8.1.1 扩展点的背景
8.1.2 扩展点整体架构
8.2 RPC 层扩展点
8.2.1 Proxy 层扩展点
8.2.2 Registry 层扩展点
8.2.3 Cluster 层扩展点
8.3 Remote 层扩展点
8.3.1 Protocol 层扩展点
8.3.2 Exchange 层扩展点
8.3.3 Transport 层扩展点
8.3.4 Serialize 层扩展点
8.4 其他扩展点
第 9 章 Dubbo 高级特性
9.1 Dubbo 高级特性概述
9.2 服务分组和版本
9.3 参数回调
9.4 隐式参数
9.5 异步调用
9.6 泛化调用
9.7 上下文信息
9.8 Telnet 操作
9.9 Mock 调用
9.10 结果缓存
9.11 小结
第 10 章 Dubbo 过滤器
10.1 Dubbo 过滤器概述
10.1.1 过滤器的使用
10.1.2 过滤器的总体结构
10.2 过滤器链初始化的实现原理
10.3 服务提供者过滤器的实现原理
10.3.1 AccessLogFilter 的实现原理
10.3.2 ExecuteLimitFilter 的实现原理
10.3.3 ClassLoaderFilter 的实现原理
10.3.4 ContextFilter 的实现原理
10.3.5 ExceptionFilter 的实现原理
10.3.6 TimeoutFilter 的实现原理
10.3.7 TokenFilter 的实现原理
10.3.8 TpsLimitFilter 的实现原理
10.4 消费者过滤器的实现原理
10.4.1 ActiveLimitFilter 的实现原理
10.4.2 ConsumerContextFilter 的实现原理
10.4.3 DeprecatedFilter 的实现原理
10.4.4 FutureFilter 的实现原理
10.5 小结
第 11 章 Dubbo 注册中心扩展实践
11.1 etcd 背景介绍
11.2 etcd 数据结构设计
11.3 构建可运行的注册中心
11.3.1 扩展 Transporter 实现
11.3.2 扩展 RegistryFactory 实现
11.3.3 新增 JEtcdClient 实现
11.3.4 扩展 FailbackRegistry 实现
11.3.5 编写单元测试
11.4 搭建 etcd 集群并在 Dubbo 中运行
11.4.1 单机启动 etcd
11.4.2 集群启动 etcd
11.5 小结
第 12 章 Dubbo 服务治理平台
12.1 服务治理平台总体结构
12.2 服务治理平台的实现原理
12.3 小结
第 13 章 Dubbo 未来展望
13.1 Dubbo 未来生态
13.1.1 开源现状
13.1.2 后续发展
13.2 云原生
13.2.1 面临的挑战
13.2.2 Service Mesh 简介
13.2.3 Dubbo Mesh
13.3 小结