RPC协议交互流程

news2024/11/13 14:54:36

文章目录

      • RPC特性
      • RPC实现
      • RPC交互流程
        • RPC交互时序图
        • RPC交互流程

RPC(Remote Procedure Call,远程过程调用) 是一种分布式计算的通信协议和编程模型,用于不同计算机或进程之间进行远程通信。它允许一个计算机程序(通常是客户端)调用另一个计算机上的过程(通常是服务器端)并获取结果,就像调用本地过程一样,而无需了解底层网络通信的细节。

RPC特性

  1. 透明性: RPC 提供了透明性,使远程调用看起来就像是本地函数调用,屏蔽了底层的网络通信细节

  2. 跨语言支持: RPC 允许不同编程语言编写的程序进行通信。这意味着一个程序可以使用一种编程语言编写,而另一个程序可以使用完全不同的编程语言编写,它们仍然可以通过 RPC 进行通信

  3. 序列化和反序列化: 在 RPC 中,参数和结果通常需要序列化(将数据转换为字节流)以进行传输,然后在接收端反序列化(将字节流还原为数据对象)

    这是因为远程调用通常涉及跨越网络传输数据(跨网络传输会涉及到大端小端转换)

  4. Stub/Proxy 生成: 为了使 RPC 远程调用透明化,通常需要为每个远程服务生成客户端存根(Client Stub)和服务器端存根(Server Stub)。存根用于隐藏底层通信细节,使客户端和服务器可以像调用本地函数一样调用远程过程

  5. 网络通信: RPC 依赖于底层的网络通信协议,如 TCP/IP 或 HTTP,以实现客户端和服务器之间的通信

  6. 错误处理: RPC 提供了一种机制来处理远程调用中可能发生的错误,例如网络故障或服务器不可用。通常,RPC 库会提供异常处理或错误代码来处理这些情况

  7. 性能: RPC 库通常会尽量提供高性能的实现,以确保在远程调用中不会引入显著的延迟

  8. 安全性: RPC 可以提供身份验证和授权机制,以确保只有授权的客户端可以访问远程服务

RPC实现

如上述概念所说,RPC协议的目的,是远程调用像本地调用一样简单

要想实现上述目标,需要思考以下问题如何解决:

  1. 客户端如何连接远程服务端?连接的远端的设备的IP和端口号如何确定?
  2. 如何表示和传输数据?
  3. 如何确定客户端发送的请求?
  4. 如何调用指定的目标方法?

上述问题的解决方案,如下所示:

  1. 服务注册中心

    它的主要作用是帮助服务提供者注册其服务,以及帮助服务消费者发现和调用这些服务

    • 服务注册: 服务提供者将其可用的服务注册到服务注册中心。注册通常包括服务的名称、网络地址、端口号、协议等信息。服务注册中心会将这些信息记录在其注册表中。
    • 服务发现: 服务消费者通过服务注册中心查询可用的服务列表,以便发现并获取服务提供者的信息。这使得服务消费者无需手动配置服务提供者的地址和端口。
    • 负载均衡: 一些服务注册中心提供负载均衡功能,以确保服务请求均匀分布到不同的服务提供者上。这有助于提高系统的性能和可用性。
    • 服务健康检查: 服务注册中心通常会定期检查注册的服务是否可用。如果服务不可用,注册中心可以将其从服务列表中移除,以避免服务消费者请求到不可用的服务。
    • 动态配置: 服务注册中心允许系统管理员或运维人员在运行时添加、更新或删除服务的注册信息,而无需重启系统或服务。
    • 服务版本管理: 有些服务注册中心支持服务版本管理,以允许多个版本的服务并存。这对于逐步升级服务或同时支持多个客户端版本非常有用。
    • 安全性: 服务注册中心通常提供安全性措施,以确保只有授权的服务提供者可以注册服务,并且只有授权的服务消费者可以发现和调用服务。
    • 支持多种协议: 一些服务注册中心支持多种通信协议,包括HTTP、gRPC、ZooKeeper、etcd等,以适应不同的应用场景和技术栈

    常见的 RPC 服务注册中心包括:

    • ZooKeeper: 一个开源的分布式协调服务,可以用作服务注册中心
    • etcd: 一个开源的键值存储系统,也可以用于服务注册和服务发现
    • Consul: 一个开源的服务发现和配置管理工具,具有服务注册中心的功能
    • Eureka: Netflix开源的服务注册中心,用于基于Spring Cloud的微服务架构
    • Nacos: 阿里巴巴开源的服务注册中心和配置管理平台
  2. 序列化和反序列化

    通常涉及跨越网络传输数据,因此需要将数据序列化(将数据转换为字节流)以进行传输,并在接收端反序列化(将字节流还原为数据对象)

  3. 数据传输

    客户端将序列化后的请求参数发送到远程服务器。这通常涉及底层的网络通信协议,如TCP/IP或HTTP

  4. 方法映射

    在RPC中,服务器端需要确定客户端请求调用的目标方法,并执行它。这通常包括以下步骤:

    • 方法映射表: 服务器端维护一个方法映射表,该表将客户端请求中的方法名映射到实际的方法
    • 解析请求: 服务器端解析客户端请求,包括请求中的方法名和参数
    • 查找目标方法: 服务器端使用方法映射表查找与客户端请求匹配的目标方法
    • 调用目标方法: 服务器端调用找到的目标方法,并将请求参数传递给它
    • 执行方法: 目标方法执行所需的操作,并生成结
    • 返回结果: 服务器端将方法执行的结果作为响应发送回客户端

    方法映射通常通过一些服务框架或RPC库提供。例如,gRPC和Apache Thrift提供了工具来生成客户端存根和服务器端存根,其中包含方法映射和序列化/反序列化的逻辑。这使得在RPC中调用方法变得更加容易和透明。

RPC交互流程

RPC交互时序图

在这里插入图片描述

RPC交互流程

  1. 服务端启动后,会主动向服务注册中心注册设备IP、端口号以及提供的服务列表;如果服务列表更新,服务中心会通知客户端,避免客户端调用服务异常

    客户端启动后,会向服务注册中心获取服务端地址列表

  2. 客户端和服务端建立网络连接

  3. 客户端调用服务

  4. 客户端代理(stub翻译为存根,但是代理更直观)将目标服务、目标方法、调用方法的参数等信息序列化,最后将数据传输到服务端代理

  5. 服务端代理将数据进行反序列化,解析目标服务、目标方法及调用参数,调用相关请求

  6. 服务端处理请求并返回请求结果

  7. 服务端代理将服务返回结果序列化,将返回结果发送到服务端

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

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

相关文章

TOWE新能源电动汽车充电延长线,解决户外充电距离过短烦恼

随着新能源汽车市场的日益繁荣,越来越多的车主开始关注充电设备的便利性。为了满足广大车主的充电需求,同为科技(TOWE)荣誉推出全新16A三芯大功率新能源电动汽车充电延长电源线。这款产品采用优质材料,结构合理&#x…

@Value,@Autowired,@Qualifier

Value 当属性的类型是简单类型时,可以使用Value注解进行注入。 package com.powernode.spring6.bean4;import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;Component public class User {Value(value …

NASM编译器之下载安装使用

NASM的下载和安装 每种处理器都可能会有自己的汇编语言编译器,而对于同一款处理器来说,针对不同的平台(比如Windows和Linux),也会有不同版本的汇编语言编译器。 现存的汇编语言编译器有多种,用得比较多的有 MASM、FA…

如何加快跨国传输大文件的速度?

在当今的信息化社会,数据已经成为各行各业的重要资产,而数据的传输和交换则是数据价值的体现。在很多场景中,我们需要跨国传输大文件,比如政府、军队、金融、医疗等涉密行业,或者跨国、跨区域的企业合作。然而&#xf…

浅谈安科瑞ADL400系列导轨电能表在沙特电力物联网平台中的应用

1.项目概述:Project Overview 沙特客户需要对小区住宅,及商铺进行用户端电能计量,管理。需要安装三相交流电表监测电能数据,并上传到后台系统进行统一监控管理。安科瑞推荐电力物联网平台,可以通过云端界面和APP查看不…

Python中文字体包下载经历(经验分享)

故事背景 python解释器需要中文字体包,我找了半天网络上的中文字体包,每一个过程都非常繁琐。 都是先注册,在安装他们的软件,软件安装好后下载,下载的还不是字体包格式的文件,反正就是在欺负小白。 解决…

浅谈能源汽车下乡充电桩建设优化建议及解决方案

1.趋势分析 新能源汽车下乡已经成为提振汽车市场表现、推动汽车行业发展的重要措施。国家发改委日前也提出,汽车消费是支撑消费的“大头”,将加快推进充电桩和城市停车设施建设,大力推动新能源汽车下乡,鼓励汽车企业开发更适宜县…

若依集成mybatisplus、兼容旧分页【亲测有效】

这里写目录标题 一 修改pom文件最外层的pom.xml增加如下配置common模块的pom文件加入如下配置 二 framework模块的config包增加两个类MybatisPlusPageConfigurerSqlFilterArgumentResolver 三 全局搜索com.ruoyi.framework.config.MyBatisConfig类,将此类注释掉四 y…

excel表中复制粘贴有隐藏行的情况

一、原始数据,没有任何隐藏的情况: 二、隐藏3、4行: 这种情况下: 三、我想复制粘贴出可见的内容,全选,ctrlc复制 四、ctrlv粘贴到别处,结果却是 发现隐藏的行也被复制粘贴出来了。并不是我们想…

求求你,别再用 Mybatis Plus 的伪批量新增了!

前言 大家好,我是小哈~ 本文节选自小哈写的《Mybatis Plus 教程》中的批量新增一节,旨在帮助大家如何在 Mybatis Plus 中,实现 MySQL 真实的批量新增,而不是伪批量新增。 最近,小哈在带小伙伴做 前后端分离项目&#x…

2023年MySQL-8.0.34保姆级安装教程

重点放前面:演示环境为windows环境。 MySQL社区版本安装教程如下: 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤:①安装包的下载;②安装配置设置;③配置环境变量 一、MySQL安装包下载 下载官…

界面长的像算抄袭吗?

昨晚,在GitHub和X上,被一次疑似抄袭的问题刷了一会儿屏,主要是下面这个issue: 相关的开源项目是小米的米效,英文名:Mone。一个以微服务为中心的一站式企业协同研发平台。支持公有云、私有云、混合云等多种部…

Redis Cluster集群运维与核心原理剖析

Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性…

2023/09/07 c++qt day2

#include <iostream>using namespace std; //封装一个学生类 struct stu { private://存放学生的成绩int stu_score[256];//记录学生个数int stu_num; public://用于设置学生个数void setNum(){cout<<"请输入学生的个数"<<" ";cin>&g…

神策数据发布汽车行业 CJO 解决方案,打造客户旅程全新体验

最近&#xff0c;围绕数字化客户经营&#xff0c;神策数据基于“客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;”理念&#xff0c;发布汽车行业全新解决方案&#xff0c;通过全渠道打通给客户带来一致的、个性化的体验&#xff0c;…

如何做好自己的职业规划

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 进入公司以后&#xff0c;就是进入了人生的下一个阶段&#xff0c;通过前面几个章节&#xff0c;我们谈到了入职新公司后应该如何开展工作。这节我们来聊一聊如何做好职业规…

2594. 修车的最少时间

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;二分枚举答案 写在最后 Tag 【二分枚举答案】【数组】 题目来源 2594. 修车的最少时间 题目解读 给你一个表示机械工能力的数组 ranks&#xff0c;ranks[i] 表示第 i 位机械工可以在 r a n k s [ i ] ∗ n 2 ranks[…

【三维】NeRF神经辐射场构建三维模型

论文地址&#xff1a;paper 代码地址&#xff1a;code 视频地址&#xff1a;油管 目录 0.&#x1f308;&#x1f308;摘要 1.&#x1f308;&#x1f308;nerf主要原理 2.&#x1f308;&#x1f308;网络结构 2.1&#x1f4cc;渲染 2.2&#x1f4cc;消融实验 3.&#x…

链表反转问题

链表反转常用的两种方式 1.建立虚拟头结点辅助反转 Java 实现 public static ListNode reverseListByDummyNotCreate(ListNode head) {ListNode ans new ListNode(-1);ListNode cur head;while (cur ! null) {ListNode next cur.next;cur.next ans.next;ans.next cur;cur…

抖音集团都在用的画质评估工具,确定不试试吗?

导读 本文从抖音集团内部画质评估体系的建设历程着笔&#xff0c;主要分享了画质评测对于业务的重要性、主要应用场景和内部产品的一些典型实践案例。通过分享业务视角遇到的一些问题和我们的解决思路&#xff0c;希望能抛砖引玉&#xff0c;为遇到类似困扰的伙伴们提供有价值的…