【RPC】RPC基础(一)什么是RPC

文章目录

  • RPC核心原理
    • 为什么要学习RPC
    • 1. RPC基础
      • 1.1 什么是RPC
        • RPC通信流程
        • RPC在架构中的位置

RPC核心原理

​ 第一次想正式了解RPC是在旁听了同学的模拟面以后,百度的面试官推荐说简历中如果缺少项目, 自己搞一个RPC框架比秒杀商城什么的更能算是加分项,后面和同学交流中了解到虽然RPC算是一个不错的项目,但如果只是为了做项目而不去了解其中的原理核心,不管是面试还是对自身能力的提升,它的价值都要大打折扣,所以还是要系统全面的去学习RPC

​ 本文是我学习何小峰老师的 RPC实战与核心原理课程的笔记整理与总结,大致内容与课程相同,并加入了我在学习过程中遇到问题的解决方法与部分知识拓展

为什么要学习RPC

​ 学习要以问题为导向, 解决这个问题首先要了解RPC的应用场景。

​ 提起RPC,他最大的特点便是像本地调用一样进行远程调用,我们最先想到的应用场景便是微服务,但RPC并不只是应用于微服务,只要涉及网络通信,都可能用到RPC,比如大型分布式系统的应用程序与依赖的中间件之间的通讯,因此其核心价值就在于解决分布式系统通信问题

​ 分布式系统中的网络通信一般都会采用四层的 TCP 协议或七层的 OSI 协议,所以如果开发人员要在本身就复杂的分布式系统中还要对涉及网络通信的逻辑进行复杂的编码,既效率低又难以维护,所以就需要RPC这样的框架对网络通信的过程进行封装,来简化开发,同时也能是网络通讯变得安全可靠。

1. RPC基础

1.1 什么是RPC

Remote Procedure Call,即远程过程调用,不只是像调用本地一样调用远程,还要屏蔽网络通信编程细节。所以综上总结RPC有两点作用:

  • 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法;
  • 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。
RPC通信流程

一次RPC调用:

调用方请求对象序列化->TCP协议通讯->服务提供方反序列化请求对象->服务提供方找到实现类,进行真正方法调用,执行结果序列化->TCP协议通讯->调用方反序列化应答对象

  • 序列化:对象转可逆的二进制形式
  • 协议:数据格式的约定,包含数据头消息体等信息,根据协议正确处理二进制数据得到请求

一个简单的RPC框架:

通讯流程基础上,简化API,屏蔽RPC细节,核心:动态代理技术

【RPC】RPC基础(一)什么是RPC_第1张图片

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

RPC在架构中的位置

​ 应用架构由单体到微服务化是大势所趋,系统被拆分成多个功能的应用部署在不同服务器中,它们之间就需要PRC进行通讯。

​ 单体架构中,代码修改的成本过高,团队代码的耦合性高,开发效率极低,QA很难评估测试范围,导致全部功能的回归测试,新功能上线周期长,但拆分系统时不可能将所有代码推到重写,这时候就要用到RPC框架来解决拆分后的通信问题。

​ 所以由此看来,RPC的思想并不止局限于网络通讯,像是消息队列,数据库等客户端与服务器进行数据交互过程中都会使用到RPC,只不过是已经被封装好了,所以RPC可以说是构建复杂系统的基石。

你可能感兴趣的:(【RPC】核心原理,java,rpc,分布式)