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,也可以关注“加点代码调调味”微信公众号并加入微信群与笔者交流。笔者十分感谢并重视读者的反馈,会对读者提出的问题、建议进行梳理与反馈,并在本书后续版本中及时做出勘误与更新。
致谢
在本书写作和出版的近一年半时间里,感谢陈晓猛编辑的鼓励和支持,同时感谢理解我的家人,让我能够借用大量陪伴他们的时间创作本书。
华钟明