RPC通信流程简述

以下为学习极客空间《RPC 实战与核心原理》学习笔记整理,原课程 课程链接 十分值得推荐,欢迎了解~

一、什么是 RPC

    RPC[Remote Procedure Call,远程过程调用]:屏蔽网络编程细节,像本地调用一样发起远程调用 / 使进程间通信像进程内一样简单。

二、RPC 使用场景

  • RPC 在分布式系统中充当较为关键的角色,对整个分布式系统性能的提升起到非常重要的作用。
  • 只要涉及到网络通信,就可能用到 RPC。比如大型分部系统可能依赖消息队列、分布式缓存、分布式数据库及统一配置中心等JMQ、Jimdb、ducc:你直接报我们名字得了😆,应用程序与依赖的这些中间件之间都可以通过 RPC 进行通信,就比如 Redis-Server 与 Redis-cli 之间的通信也是使用的 RPC 调用~。Q:这几个中间件和应用之间是通过RPC通信的吗?
    • 网络层包括:对端点的查找、网络连接的建立、传输数据的编解码、网络连接的管理等等。

三、RPC 通信流程

  • RPC 是远程调用,那肯定就要通过网络来传输数据,并且 RPC 常用于业务系统之间的数据交互,需要保证其可靠性,所以一般默认采用 TCP 来传输我们常用的 HTTP 协议也是建立在 TCP 之上的~)。
    • 网络传输的数据必须是二进制的(这是因为计算机是由逻辑电路组成的,逻辑电路一般俩状态:开/关,用1/0表示很方便;而且二进制运算简单,加、减、乘、除、boolean均可运算),但调用方(发起调用请求的叫调用方;被调用的一方叫服务提供方)请求的出入参数都是对象,那就需要把对象转成可传输的二进制,并且要求转换算法是可逆的,这个过程就叫序列化
    • 二进制到对象之间的转换,我们把约定的内容叫做 “协议”,大部分协议会分成两部分:数据头和消息体;数据头用于身份识别,包括协议标识、数据大小、请求类型、序列化类型等信息,消息体主要是请求的业务参数信息和扩展信息等。     根据协议格式,服务提供方可以正确地从二进制数据中分割出不同请求,同时根据请求类型和序列号类型,把二进制的消息体逆向还原成请求对象,这个过程叫“反序列化” 。
          
  • 再回到 RPC 的定义——像本地调用一样发起远程调用,这是怎么做到的呢?如果熟悉 Spring AOP,核心是采用动态代理的技术,通过字节码增强,对方法进行拦截增强的,以便增加需要的额外处理逻辑,RPC 也可以这么实现:
    • ✨由服务提供者给出业务接口声明,在调用方的程序里,RPC 根据调用的服务接口,提前生成动态代理类,并通过依赖注入等技术注入到声明了该接口相关业务逻辑里面,该代理实现类会拦截所有的方法调用,在提供的方法处理逻辑里完成一整套的远程调用,并把远程调用结果返回给调用方,这样调用方在调用远程方法的时候,就获得了像调用本地接口一样的体验。Q:对于调用方来说像调本地一样了,那对于服务方呢,JSF应该是真的被调用了吧,要不咋打的日志呢?A:可能就是真调用了,而且还把调用结果返回给调用方了?

三、学习指南

  • 使用 RPC 就可以像调用本地一样发起远程调用,用它可以解决通信问题,那么肯定是要学习序列化、编解码以及网络传输的内容,而这些只是 RPC 的基础,它还有更吸引人的点:它真正强大的是它的治理功能,比如连接管理、健康监测、负载均衡、优雅启停机、异常重试、业务分组以及熔断限流等,这些都是重点和难点。

四、问答摘录

Q:可以说说 RPC 和 Restful 的区别吗?
A:两个处理流程形似, RPC 一般更喜欢 TCP,用二进制协议,性能更好,常用的 RPC 框架功能比 Restful 客户端更多。
而且外部经常使用 Restful,主要是 http 协议标准,浏览器支持简单

Q:Netty 和 RPC 框架间是什么关系呢?
A:Netty 可以作为 RPC 的网络传输层。

Q:什么场景下最适合使用 RPC?
A:网络安全稳定的环境🤣。【划重点:RPC比较依赖网络】

Q:“在调用方的程序里面,RPC 框架根据调用的服务接口提前生成动态代理实现类,并通过依赖注入等技术注入到声明了该接口的相关业务逻辑里面。” 为什么 Restful风格 的 http 调用就不需要这种动态代理的方式提前在客户端生成桩代码呢?

五、总结

     画个简单的图:
在这里插入图片描述
    这里的编解码应该指的是把二进制的数据 (payload) 进一步封装为 RPC 的协议(消息头+消息体)。
     RPC的作用体现在两个方面:
(1)屏蔽远程调用和本地调用的区别
(2)隐藏底层网络通信的复杂性,让我们更关注业务逻辑

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值