RPC原理

article/2025/9/26 18:58:55

RPC就是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

「系统架构」原来这就是RPC呀,也没那么难嘛

 

原理

一个完整的RPC主要包括三部分:

  • 服务注册中心(Registry),负责将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
  • 服务提供者(RPC Server),负责提供服务接口定义与服务实现类。
  • 服务消费者(RPC Client),负责通过远程代理对象调用远程服务。

服务提供者(Server)启动后主动向服务注册中心(Registry)注册机器IP、端口以及提供的服务列表;

服务消费者(Client)启动时向服务注册中心(Registry)获取服务提供方地址列表。

服务注册中心(Registry)可实现负载均衡和故障切换。

RPC调用过程如下图所示:

「系统架构」原来这就是RPC呀,也没那么难嘛

 

(1) 客户端(Client)以本地调用方式调用服务;

(2) 客户端存根(Client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制);

(3) 客户端通过 Network Service 将消息发送到服务端;

(4) 服务端存根(Server stub)收到消息后进行解码(将消息对象反序列化);

(5) 服务端存根(Server stub)根据解码结果调用本地的服务;

(6) 本地服务执行并将结果返回给服务端存根(Server stub);

(7) 服务端存根(Server stub)将返回结果打包成消息(将结果消息对象序列化);

(8) 服务端(Server)通过 Network Service 将消息发送到客户端;

(9) 客户端存根(Client stub)接收到结果消息,并进行解码(将结果消息发序列化);

(10) 客户端(Client)得到最终结果。

RPC 就是要把 2、3、4、7、8、9 这些步骤都封装起来。

什么情况下使用 RPC ?

RPC一般用于分布式系统中,且通常是内部调用使用。例如,开发电商系统,需要拆分出用户服务、商品服务、优惠券服务、支付服务、订单服务、物流服务、售后服务等等,这些服务之间都相互调用,这时内部调用最好使用 RPC ,同时每个服务都可以独立部署,独立上线。 也就说,当我们的项目太大,需要解耦服务,扩展性强、部署灵活,这时就要用到 RPC ,主要解决了分布式系统中,服务与服务之间的调用问题。

目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。选择什么样的RPC框架,大家可以根据自己项目的需要来定。

已经有HTTP请求,为什么还要RPC?

这主要是历史原因!RPC在1984年就被人用来做分布式系统的通信,Java在1.1版本提供了Java版本的RPC框架(RMI),而HTTP协议直到1990年才开始作为主流协议出现,而且HTTP发明的场景是用于web架构,而不是分布式系统间通信,这导致了在很长一段时间内,HTTP都是浏览器程序和后端web系统通信用的东西,没有人会把HTTP作为分布式系统通信的协议。在很长一段时间内,RPC才是正统。

随着前端技术的发展,AJAX技术和JSON文档在前端界逐渐成为主流,HTTP调用才摆脱HTML,开始使用JSON这一相对简洁的文档格式,为后面用于系统间调用定下基础。最后,随着RESTFUL思潮的兴起,越来越多系统考虑用HTTP来提供服务,但这时候,RPC已经是各种大型分布式调用的标配了。所以这个问题我们也可以反过来问,既然有RPC了,为什么还要有HTTP请求?

既然有RPC了,为什么还要有HTTP请求?这个问题不难回答,因为现在大部分的系统都是给浏览器使用的,因此,HTTP协议必不可少,而这大部分系统中的绝大部分,对于后端系统间调用的性能都是要求不高的,毕竟走的都是内网,它们关心的是前端和后端的性能,因此后端系统间调用如果能够采用和前端一样的技术栈,那无疑是维护成本最低的,而这时HTTP的技术生态也刚好满足这个条件,所以就星星之火可以燎原了。那么对于少数的部分系统,他们需要使用RPC,一可能是老架构,也不敢动这块,二是性能要求可能只有RPC可以满足。

传输协议

  • RPC,可以基于TCP协议,也可以基于HTTP协议
  • HTTP,基于HTTP协议

传输效率

  • RPC使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率
  • HTTP,如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装一下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理

性能消耗,主要在于序列化和反序列化的耗时

  • RPC,可以基于thrift实现高效的二进制传输
  • HTTP,大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能

负载均衡

  • RPC,基本都自带了负载均衡策略
  • HTTP,需要配置Nginx,HAProxy来实现

服务治理(下游服务新增,重启,下线时如何不影响上游调用者)

  • RPC,能做到自动通知,不影响上游
  • HTTP,需要事先通知,修改Nginx/HAProxy配置

总结:

  • RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。
  • HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

http://chatgpt.dhexx.cn/article/NUtveDGD.shtml

相关文章

从零开始实现RPC框架 - RPC原理及实现

RPC概述 RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。 现在互联网应用的量级越来越大,单台计算机的能力有限,需要借…

RPC介绍与原理

RPC介绍与原理 RPC介绍 RPC是什么 RPC(Remote Procedure Call)是一种进程间通信方式。简单地说就是能使应用像调用本地方法一样的调用远程的过程或服务,可以应用在分布式服务、分布式计算、远程服务调用等许多场景。说起 RPC 大家并不陌生…

RPC理论原理

目录 集群和分布式RPC通信原理 集群和分布式 集群:每一台服务器独立运行一个工程的所有模块。 分布式:一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务…

一文搞懂RPC原理

了解RPC: RPC(Remote Procedure Call Protocol)——远程过程调用协议: 一般用于实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地资源一样,通过网络传输去访问远端系统资源。 描述&…

rpc简介及原理

1.RPC简介及原理介绍 RPC技术内部原理是通过两种技术的组合来实现的:本地方法调用 和 网络通信技术。 1.1 RPC简介 在上述本地过程调用的例子中,我们是在一台计算机上执行了计算机上的程序,完成调用。随着计算机技术的发展和需求场景的变化…

RPC原理解析

1.RPC原理解析 1.1 什么是RPC RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序…

RPC实现原理

一、什么是RPC框架? RPC,全称为Remote Procedure Call,即远程过程调用,是一种计算机通信协议。 比如现在有两台机器:A机器和B机器,并且分别部署了应用A和应用B。假设此时位于A机器上的A应用想要调用位于B机…

什么是 RPC?RPC原理是什么?

什么是 RPC?RPC原理是什么? 什么是 RPC? RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 A、B 部署在两台不同的机器…

【RK3399Pro学习笔记】三、Debian 9 安装 ROS (Thinker Edge R)

目录 配置源设置 Key安装初始化rosdep环境配置测试安装rosinstall卸载 平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 参考资料: RK3399(Debian9 - stretch) 安装 ROS Lunar —— WB8…

VMware安装Debian9及开发环境配置

序 需要用到一个搭载armv7架构A7内核的Linux设备,装的是Debian系统,为便于兼容该设备故用VMware安装一个Debian9虚拟机,整理总结了网上一些信息以供参考。 目录 一、安装Debian91、WMware中的配置2、安装镜像 二、开发环境配置1、设置快捷键打…

debian 升级linux内核,Debian 9更新到最新的Linux内核

喜欢折腾的同学,会豪气如何升级 Debian Stretch 的内核到新版。遗憾的是现在能搜到的升级 Debian Linux 内核的文章多数是使用Ubuntu的deb安装包,其实这样装上去是有问题,常见的问题是,总会提示需要 apt --fix-broken install 。 这里简单记录一下,如何使用Debian官方源更…

debian 9 ssh root权限登录

debian 9默认的一样不能用root用户登录,还是需要设置,方法如下: 一,打开终端,用普通用户登录 输入:su - 输入密码,切换到root用户 二,设置root用户登录 nano /etc/ssh/sshd_conf…

Debian9到Debian11的超详细升级教程

在云服务器商镜像页面中,可能无法选择一些系统最新的镜像版本。 就会造成一些软件不能顺利下载。 这时就需要自己手动下载并安装最新版的Debian系统了。 1、把当前版本的包更新到最新的版本 apt-get update apt-get upgrade apt-get dist-upgrade按q 直接回车 …

【linux实战】debian9安装python3.7

之前有写了一篇ubuntu18.04使用apt安装python各个版本的,但是最近上debian9上,发现那种apt安装方式不可行,因为ppa不支持debian系列。 Debian 9 默认安装有 Python 2.7 和 3.5。但是我们现在没法使用apt直接安装是没法安装自己想要的版本。 …

debian 系统启动服务器,Debian9添加开机自启动服务

升级到Debian9后,我们发现系统默认不带/etc/rc.local文件,但rc.local服务仍然保留 补齐缺失文件,让Debian9通过编辑/etc/rc.loacl文件为我们的服务添加开机自启动 1、添加rc-local.service #以下为一整条命令,一起复制运行cat >…

debian服务器系统安装,安装Debian 9(Stretch)最小服务器

在本指南中,我们将引导您使用netinstall CD ISO映像安装Debian 9(Stretch)Minimal Server 。 您将执行的此安装适用于构建未来可定制的服务器平台,而无需GUI(图形用户界面)。 您可以使用它来安装仅需要使用的必需软件包,我们将在将来的指南中向您展示。 但是,在进一步了解系…

debian9服务器系统,如何安装Debian 9(Stretch)最小服务器

本教程将介绍如何安装Debian 9(Stretch)最小服务器。 本指南的目的是提供一个最小的Debian设置,可以作为我们其他Debian 9教程的基础,以及在howtoing.com上完美的服务器指南 。 1要求 要安装Debian 9服务器系统,您将需要以下内容:…

debian9软件源的设置

文章目录 debian9软件源的设置概述笔记END debian9软件源的设置 概述 今天和同学讨论一个在debian9下自产软件的细节, 需要先编译这个软件工程. 他说在debian9或debian10下都可以编译. 我本地debian9虚拟机编译失败. 因为我这虚拟机环境是从.iso装的, 装到可以访问外网就做了…

IDEA连接数据库失败

问题描述 IDEA连接数据库输入用户名密码后点击测试连接,返回failed连接失败。 点击view查看失败原因 提示错误号为08001 分析原因 MySql 5.X版本和MySql8.X版本之间有个比较大的区别,MySql8.X在连接的时候需要设置时区,否则连接失败。 …

PHP连接数据库失败-解决方案

问题描述 今天在使用php代码连接数据库的时候发现死活都连接不上,在确认账号密码都没有错误的情况下,几乎找遍了答案都无法解决。 解决方法 通过不断的查阅资料及测试,发现问题在于本机地址localhost和127.0.0.1身上,当我把l…