描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121420948
RPC概览
主要介绍RPC的核心概念、历史背景、演进过程及技术原理,并且介绍四个常见的RPC框架与使用示例。
RPC框架核心组件
详细介绍RPC框架的核心组成部分、异构语言下RPC框架的挑战,以及解决异构语言的方案,并且针对每个核心组成部分介绍业界常见的实现方案。基于这些核心组成部分,还介绍如何编写一个RPC框架的示例。
服务治理
详细介绍服务治理的核心内容,包括注册中心、配置中心、元数据中心、服务路由策略、负载均衡策略、高可用策略及服务可观测性。
本书由浅入深、详细地介绍了RPC技术和RPC框架的原理。除此之外,本书还详细介绍了与RPC框架原理相关的技术,包括远程通信技术、通信协议、序列化技术、动态代理技术、IDL等。
本书首先介绍了RPC技术和RPC框架的发展背景、历史及演进过程,以加深读者对RPC技术的理解。然后介绍了常见的RPC框架,让读者能够对这些RPC框架有整体上的了解。接下来将RPC框架的核心组成部分拆开,对这些组成部分逐个进行介绍,并且介绍相关的技术和概念,比如介绍远程通信方式时,会介绍Socket技术、I/O模型等。本书接着介绍了实现简易的RPC框架的流程,让读者能够上手实际操作。本书还介绍了RPC框架是如何应对异构语言下的挑战的,并且介绍了与RPC框架相关的服务治理内容,包括注册中心、配置中心、元数据中心、服务路由策略、负载均衡策略、高可用策略及服务可观测性,让读者能够全面地了解RPC框架。
目录
第1部分 RPC概览
第1章 初识RPC 2
1.1 计算机核心处理器简介 3
1.1.1 单核处理器系统时代 3
1.1.2 多核处理器系统时代 4
1.1.3 多处理器系统时代 5
1.2 IPC简介 6
1.3 RPC简介 7
1.4 RPC的发展历程 10
1.5 RPC核心组成部分 11
1.5.1 服务调用方 12
1.5.2 服务提供方 12
1.5.3 本地存根 12
1.5.4 RPC通信者 13
1.6 RPC调用过程 13
1.6.1 服务暴露的过程 14
1.6.2 服务发现的过程 15
1.6.3 服务引用的过程 16
1.6.4 方法调用的过程 16
第2章 初览RPC框架 18
2.1 RPC框架简介 19
2.2 RPC框架发展及市场现状 21
2.3 Dubbo简介 25
2.4 gRPC简介 31
2.5 Thrift简介 38
2.6 Spring Cloud简介 44
2.6.1 Spring Cloud项目简介 45
2.6.2 使用Spring Cloud的组件实现RPC调用的示例 51
2.7 选择RPC框架的几个角度 61
第2部分 RPC框架核心组件
第3章 远程通信方式 68
3.1 远程通信方式简介 69
3.1.1 Socket简介 69
3.1.2 Java对Socket接口的封装 74
3.1.3 网络应用程序框架 78
3.2 I/O模型 78
3.3 Java对I/O模型的封装 81
3.3.1 BIO 81
3.3.2 NIO 82
3.3.3 AIO 93
3.4 远程通信实现方案之Netty 99
3.4.1 Netty核心组件介绍 102
3.4.2 线程模型 105
3.5 远程通信实现方案之Mina 111
3.6 远程通信实现方案之Grizzly 119
第4章 通信协议 127
4.1 标准协议 128
4.2 传输层协议 131
4.3 应用层协议 136
4.4 自定义协议简介 141
4.5 如何设计自定义协议 143
第5章 序列化 147
5.1 序列化和反序列化 148
5.2 文本格式的序列化方案 149
5.2.1 XML格式 150
5.2.2 JSON格式 152
5.3 二进制格式的序列化方案 158
5.4 序列化框架选型 167
第6章 动态代理 170
6.1 动态代理简介 171
6.2 JDK自带的动态代理方案 175
6.2.1 JDK实现动态代理的示例 175
6.2.2 通过JDK实现动态代理的原理 177
6.3 CGLib动态代理方案 183
6.3.1 使用CGLib实现动态代理的示例 184
6.3.2 使用CGLib实现动态代理的原理 185
6.4 Javassist动态代理方案 193
6.4.1 使用Javassist实现动态代理的示例 194
6.4.2 使用Javassist实现动态代理的原理 195
第7章 实现一个简易的RPC框架 203
7.1 实现简易的RPC框架 204
7.2 实现远程调用 205
7.3 实现服务治理能力 216
7.4 使用简易的RPC框架 222
第8章 异构语言应用调用 228
8.1 RPC在异构语言下的挑战 229
8.2 IDL简介 230
8.3 Dubbo在跨语言上的解决方案 232
8.3.1 Dubbo服务提供者 233
8.3.2 Dubbo服务消费者 237
8.4 CXF在跨语言上的解决方案 240
8.5 gRPC在跨语言上的解决方案 241
第3部分 服务治理
第9章 注册中心 244
9.1 注册中心简介 245
9.2 CAP模型与ACID、BASE理论 250
9.3 分布式一致性 256
9.4 注册中心实现方案之Eureka 262
9.5 注册中心实现方案之ZooKeeper 265
9.6 注册中心实现方案之Nacos 269
9.7 注册中心在一致性和可用性之间的抉择 273
第10章 配置中心 276
10.1 配置中心简介 277
10.2 配置中心实现方案之Apollo 281
10.2.1 服务端的设计 283
10.2.2 客户端的设计 285
10.3 配置中心实现方案之Nacos 286
第11章 元数据中心 292
11.1 元数据中心简介 293
11.2 元数据中心的选型 295
第12章 服务的路由 297
12.1 路由策略 298
12.2 负载均衡策略 302
12.2.1 服务端负载均衡 303
12.2.2 客户端负载均衡 304
12.3 负载均衡算法 305
12.3.1 随机算法 306
12.3.2 轮询算法 306
12.3.3 少活跃数算法 307
12.3.4 一致性Hash负载均衡算法 308
第13章 分布式系统高可用策略 310
13.1 分布式系统高可用 311
13.2 Hystrix 317
13.3 Resilience4j 320
13.4 Sentinel 324
第14章 服务可观测性 330
14.1 服务可观测性简介 331
14.2 日志记录 333
14.3 聚合度量 335
14.4 链路追踪 337
RPC作为目前的主流技术之一,它打破了某一项任务所需的计算资源只能靠一台计算机来实现的固有想法,对分布式计算、微服务等领域都有着重要而深远的影响。从20世纪80年代至今近四十年的时间内,由RPC衍生出来的技术非常多,包括很多现在常见的中间件技术都离不开RPC。RPC是技术时代的产物,它是由当时的社会发展、时代背景及需求所决定的。网络技术的发展,以及操作系统中的进程间通信技术越发多样化和成熟,这些都为RPC的出现打下了非常好的基础。
RPC是一种技术思想,它不可能一直停留在理论层面,需要落地,因此RPC框架慢慢地衍生出来。RPC框架是为了实现RPC而衍生出来的技术产物,它是RPC领域中可复用的软件架构解决方案。从以ONC RPC(Open Network Computing Remote Procedure Call)和DCE RPC(Distributed Computing Environment Remote Procedure Call)为首的初代RPC框架,到CORBA、DCOM、ZeroC ICE,再到现在流行的Apache Dubbo、Spring Cloud、gRPC、Thrift等,其间RPC框架也经历了几十年的发展,许多RPC框架都是从公司或者组织内开始“生根发芽”的,逐渐发展成熟后,被贡献到开源社区,由开源社区来发展和维护。
笔者待过的公司或多或少都使用了RPC技术,有的采用开源的RPC框架,有的采用自研RPC框架,使用RPC框架来实现RPC技术已经成为非常普遍的现象,而在使用RPC框架的时候,难免会遇到一些问题,此时需要熟悉RPC框架的原理才能解决这些问题。不同的RPC框架的实现细节会有所不同,但是底层的抽象都离不开几十年前的RPC技术理论,所以RPC技术的理论知识将是打开RPC框架原理之门的钥匙。
本书写作目的
笔者作为Apache Dubbo Committer,在参与Dubbo开源社区建设的同时,也在技术博客及自媒体平台上撰写和分享了一些有关RPC框架源码解读的文章,笔者经常收到一些读者的私信,希望笔者能够给他们推荐一些有关RPC的学习资料,让他们通过学习RPC来提高对这些开源的RPC框架源码和原理的理解程度,降低学习和研读RPC框架源码的成本和门槛。所以撰写本书的想法并不是突然出现的,随着类似的私信变多,撰写本书的想法逐渐形成了。
撰写本书的初衷是希望能够给读者介绍RPC技术及RPC框架的实现原理,让读者在面对如此众多的RPC框架时,能够较快地参透其原理。除此之外,本书的写作目的还有以下三点:
- 希望本书可以让读者了解RPC及RPC框架的发展历史和背景,了解其演进过程。通过了解RPC的发展背景和历史加深对RPC的理解。
- 希望本书可以让读者了解在实现RPC框架或者在对RPC框架选型时,该考虑哪些重要的因素,并且了解常见的技术选型。
- 希望本书可以让读者了解RPC框架提供的服务治理的内容。
本书特点
想要了解RPC框架原理,重要的就是了解RPC框架怎么使用,了解RPC框架内对RPC技术的抽象,以及RPC框架提供的服务治理的内容。本书的内容涵盖了这三部分,除了介绍市面上主流的RPC框架,还介绍了使用这些RPC框架的示例,方便读者通过这些示例上手RPC框架。除此之外,本书还介绍了对RPC框架的选型,为读者提供选型指南。
在介绍RPC框架的核心组成部分时,对每一个核心组成部分,本书都会完整地介绍该部分的周边知识,旨在让该领域的新手读者也能够轻松理解。除此之外,在介绍每一个核心组成部分时,本书都会介绍业界不同的实现方案,加深读者对这一核心组成部分的理解。本书还提供了一个实现简易的RPC框架的示例,通过动手实现RPC框架,可加深读者对RPC框架实现原理的认知,不单单停留在理论层面,而是能够直接运用RPC技术理论编写RPC框架。
本书结构
本书主要分为三部分。
部分为RPC概览(第1章、第2章),第1章主要介绍RPC的核心概念、历史背景、演进过程及技术原理,第2章主要介绍RPC框架的概念、发展历史及现状,并且介绍了四个常见的RPC框架,提供了这四个RPC框架的使用示例。
第二部分为RPC框架核心组件(第3章至第8章),详细介绍了RPC框架的核心组成部分、异构语言下RPC框架的挑战,以及解决异构语言的方案,并且针对每个核心组成部分介绍业界常见的实现方案。基于这些核心组成部分,本部分还介绍了编写一个RPC框架的示例。
第三部分为服务治理(第9章至第14章),详细介绍了服务治理的核心内容,其中每章的内容相对独立,读者可按照自身所需选择对应的内容进行阅读。
本书大部分的示例采用的编程语言都是Java,但各部分内容及其原理与语言无关,即使是没有Java基础的读者,也能通过本书理解RPC的原理和RPC框架的原理。
源代码与官方参考
本书示例代码位于www.broadview.com.cn/42094的下载资源处,读者可以从此处获取示例代码。
勘误和支持
若读者在阅读本书的过程中有任何问题或者建议,可以通过本书源码仓库提交Issue或者PR,也可以关注“加点代码调调味”微信公众号并加入微信群与笔者交流。笔者十分感谢并重视读者的反馈,会对读者提出的问题、建议进行梳理与反馈,并在本书后续版本中及时做出勘误与更新。
致谢
在本书写作和出版的近一年半时间里,感谢陈晓猛编辑的鼓励和支持,同时感谢理解我的家人,让我能够借用大量陪伴他们的时间创作本书。
华钟明
评论
还没有评论。