rpc的原理

RPC(Remote Procedure Call,远程过程调用)是一种编程模型,它允许开发者像调用本地函数一样调用位于不同进程或者不同机器上的函数或服务。这种抽象简化了分布式系统的开发,使得开发人员无需关注底层网络通信细节,只需关注接口定义和服务逻辑。在 RPC 中,客户端通过指定接口名和参数发起请求,服务端接收到请求后执行相应功能并返回结果。

接口定义

  • 使用接口定义语言(IDL,Interface Definition Language)定义客户端和服务器之间的通信接口。IDL文件描述了可调用的远程方法及其参数和返回值类型。
  • 根据IDL文件,生成客户端和服务器的代码框架(stub和skeleton)。

客户端存根(Client Stub)

  • 客户端存根是一个本地代理,负责将客户端对远程方法的调用转换为网络消息。
  • 它封装了参数,打包成请求消息,并将消息发送到服务器。
  • 接收从服务器返回的响应消息,并解包响应数据,将结果返回给客户端。

服务器存根(Server Stub)

  • 服务器存根是服务器端的一个代理,负责接收客户端的请求消息。
  • 它解包请求消息,调用实际的服务实现,并将结果封装成响应消息。
  • 将响应消息发送回客户端。

通信模块

  • 客户端和服务器之间的通信通过底层的通信模块进行,如TCP/IP、HTTP、gRPC等。
  • 通信模块负责消息的传输、路由、重试、超时处理等工作。

序列化和反序列化

  • 为了在网络上传输数据,参数和返回值需要进行序列化(将数据结构转换为字节流)和反序列化(将字节流转换回数据结构)。
  • 常用的序列化协议包括JSON、XML、Protobuf等。

调用过程

  • 当客户端调用远程方法时,客户端存根将方法名、参数等信息打包成请求消息并发送到服务器。
  • 服务器接收到请求消息后,服务器存根解包消息,调用实际的服务实现,得到结果后打包成响应消息发送回客户端。
  • 客户端接收到响应消息后,客户端存根解包消息,将结果返回给客户端应用程序。

gRPC 是 Google 开发的一种高性能、开源和通用的 RPC 框架,基于 HTTP/2 协议设计,采用 Protocol Buffers(protobuf)作为接口描述语言(IDL)来定义服务接口和消息结构。gRPC 提供了一种高效、可靠且跨语言的方法来定义服务和实现 RPC。

gRPC 的特点和优势包括:

  • 支持多种开发语言,实现了不同语言之间的互操作性。
  • 使用 Protocol Buffers 进行序列化和反序列化,具有良好的性能和高效的带宽利用率。
  • 基于 HTTP/2 实现,支持多路复用、流式传输和双向流。
  • 客户端和服务端都可以发起流式 RPC,适用于大数据或实时流处理场景。
  • 内置认证和鉴权机制,可以通过 TLS 或其他认证插件保证通信安全。

通过 gRPC,开发者可以方便地创建、部署和调用微服务,大大降低了构建分布式系统时的工作复杂度。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

相关推荐
00后程序员张1 小时前
免Mac上架实战:全平台iOS App上架流程的工具协作经验
websocket·网络协议·tcp/ip·http·网络安全·https·udp
喜欢板砖的牛马1 小时前
简述IPv4分配过程,看这一篇就够了
网络协议
old-six-programmer1 小时前
NAT 类型及 P2P 穿透
服务器·网络协议·webrtc·p2p·nat
GLAB-Mary2 小时前
OSPF虚拟链路术语一览:快速掌握网络路由
网络·智能路由器
tan77º2 小时前
【Linux网络编程】网络基础
linux·服务器·网络
DemonAvenger2 小时前
深入理解Go的网络I/O模型:优势、实践与踩坑经验
网络协议·架构·go
笑衬人心。3 小时前
HTTPS详解:原理 + 加解密过程 + 面试问答
java·网络协议·http·面试·https
bing_1583 小时前
MQTT 和 HTTP 有什么本质区别?
网络·网络协议·http
杨浦老苏5 小时前
Docker端口映射查看工具Dockpeek
网络·docker·群晖
G探险者5 小时前
《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
java·开发语言·rpc