当前位置: 首页 > news >正文

RPC是什么

远程过程调用(Remote Procedure Call,RPC)是一种允许程序调用远程服务像调用本地函数一样的技术,其核心目标是简化分布式系统中的跨进程通信。

一、RPC的本质

RPC 屏蔽了网络通信的复杂性,让开发者无需手动处理网络协议、序列化等底层细节。例如,调用远程的 getUserInfo(userId) 方法时,代码表现与本地调用无异,但实际执行发生在另一台服务器上。

二、RPC的核心流程

1.客户端调用

客户端调用本地代理(Stub)方法,例如 userService.getUser(123)
关键点:代理对象由RPC框架自动生成,伪装成真实服务接口。

2.序列化请求

将方法名(如 getUser)、参数(如 123)序列化为二进制数据(如通过Protobuf或JSON)。
为什么需要序列化? 网络只能传输字节流,结构化数据必须转为二进制。

3.网络传输

通过TCP/HTTP等协议发送请求到服务端。
优化点:高性能RPC框架(如gRPC)通常使用TCP长连接减少握手开销。

4.服务端处理

服务端反序列化请求数据,根据方法名找到实现类,执行真实逻辑(如查询数据库)。
服务注册与发现:服务端启动时向注册中心(如Zookeeper)注册自身地址。

5.返回响应

服务端将结果序列化后回传,客户端反序列化并返回给调用方。

三、关键技术组件

1.序列化协议

  • JSON:易读但性能低,适合HTTP API。

  • Protobuf/Thrift:二进制协议,体积小、速度快,RPC主流选择。

  • Avro:Schema动态化,适合大数据场景。

2.网络通信

  • TCP协议:主流选择,需处理粘包/拆包(通过定长消息或分隔符)。

  • HTTP/2:gRPC采用,支持多路复用,降低延迟。

3.服务发现

  • 客户端发现:客户端查询注册中心(如Consul)获取服务IP列表。

  • 服务端发现:通过负载均衡器(如Nginx)路由请求。

4.负载均衡

  • 随机/轮询:简单但无法感知服务器状态。

  • 一致性哈希:相同请求总落到同一节点,适合缓存场景。

  • 加权策略:根据服务器CPU、负载动态分配流量。

四、核心挑战与解决方案

1.网络不可靠性

  • 超时机制:设置调用超时(如3秒),防止线程长期阻塞。

  • 重试策略:幂等操作可重试(如查询),非幂等操作(如支付)需避免重复提交。

  • 熔断降级:Hystrix等工具在服务故障时快速失败,避免雪崩。

2.性能优化

  • 连接池:复用TCP连接,减少握手开销。

  • 异步调用:Future或回调机制提升吞吐量,例如Dubbo的AsyncContext。

3.跨语言支持

  • IDL(接口描述语言):如gRPC使用 .proto 文件定义接口,生成多语言客户端代码。

相关文章:

  • 线程局部存储----TLS
  • 使用AI 将文本转成视频 工具 介绍
  • 《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《5G通信速成:MATLAB毫米波信道建模仿真指南》
  • zotero pdf中英翻译插件使用
  • 10 种最新的思维链(Chain-of-Thought, CoT)增强方法
  • 星途-(4)
  • docker 外部能访问外网,内部不行(代理问题)
  • SpringCloud GateWay网关
  • 双目视觉的核心目标
  • 串 Part 2
  • CSS知识总结
  • Git 标签管理
  • 实战设计模式之中介者模式
  • archlinux安装waydroid
  • 利用jQuery 实现多选标签下拉框,提升表单交互体验
  • Scrapy爬虫实战:如何用Rules实现高效数据采集
  • 拷贝多个Excel单元格区域为图片并粘贴到Word
  • 破晓之啼:子安的语言奇迹与生命沉思
  • 一款基于 .NET 开源的多功能的 B 站视频下载工具
  • 基于 HTML5 Canvas 实现图片旋转与下载功能
  • 央行:增加科技创新和技术改造再贷款额度3000亿元
  • 抗战回望20︱《山西省战区抗敌行政工作检讨会议议决案》:“强民政治”、“说服行政”
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队
  • 溢价率19.48%,民企番禺置业3.07亿元竞得广州番禺融媒体中心北侧地块
  • 市场监管总局发布《城镇房屋租赁合同(示范文本)》
  • 被炒热的“高潮针”:超适应症使用,安全性和有效性存疑