RPC远程调用协议

RPC是一种允许程序调用远程服务器上函数的通信协议,简化分布式系统开发。它隐藏了网络通信细节,但需处理额外开销、安全性和可靠性。常见的RPC框架如gRPC和Dubbo提供了服务治理功能,包括服务发现、负载均衡和熔断机制。HTTP与RPC相比,RPC通常使用更高效的序列化协议和连接池,适用于内部服务调用,而HTTP适合对外服务。
摘要由CSDN通过智能技术生成

定义

RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许一个计算机程序调用另一个计算机上的子程序,而不需要程序员显式编写远程调用的代码。RPC使得分布式计算更加容易,因为它隐藏了底层的网络通信细节(底层是TCP/UDP),使得程序员可以像调用本地函数一样调用远程函数。

执行流程

在RPC中,客户端程序通过发送一个请求消息给服务器端程序来调用远程函数。服务器端程序接收到请求消息后,执行相应的函数,并将结果返回给客户端程序。RPC协议通常使用TCP或UDP作为底层的传输协议,以保证数据的可靠传输。

特点

RPC的优点是可以使得分布式系统的开发更加容易,因为它隐藏了底层的网络通信细节,使得程序员可以像调用本地函数一样调用远程函数。RPC的缺点是需要额外的网络通信开销,因为每次调用远程函数都需要发送请求消息和接收响应消息。此外,RPC也需要考虑安全性和可靠性等问题。

成熟的RPC框架

Ice、gRPC、Tars

RPC实现问题

实现一个基础的RPC需要考虑两点:

  • 函数映射
  • 网络传输

RPC实现流程

1.定义IDL文件(像使用protobuf编写的pb文件)、编译工具根据使用语言生成stub文件(比如使用protoc编译器生成的C++的.cc和.h文件,),相当于静态库的方法实现函数映射;

2.网络传输的数据在RPC中通常还需要编码,解码操作。例如gRPC中用到protobuf来编码成二进制数据。

3.根据RPC协议约定数据头、元数据、消息体等,时请求和返回结果能够一一映射。

4.使用成熟的网络库进行TCP/UDP传输。

HTTP和RPC对比

HTTP是应用层协议;

RPC是远程过程调用方法,所谓的RPC协议实际上是在TCP、UDP,甚至是HTTP2的基础上改造的自定义协议;

编解码层

HTTP1.1

  • 序列化协议:json

RPC

  • 序列化协议:通常是protobuf。

序列化后体积比json小=》传输效率高。

协议层

基于TCP传输,都有消息头和消息体,区别是消息头。

  • HTTP1.1

优点是灵活,但是消息头有一些冗余字段。例如还会带浏览器行为等。

  • RPC

可定制化。

网络传输层

本质都是基于socket通信

  • HTTP1.1

建立一个TCP长连接,通过keep-alive来复用连接;可以引入成熟的网络库,给HTTP加连接池,保证不只有一个TCP连接可用。

  • RPC

建立TCP连接池,也会使用成熟的网络库来提高传输性能。gRPC基于HTTP2.0,拥有多路复用等优势。

优势与不足

优势

  • 相较于HTTP1.1,数据包更小、序列化更快、所以传输效率更高。
  • 基于TCP和HTTP2.0的RPC协议(用到TCP连接池或多路复用等技术),效率更高。
  • 适用于微服务架构。

不足

  • 本身无法解决微服务集群问题,例如:服务发现、服务治理等;
  • 调用方对服务端的RPC接口有强依赖关系,例如远程调用函数如果有修改,stub桩文件需要频繁更新,否则接口可能会调用出错。可以通过自动化工具、版本管理工具来保证代码级别的强依赖关系。

RPC和HTTP的使用场景

微服务架构下,内部服务调用频繁,适用于RPC。

对外服务、单体服务、例如为浏览器提供服务,适合用HTTP,特别是HTTP2.0。

RPC框架

编解码层

  • 代码编译工具将IDL文件转换成不同语言可以依赖得lib代码
  • 序列化&反序列化:对象↔二进制字节流

尽量序列化后的数据体积更小,网络传输带宽消耗越小。

协议层

支持解析多种协议,或者自定协议。

作用:TCP通道中的二进制包,传输时会被拆分、合并,因此需要应用层确定消息边界。

网络传输层

一般可以使用成熟的网络通信框架(例如netty)。

会封装基础的socket来实现,或者使用IO多路复用来实现高并发、可靠传输。

RPC热门框架

gRPC

  • 提供基础的RPC通信能力。
  • 提供跨语言调用,适合不同语言提供服务的场景。
  • 没有服务治理机制。需要开源工具实现服务发现、负载均衡、熔断限流等功能。

服务治理型

rpcx、dubbo

  • 提供基础的RPC通信能力。
  • 提供服务治理能力。服务发现、负载均衡、熔断限流。

服务治理

  • 服务端

服务注册:上报服务名和服务的IP、端口

健康检测:心跳,让调用方知道服务出现问题

限流:过载保护、访问量过大

  • 客户端

服务发现:根据服务名发现服务的IP、端口

路由策略:实现流量隔离,隔离联调环境

负载均衡:分发请求到服务集群的每一个节点

重试机制:故障重连

故障熔断:确认下游异常,直接截断请求,快速执行失败

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aries_Ro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值