第 1 章 Tars——多语言高性能 RPC 框架 1
1.1 Tars 框架简介 1
1.1.1 设计思想 1
1.1.2 架构拓扑 2
1.1.3 服务交互流程 3
1.1.4 Tars 服务的基础概念 5
1.2 实战项目介绍 6
第 2 章 Tars 框架的使用 7
2.1 使用 docker-compose 部署 Tars 服务框架 7
2.1.1 部署脚本 7
2.1.2 平台使用简介 9
2.2 Tars-Java 服务构建及调用 10
2.2.1 服务端开发 10
2.2.2 客户端开发 13
2.3 Tars-Go 服务构建及调用 16
2.3.1 服务端开发 16
2.3.2 客户端开发 18
第 3 章 Tars 框架的高级特性 19
3.1 按 set 调用 19
3.1.1 配置 set 19
3.1.2 使用 set 20
3.2 无损发布 21
3.2.1 需求背景 21
3.2.2 节点的静态权重 21
3.2.3 流量控制 23
3.3 自定义 Filter 24
3.3.1 自定义日志拦截器 24
3.3.2 MDC 与异步线程 26
3.3.3 基于 Spring AOP 实现 MDC 链路追踪切面 27
3.4 使用 Tars 管理命令 28
3.4.1 停止 Tars 服务 28
3.4.2 Tars 内置的管理命令 28
3.4.3 Tars 自定义命令 29
3.5 使用 Protocol Buffers 协议 31
3.6 调用链追踪的原理 32
3.6.1 分布式系统的远程调用过程 33
3.6.2 调用链追踪系统的设计与实现 36
3.6.3 开源调用链 38
3.7 Tars-Java 调用链实践及源码分析 39
3.7.1 部署 Zipkin 服务 40
3.7.2 服务端代码埋点 40
3.7.3 通过私有模板配置调用链地址 40
3.7.4 动手实践 42
3.7.5 源码分析 44
3.8 Tars 分布式缓存 DCache 49
3.8.1 DCache 简介 49
3.8.2 安装 DCache 51
3.8.3 使用 DCache 51
3.8.4 原理 55
第 4 章 Tars 框架核心原理 59
4.1 Tars RPC 原理剖析 59
4.1.1 什么是 RPC 59
4.1.2 如何实现一个 RPC 60
4.1.3 Tars 如何实现 RPC 65
4.2 Tars NIO 网络编程 75
4.2.1 Java NIO 原理概述 75
4.2.2 Tars NIO 网络编程 80
4.3 Tars Netty 网络编程 87
4.3.1 使用方法和实现细节 87
4.3.2 源码解析 90
第 5 章 Tars-Java 源码解析 96
5.1 Tars 客户端源码分析 96
5.1.1 远程调用的一般流程 96
5.1.2 Tars-Java 客户端设计介绍 97
5.2 Tars 服务端源码分析 107
5.2.1 服务端启动流程 108
5.2.2 Tars 监控 112
5.2.3 自定义命令 116
5.3 RPC 请求异步转同步 121
5.3.1 传统的 TCP 通信 121
5.3.2 Tars-Java 1.7.x 之前版本 122
5.3.3 Tars-Java 1.7.x 及之后版本 130
5.3.4 Tars-Java 2.x 及之后版本 133
5.4 Tars-Java 染色介绍 134
5.4.1 Tars-Java 染色功能概述 134
5.4.2 Tars-Java 染色源码分析 137
5.4.3 小结 143
5.5 Tars 文件如何生成 Java 代码 144
5.5.1 Tars-Java 代码生成示例 144
5.5.2 Maven 插件编写之 Mojo 146
5.5.3 Tars 文件解析 148
5.6 Tars-Java 日志介绍 153
5.6.1 Tars-Java 日志概述 153
5.6.2 Tars-Java 日志配置与使用 153
5.6.3 Tars-Java 日志管理机制 154
第 6 章 Tars-Cpp 源码解析 160
6.1 Tars-Cpp 整体架构 160
6.1.1 连接管理 160
6.1.2 网络收发线程模型 162
6.1.3 业务处理线程模型 164
6.1.4 客户端代理 165
6.2 Tars-Cpp 网络层实现分析 166
6.2.1 源码结构 166
6.2.2 网络相关初始化 167
6.2.3 连接建立流程 172
6.2.4 网络数据包接收与协议解析 174
6.2.5 业务线程处理与路由机制 178
6.2.6 业务层连接管理与应答发送 183
6.3 Tars 协程实现分析 185
6.3.1 什么是协程 185
6.3.2 协程的作用 185
6.3.3 协程的分类 186
6.3.4 Tars 协程实现 188
6.3.5 Tars 协程调度器 191
6.4 tarsRegistry 原理剖析 195
6.4.1 tarsRegistry 功能分析 196
6.4.2 tarsRegistry 路由加载 196
6.4.3 tarsRegistry 线程模型 198
6.5 服务发现 199
6.5.1 为什么需要服务发现系统 199
6.5.2 服务发现机制需要哪些角色 200
6.5.3 服务发现的几种模式 200
6.5.4 Tars 服务发现 202
6.6 tarsNode 原理剖析 203
6.6.1 业务服务管理 203
6.6.2 服务保活 206