RPC的介绍,和网络通信的区别,效果实现(服务寻址,序列化,网络传输),两种服务发现机制的区别,函数定位

news/2025/11/11 14:48:44/文章来源:https://www.cnblogs.com/gccbuaa/p/19210301

目录

介绍

区别

普通网络通信

RPC

一次rpc过程

从涉及到的角色来看

总结

RPC的机制实现

服务寻址功能

引入

本地调用

远程调用

确定实例

确定函数

解决方法

服务实例定位

静态配置

服务发现机制

客户端发现

服务端发现

函数定位

序列化和反序列化功能

介绍

必要性

网络传输作用

过程

协议

TCP和HTTP对比


介绍

一种凭借就是RPC(Remote Procedure Call) 远程过程调用,网络从远程计算机程序上请求服务的一种调用模型

  • 利用该思想,许可让不同的服务间途径调用就像本地调用一样便捷,且不需要了解底层网络技术
  • 容易来说,就是让A服务器上的a服务可以很方便地和B服务器上的b服务通信

看似高大上,其实它的底层流程和普通的网络通信(一个客户端通过 socket 发送数据、服务端接收并返回结果)差不多

但为什么会有RPC这样一个独立的概念?

  • 否用 socket 传输”,而在于就是核心区别不在于“抽象层次

区别

普通网络通信

开发者需要自己决定消息格式(怎么组织请求和响应)、序列化方式(json/binary)、协议细节(TCP/UDP/HTTP),以及在合适的地方进行网络传输(socket 读写)

RPC

RPC 的目标就是让远程调用看起来像本地函数调用,所以它把网络通信这一堆繁琐的细节隐藏在Stub(存根) 层里

一次rpc过程

历经了一次完整的网络请求)

  • 客户端调用时:写的是 result = add(3,5) -- 背后实际上:由Stub 把函数名+参数序列化后通过 socket 发出去

  • 服务端收到时:Stub 解析消息,找到对应的函数 add,调用本地实现,把结果再打包返回

  • 客户端拿到结果:Stub 反序列化结果,交给调用方(就像函数返回值一样)

从涉及到的角色来看

  • 客户端:服务调用方
  • 客户端存根:存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再利用网络传输发送给服务端
  • 服务端存根:接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
  • 服务端:服务的真正提供者

总结

  • 它的底层实际上就是普通网络通信
  • 但 RPC 之所以叫 “RPC”,是因为它把 底层网络通信 封装成了 函数调用,实现了“透明调用”的语义

RPC的功能实现

主要分为服务寻址、序列化和反序列化、网络传输特性三部分

服务寻址功能

引入

本地调用

只有一个上下文,符号表和函数体都在同一个地址空间,只要知道函数指针,就能跳转到函数体执行

远程调用

涉及到跨进程/跨主机,需要知道在哪台机器?哪个进程? 哪个函数?

确定实例

分布式系统里,同一个服务通常会有多个实例:

  • 可能在不同机器上(IP 不同)

  • 可能在同一机器的不同进程里(端口不同)

确定函数

在远程调用中,不同服务的地址空间不同,函数指针在另一台机器上没意义

  • 即使两个进程在同一机器上,它们的虚拟地址空间也是隔离的,函数地址依然无用
  • 因此,远程调用不能直接传递函数指针

解决方法

服务实例定位
静态配置

如果实例固定,许可在表中写死ip+端口,直接映射

服务发现机制

实例会变动(弹性扩/缩容、故障下线),就需要就是要引入中介 -- 注册中心

  • 保存当前可用的服务实例列表

服务发现分为两种模式,客户端发现(Client-side discovery)和 服务端发现(Server-side discovery / Load-balancer / API Gateway)

  • 在 "由谁来做就是两者本质的区别,负载均衡(选择实例)"上
客户端发现

客户端向注册中心查询某服务的所有实例,由客户端本地使用某种负载均衡算法选择一个实例,直接发请求

优点

  • 可以直接请求到目标实例,延迟小
  • 负载均衡负担分散到各个客户端
  • 客户端灵活

缺点

  • 每个客户端(不同语言/框架)都要实现 discovery(服务发现) + LB(负载均衡)
  • 倘若客户端数量极大,注册中心会承受大量查询压力
  • 客户端通常会缓存实例列表,以降低注册中心负载,若缓存 TTL 或更新机制不好,会出现短暂 stale(调用已经下线的实例或错过新实例)
服务端发现

客户端请求统一入口入口组件从注册中心获取实例列表,选择一个并转发请求

优点

  • 入口(LB/Proxy)可以做集中优化,在高并发场景下能更好地控制连接
  • 可以在入口层做集中限流、熔断、路由规则,易于横向扩展入口层

缺点

  • 多一跳,入口层可能成为额外的延迟来源(转发/队列/排队)

函数定位

    为了解决函数地址失效的挑战,RPC 引入办法 ID(Call ID)--所有函数都有自己的一个ID,在所有进程中都唯一

    • 客户端在做远程过程调用时会查表,找出调用方法对应的Call ID,然后传给服务端
    • 服务端也会查表,找到对应的函数指针,之后执行相应函数的代码

    序列化和反序列化功能

    介绍

    序列化:将消息对象转换为二进制流

    反序列化:将二进制流转换为消息对象

    必要性

    本地调用中,只需要将数据压入栈中,然后让函数去栈中读取即可

    远程调用涉及到信息的传输

    • 由于客户端和服务端不在同一个服务器上,涉及不同的进程,不能通过内存传递参数
    • 此时就需要让客户端先将请求参数转成字节流(编码),传递给服务端,服务端再将字节流转为自己可读取格式(解码),这就是序列化和反序列化的过程
    • 反之,服务端返回值也逆向经历序列化和反序列化到客户端

    (其实也就是网络传输的必要手段)

    网络传输功能

    过程

    客户端将Call ID和序列化后的参数字节流传输给服务端,服务端执行调用逻辑后,将序列化后的调用结果回传给客户端

    协议

    主要有TCP、UDP、HTTP协议

    (这块就不细说了,就是计网那些东西)

    TCP和HTTP对比

    基于TCP协议实现的RPC调用

    • 直接在传输层上自定义协议
    • 可以更灵活地对协议字段进行定制,更小的协议开销,可实现更高的性能和吞吐量
    • 构建复杂,需要处理粘包、拆包、心跳、超时等障碍,维护成本高

    基于HTTP协议达成的RPC调用

    • 在应用层利用 HTTP 作为传输载体
    • 搭建简单,跨语言兼容性强
    • 协议封装层次多,头部开销大,传输效率略低于纯 TCP

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962419.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    Ci24R02:高集成低功耗RISC-V SoC,轻松打造物联网核心

    Ci24R02是一款高度集成的低功耗SOC芯片,具有低功耗、Low Pin Count、宽电压工作范围,集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、无线收发器等丰富的外设。内核采用RISC-V RV32IMA…

    老司机注意事项

    1. 不要一直盯着后视镜 2. 不要一直盯着仪表盘 3. 不要反反复复调整定速巡航 4. 变道要果决, 观察后视镜后, 可以先打灯过去一点试探一下, 切记不要减速变道 , 一般正常人类都会让一下 5. 找到一个自己很舒服的姿势开车…

    步进电机加减速

    步进电机加减速T型、S型加减速算法原理及实现_t型算法-CSDN博客

    2025年11月凉亭厂家排行:欣荣长廊定制源头工厂评价报告

    打算在庭院、景区或市政绿地添一座防腐木凉亭的人,往往先被海量广告包围:同样标注“三十年不腐”,价格却从几千到数万;同样承诺“上门测量”,有的到场拖期半月,有的第二天就出图。用户真正关心的是:木材等级能否…

    2025年口碑好的月饼铁盒厂家最新实力排行

    2025年口碑好的月饼铁盒厂家最新实力排行行业背景与市场趋势随着中国烘焙食品行业的持续增长,月饼作为传统节庆食品的市场规模不断扩大。据中国食品工业协会数据显示,2024年中国月饼市场规模已达到243.5亿元,同比增…

    类内属性私有

    类内属性私有属性私有,可在类内自定义public函数得到或者修改私有属性(alt+insert快速生成函数) class stu {private String name;public String getName() {return name;}public void setName(String name) {this.…

    北平的冬天

    北平的冬天,是要从第一阵西北风真正说起。 先前不过是个序。立冬过后,天是渐渐灰淡下去,像一张陈年的宣纸,失了水分,透着些微的枯索。太阳也懒懒的,有气无力地照着,那光也是凉的,落在人身上,不带多少暖意。树…

    2025年靠谱的主被动隔振解决方案最新TOP厂家排名

    2025年靠谱的主被动隔振解决方案最新TOP厂家排名行业背景与市场趋势随着高端制造业的快速发展,精密仪器、半导体设备、航空航天装备等领域对振动控制的需求日益增长。根据国际振动控制协会(IVCA)2024年发布的报告,全…

    基于 Docker 的 AWD 平台搭建与使用完整教程(含环境修复与比赛操作)

    本文详解 CTF AWD 模式平台的搭建与使用,先明确赛事规则(攻防双任务、每 2 分钟计分、违规处罚),再讲搭建步骤:克隆仓库、装 Docker 并换源、下载靶机镜像、初始化队伍环境;关键修复 Check 脚本(确保服务检测)…

    业务管理

    *在线文档,有一个文件夹,梳理各个阶段的的工作

    2025年阳光房优质厂家权威推荐榜单:平开门/推拉门/曼亭鸟门窗源头厂家精选

    在当今家居空间升级的浪潮中,阳光房已从简单的采光空间,升级为集休闲、娱乐与自然连接于一体的“第三生活空间”。为帮助您精准选择可靠的合作伙伴,我们综合考量了市场销量、技术实力、产品品质与服务网络等核心指标…

    2-3-4-2-Redis深入理解

    1、Redis中常见的有哪些线程?相互之间怎么配合? Redis的线程模型经历了从纯单线程到“单线程核心+多线程辅助”的演进(Redis 6.0引入IO多线程,Redis 7.0强化后台线程),其设计目标是在保持命令执行原子性的同时,…

    2025年废塑料清洗槽源头厂家权威推荐榜单:二手塑料清洗槽/高端塑料清洗槽/废旧塑料u型清洗槽源头厂家精选

    在塑料回收产业快速发展的背景下,废塑料清洗槽作为关键设备,其性能直接影响回收塑料的洁净度与生产效率。市场数据显示,2025年全球塑料清洗回收机市场规模预计将达到43.33亿美元,年均复合增长率保持在4.1% 。为帮助…

    2-3-4-3-Redis底层数据结构

    1、Redis数据结构总览 Redis的数据结构是其核心竞争力之一——它并非简单的“键值对存储”,而是为不同业务场景设计了多样化的值类型,且每个类型都有高效的底层实现(用C语言优化)。理解这些数据结构的设计逻辑与底…

    Docker部署Tomcat9.0

    1、查看华为云镜像中心Tomcat版本 华为云容器镜像中心官网地址:https://console.huaweicloud.com/swr/?region=cn-north-4#/swr/mirror 2、拉取tomcat镜像docker pull tomcat:9.0.263、查看镜像是否下载成功docker i…

    2025年11月学习机品牌对比榜:十强机型资质认证与用户反馈一览

    开学季刚过,后台留言里“到底该给孩子买哪台学习机”的提问量陡增。家长画像很集中:工作节奏快、辅导时间碎片化、对“新课标”变化心里没底,同时预算有限却希望一次到位。教育部2024年10月发布的《2025新课标实施要…

    wireshark的用法

    以上仅供参考,如有疑问,留言联系

    2-3-3-1-Dubbo

    1、理解“Dubbo是RPC调用层面的服务治理工具” 要理解“Dubbo是RPC调用层面的服务治理工具”,需要从分布式系统的核心痛点、RPC的本质以及Dubbo的定位边界三个维度拆解;而“Dubbo解决什么问题”“没有它会怎样”则是…

    2025年11月学习机品牌榜单:从早教到高中全场景覆盖排行解析

    期中考试刚过,家长群里又开始新一轮“选机焦虑”:孩子成绩波动大,校内进度快,课外时间被切割成碎片,传统辅导班往返耗时,线上网课又缺互动。教育部“双减”后,学科类培训被严格限时段,家长把希望转向能同步校内…