本书由浅入深、详细地介绍了RPC技术和RPC框架的原理。除此之外,本书还详细介绍了与RPC框架原理相关的技术,包括远程通信技术、通信协议、序列化技术、动态代理技术、IDL等。
本书首先介绍了RPC技术和RPC框架的发展背景、历史及演进过程,以加深读者对RPC技术的理解。然后介绍了常见的RPC框架,让读者能够对这些RPC框架有整体上的了解。接下来将RPC框架的核心组成部分拆开,对这些组成部分逐个进行介绍,并且介绍相关的技术和概念,比如介绍远程通信方式时,会介绍Socket技术、I/O模型等。本书接着介绍了实现简易的RPC框架的流程,让读者能够上手实际操作。本书还介绍了RPC框架是如何应对异构语言下的挑战的,并且介绍了与RPC框架相关的服务治理内容,包括注册中心、配置中心、元数据中心、服务路由策略、负载均衡策略、高可用策略及服务可观测性,让读者能够全面地了解RPC框架。
RPC概览
主要介绍RPC的核心概念、历史背景、演进过程及技术原理,并且介绍四个常见的RPC框架与使用示例。
RPC框架核心组件
详细介绍RPC框架的核心组成部分、异构语言下RPC框架的挑战,以及解决异构语言的方案,并且针对每个核心组成部分介绍业界常见的实现方案。基于这些核心组成部分,还介绍如何编写一个RPC框架的示例。
服务治理
详细介绍服务治理的核心内容,包括注册中心、配置中心、元数据中心、服务路由策略、负载均衡策略、高可用策略及服务可观测性。
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,也可以关注加点代码调调味微信公众号并加入微信群与笔者交流。笔者十分感谢并重视读者的反馈,会对读者提出的问题、建议进行梳理与反馈,并在本书后续版本中及时做出勘误与更新。
致谢
在本书写作和出版的近一年半时间里,感谢陈晓猛编辑的鼓励和支持,同时感谢理解我的家人,让我能够借用大量陪伴他们的时间创作本书。
华钟明