RPC初识

一、为什么要学习RPC

要回答这个问题,那就必须先了解下 RPC 的使用场景。
只要涉及到网络通信,我们就可能用到RPC
大型分布式系统中:消息队列、分布式缓存、分布式数据库、统一配置中心等,应用程序与这些依赖的中间件都可以通过 RPC进行通信

RPC 的整个通信过程: 对端节点的查找、网络连接的建立、传输数据的编码解码以及网络连接的管理等等,每一项都很复杂。

二、什么是RPC

RPC 是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地(同一个项目中的方法)一样的体验,我们不需要因为这个方法是远程调用就需要编写很多与业务无关的代码。

  • 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法;
  • 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。
  • 很方便的从“单体”演进成“微服务化”
  • 解决实际开发中的效率低下、系统耦合等问题

三、RPC 通信流程

RPC 是一个远程调用,需要通过网络来进行传输数据,并且RPC常用语业务系统之间的数据交互,需要保证其可靠性,所以RPC一般采用TCP来传输,我们常用的HTTP协议也是建立在TCP之上的。

网络传输的数据必须是二进制的,而调用方的出入参都是对象的形式,需要把它转化成二进制,且要求转换算法是可逆的,这个过程我们一般叫做“序列化”。

调用方持续地把请求参数序列化成二进制后,经过 TCP 传输给了服务提供方。 服务提供方再根据反序列化出来的请求对象找到对应的实现类,完成真正的方法调用,然后把执行结果序列化后,回写到对应的 TCP 通道里面。调用方获取到应答的数据包后,再反序列化成应答对象,这样调用方就完成了一次 RPC 调用。

由服务提供者给出业务接口声明,在调用方的程序里面,RPC 框架根据调用的服务接口提前生成动态代理实现类,并通过依赖注入等技术注入到声明了该接口的相关业务逻辑里面。该代理实现类会拦截所有的方法调用,在提供的方法处理逻辑里面完成一整套的远程调用,并把远程调用结果返回给调用方,这样调用方在调用远程方法的时候就获得了像调用本地接口一样的体验。
RPC初识_第1张图片

四、其他的一些应用场景

RPC初识_第2张图片
在这个应用中MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。

你可能感兴趣的:(RPC,rpc,网络,java)