为了账号安全,请及时绑定邮箱和手机立即绑定
慕课专栏

目录

索引目录

白话RPC框架原理及其实现

原价 ¥ 68.00

立即订阅
03 谈一场异地恋——RPC到底是什么
更新时间:2019-12-03 09:57:27
对自己不满是任何真正有才能的人的根本特征之一。——契诃夫

前言

上一小节我们讲到了 RPC 出现的原动力。其实对于 RPC 到底是什么还是有些模糊,本小节会详细描述在 RPC 中的一些概念。

RPC

RPC 这个概念术语在二十世纪 80 年代由 Bruce Jay Nelson 在论文 《Implementing Remote Procedure Calls》中提出。RPC 叫做远程过程调用,首先我们来肢解这个 “远程过程调用” 概念:

  • 远程过程:它指把进程内的部分程序逻辑放到其它的机器上,也就是现在常说的业务拆解,让每个服务仅仅对单个业务负责,让每个服务具备独立的可扩展性、可升级性,易维护,在两台机器上的过程互相被称为远程过程,这个概念使正确的构建分布式计算更加容易,也为后续的服务化架构风格奠定了基础。
  • 过程调用:它用于程序内的控制和数据的传输,这个机制很容易理解。

当 “过程调用” 遇到 “远程过程” 时,意味着过程调用可以跨越机器、网络来进行程序控制和数据的传输。

论文中提到,RPC 最基础的程序结构分为五个部分:

  • User:可以看成是服务调用方,它的作用就是就是通过 User-stub 向服务提供方 Server 发起调用,并且接收从 User-stub 返回的调用结果。
  • User-stub:服务调用方本地的存根对象,本地存根是一个可执行体。类似于反射获得的 invoke。它的作用是将需要远程调用的接口、方法以及参数通过约定好的协议进行序列化,并且将序列化的数据 RPCRuntime 对象进行传输,最后将服务提供方的返回值反序列化为 User 可以直接使用的对象。
  • RPCRuntime:远程调用运行时的对象,可以把它理解为远程通信对象,它存在于服务提供方和服务调用方,作用是建立起调用方和提供方的连接,进行远程通信。
  • Server-stub:服务提供方的本地存根,它的作用是把服务端的 RPCRuntime 中获得的数据进行反序列化,调用本地方法。把返回值进行序列化传输到 RPCRuntime 进行发送。
  • Server:它是服务提供方的业务逻辑,Server-stub 调用的本地方法,执行的就是 Server 中对应方法的逻辑。

这是 RPC 最基础也是最关键的五部分,它奠定了后续各类 RPC 框架的基础。

在我看来 RPC 就好像是谈一场异地恋。两个服务之间的调用,就像是一对情侣分隔两地,只能靠着手机来保持联系,远程调用中的协议就像是情侣间的暗语,彼此约定,只有你们两个人才懂的交流方式,当然彼此也知道如何去编写消息以及解析对方的消息,这也就是 RPC 中的编解码。RPC 中的序列化方式就好比是你女朋友让你往东,你千万不能往西,或者她给你一个眼神,是告诉你她想吃东西,你千万不能误会成不想吃,必须要用相同的序列化方式,这样才不会导致服务调用出错,你的女朋友也就不会生气暴走。

在上一小节也略微提到了 RPC 并非完美,它的出现为分布式带来了便利,同时分布式本身的问题也被暴露出来:

  • 通信的延迟:把一台机器内进程间通信变成跨机器、网络进行进程间通信,比如会因为网络延迟造成通信的延迟;
  • 地址空间被隔离:在一台机器上可以通过共享内存来做到地址空间不被隔离,但是在跨网络是地址空间完全隔离的;
  • 局部故障:如果在一台机器上,机器故障会导致全部出现故障,但是在分布式架构中,不同服务在不同的机器上,机器变多,出现故障的概率就增加,并且局部故障问题在定位问题上会变得复杂;
  • 并发问题:在分布式架构中,必然会出现多个服务同时调用某个服务的并发问题,并发问题会导致各种意想不到的结果。

上面的问题都是分布式带来的问题,当然现在对应不同的问题也有了对应的解决方案。比如并发问题,现在有各种一致性协议算法。针对通信的延迟,也出现了异步通信的解决方案。有问题就要解决,不能逃避,逃避必然不会进步。

RPC 框架

从 RPC 概念被提出后,不断有基于该思想的项目产生,从 1991 年出现的 CORBA,再到后续的 ZeroC ICE、gRPC、Thrift、Dubbo、Motan、Hessian、Spring Cloud、Avro、Finagle 等各类框架的诞生,都表明了 RPC 被运用到越来越频繁和成熟。每个框架本身侧重点有所不同,比如 gRPC 侧重的是远程过程调用的性能,服务治理的能力相对比较薄弱,但是 Dubbo 就提供了很好的服务资源调度和服务治理能力。从服务框架等选型上需要从多个角度去对比,针对业务本身去做选择。

后续小节的内容会一点一点揭开 RPC 框架各部分组件。让读者能够清楚 RPC 框架内部基础构造是怎么样的,并且针对不同的组件,我会列举 2-3 个相关的主流技术来讲述。然后用一章来讲述实现一个简单的 RPC 框架,这是对前面各个组件讲解的实践。最后会拿 Dubbo 为例子,来讲述如何去看懂一个 RPC 框架。

后记

​ 本文希望引用《Implementing Remote Procedure Calls》的概念来讲述 RPC 的部分概念,拿谈异地恋联系 RPC 各部分组件,为下文做一些铺垫。

}
立即订阅 ¥ 68.00

你正在阅读课程试读内容,订阅后解锁课程全部内容

千学不如一看,千看不如一练

手机
阅读

扫一扫 手机阅读

白话RPC框架原理及其实现
立即订阅 ¥ 68.00

举报

0/150
提交
取消