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

相关推荐
崽崽..3 小时前
【Linux】网络编程的调试工具以及连接失败的具体排查方法
linux·网络
ESDWAN3 小时前
海外股票网络环境优化与交易场景应用:从行情获取到交易系统稳定性设计
开发语言·网络·php
zxanz13 小时前
SSL 证书申请中,服务器验证跟 DNS 解析验证有什么区别?
服务器·网络协议·ssl
pt10433 小时前
Cisco设备网络安全系列-2:管理访问、控制平面与基础设施ACL防护
网络·安全
TechWayfarer12 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer
天行健,君子而铎13 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
深圳市快瞳科技有限公司17 小时前
宠物门禁端侧AI落地解析:画质检测、活体甄别与离线推理
网络
墨神谕18 小时前
RPC框架与HTTP REST的区别
网络协议·http·rpc
一条泥憨鱼18 小时前
【从0开始学习计算机网络】| ARP 协议:地址解析,ARP 欺骗,链路层寻址
网络·后端·学习·计算机网络
m0_7156744319 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
大数据·网络·人工智能·网络安全