什么是RPC?有哪些RPC框架?

定义

RPC(Remote Procedure Call,远程过程调用)是一种允许运行在一台计算机上的程序调用另一台计算机上子程序的技术。这种技术屏蔽了底层的网络通信细节,使得程序间的远程通信如同本地调用一样简单。RPC机制使得开发者能够构建分布式计算系统,其中不同的组件可以分布在不同的计算机上,但它们之间可以像在同一台机器上一样相互调用。


工作流程

  1. 客户端(Client)调用:客户端应用程序调用本地的一个存根(Stub)函数,该函数是一个本地函数,但其实现会触发远程调用。
  2. 存根(Stub)处理:存根函数负责将调用参数打包成一种可以在网络上传输的格式(如序列化),并通过网络发送给服务器。
  3. 网络传输:打包后的数据通过网络发送到服务器。
  4. 服务器端接收:服务器端接收并解包这些数据,调用实际的服务端程序或函数,处理请求。
  5. 结果返回:服务端将处理结果打包,通过网络发送回客户端。
  6. 客户端接收结果:客户端的存根函数接收并解包结果,然后返回给原始的调用者。
    在这里插入图片描述

RPC 框架提供了一系列的功能来支持上述过程,包括但不限于:

  • 接口定义:定义服务端和客户端之间的接口,确保双方能够正确理解和调用。
  • 数据序列化与反序列化:将调用信息和结果转换为网络可传输的格式,并在接收时进行还原。
  • 网络通信:封装底层的网络通信逻辑,使得开发者无需关心具体的网络细节。
  • 负载均衡:在多个服务实例之间分配请求,提高系统的可扩展性和可用性。
  • 服务注册与发现:在分布式系统中,自动发现可用的服务实例。

RPC的发展过程

RPC(Remote Procedure Call,远程过程调用)的发展历程可以追溯到计算机网络的早期阶段,随着分布式计算和网络技术的不断发展,RPC技术也逐渐演化和完善。以下是RPC发展历程的主要阶段和特点:

早期阶段

起源:RPC的概念最早可以追溯到1960年代,随着ARPANET(美国国防部高级研究计划局网络)的建立,人们开始探索如何在分布式系统中进行远程通信。
RFC 674和RFC 684:1974年,Jon Postel和Jim White发表了RFC 674,这是最早关于过程调用协议的文档之一。然而,该协议引起了争议,随后在1975年发布了RFC 684作为RFC 674的注释,对争议进行了讨论。

发展与标准化

  • ONC RPC和OSF RPC:随着分布式计算环境的兴起,RPC技术得到了进一步发展。ONC RPC(开放网络计算的远程过程调用)和OSF RPC(开放软件基金会的远程过程调用)是早期RPC技术的代表。这些RPC实现主要关注于支持异构型分布式系统间的通信。
  • CORBA:CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)是另一个重要的分布式计算技术,它提供了跨语言、跨平台的对象通信机制。虽然CORBA与RPC在目标上相似,但CORBA更加复杂,且不同实现之间可能存在不兼容的问题。

互联网时代的RPC

  • Web Services:随着互联网的发展,Web Services成为了一种流行的分布式计算技术。Web Services通过SOAP(简单对象访问协议)或REST(表述性状态转移)等协议实现了跨语言和跨平台的通信。其中,SOAP可以看作是RPC在Web环境中的一种实现方式,它允许开发者像调用本地方法一样调用远程的Web服务。
  • 新兴RPC框架:随着分布式系统和微服务架构的普及,出现了许多新的RPC框架,如Apache Thrift、gRPC、Dubbo等。这些框架通常具有更高的性能、更好的可扩展性和更丰富的功能特性。

现代化RPC框架的特点

  • 高性能:现代RPC框架通常采用高效的序列化协议和网络传输协议,以提高通信性能。
  • 跨语言支持:支持多种编程语言,使得不同语言编写的服务可以无缝通信。
  • 可扩展性:提供负载均衡、服务注册与发现等功能,以支持大规模分布式系统的部署和运维。
  • 安全性:支持加密传输和身份验证等安全机制,保障通信过程中的数据安全和隐私保护。

总之,RPC技术从最初的简单过程调用协议发展到如今的现代化RPC框架,经历了多个阶段和不断的改进与创新。随着分布式计算和微服务架构的不断发展,RPC技术将继续在分布式系统中发挥重要作用。


常见RPC框架的对比

1. gRPC

  • 开发者:由Google开发。
  • 协议基础:基于HTTP/2协议,并使用Protocol Buffers(ProtoBuf)作为序列化协议。
  • 支持语言:支持多语言,包括C++、Java、Python、Go、Ruby、C#、Node.js等。
  • 特点:
    • 提供强大的IDL(接口定义语言)和自动代码生成工具。
    • 支持双向流、流式传输等特性。
    • 适用于大规模分布式系统,要求高性能和跨语言支持的场景。
    • 适用于需要使用Protocol Buffers进行高效数据序列化的场景。

2. Apache Dubbo

  • 开发者:由阿里巴巴开发。
  • 协议:支持多种协议,包括Dubbo自定义协议、REST、HTTP等。
  • 支持语言:主要基于Java,但可以通过扩展支持其他语言。
  • 特点:
    • 提供高性能、透明化的远程方法调用。
    • 支持负载均衡、服务发现、集群容错等特性。
    • 提供了REST风格的远程调用。
    • 适用于Java生态系统中的分布式应用,尤其是基于Spring的应用。
    • 适用于需要提供多协议支持和高度可扩展性的场景。

3. Apache Thrift

  • 开发者:由Apache开发。
  • 协议:支持多种传输协议和序列化协议,如TBinaryProtocol、TCompactProtocol等。
  • 支持语言:支持多语言,包括C++、Java、Python、Go、Ruby、C#、Node.js等。
  • 特点:
    • 使用IDL进行接口定义,提供代码生成工具。
    • 支持异步和同步的通信方式。
    • 可以在不同语言之间进行跨语言通信。
    • 适用于异构系统中不同语言之间的远程调用。
    • 适用于需要高度定制和支持多种传输协议的场景。

4. Motan

  • 开发者:新浪微博开源。
  • 特点:
    • 是一个Java框架,具有高性能和可扩展性。
    • 在微博平台中已经广泛应用,每天为数百个服务完成近千亿次的调用。
    • 提供了丰富的功能和良好的性能表现。

5. 其他RPC框架

  • 其他框架:如Tars(腾讯内部使用并开源)、ZeroMQ(高性能异步消息传递库,非专门RPC框架)、Akka(并发编程框架,提供Actor模型实现)等。
  • 特点:
    • 这些框架各有特色,如Tars特别支持C++语言,适合高性能要求的应用场景。
    • ZeroMQ适用于构建高度异步、消息驱动的系统。
    • Akka适用于构建高并发、分布式、容错性强的系统。

以上就是本文的全部内容,感谢阅读。

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

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

相关文章

【常见开源库的二次开发】一文学懂CJSON

简介: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,但是JSON是独立于语言的,这意味着尽管JSON是由JavaScript语法衍生出来的,它可以被任何编程语言读取和生成…

Django 实现子模版继承父模板

背景 Django的占位符,如果不继承父模板的内容,会被子模版所覆盖,有些业务场景子模版也需要使用到父模板中的内容 可以使用Django自带的标签{% block super %}来实现此效果 base.html 最基础html,相当于第一层html,bl…

代码随想录算法训练营day76 | Floyd 算法精讲、A * 算法精讲

本次题目来自于卡码网 ​​97. 小明逛公园 (Floyd 算法精讲) 1、确定dp数组以及下标的含义 grid[i][j][k] m,表示 节点i 到 节点j 以[1...k] 集合为中间节点的最短距离为m 2、确定递推公式 分两种情况: 节点i 到 节点j 的最…

01 | 基础架构:一条SQL查询语句是如何执行的?

此系列文章为极客时间课程《MySQL 实战 45 讲》的学习笔记! 引言 在了解 SQL 查询语句如何执行之前,先了解下MySQL 的基本架构示意图。 MySQL 分为 Server 层和引擎层。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 M…

微球无菌筛分技术的巅峰之作:纳维加特PV系列

在医药行业中,对微球的制备和筛分要求极高,纳维加特(Navector)凭借其自主创新的PV系列微球无菌旋振筛,成功突破这一领域的技术壁垒。该产品不仅拥有高效率、高精度的筛分能力,同时还兼顾了高卫生级别的要求…

uniapp自动升级

一、创建云服务空间(https://unicloud.dcloud.net.cn) 云空间用于关联需要版本控制升级的项目,如果已拥有云空间则省略此步骤。 二、搭建 uni升级中心 - 后台管理系统(升级中心 uni-upgrade-center - Admin) uni-adm…

Linux调试器-gdb使用以及Linux项目自动化构建工具-make/Makefile

目录 1.gdb背景2.开始使用gdb3.make/makefile 背景4.实例代码5.依赖关系6.依赖方法7.原理8.项目清理 1.gdb背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生…

c++的makeFile怎么做

makeFile30分钟 1 介绍(makeFile是什么,30分钟入门搞懂)2 为什么要用makeFile3 如何制作makeFile文件?4 参考 makeFile真的很简单,不要想的一下子全都学懂了,先入门了,然后在实践中去使用&#…

Apache部署与配置

概述 介绍 Apache HTTP Server(简称Apache)是Apache的一个开源的网页服务器,它源自NCSAhttpd服务器,并经过多次修改和发展,如今已经成为全球范围内广泛使用的Web服务器软件之一 特点 跨平台:可以运行在几乎所有广泛使用的计算机平…

36 特殊类设计

类,不能被拷贝 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝。 c98 将拷贝构造函数与赋值云悬浮重载只声明不定义,并且将其访问权限设置为私有 class CopyBan{// ...private:CopyBan(co…

Apache中使用SSI设置

先停服务在修改httpd.conf,备份下 Apache\Apache24\conf 设置httpd.conf LoadModule ssl_module modules/mod_ssl.so 取消该命令前的注释符# AddType text/html .shtml AddOutputFilter INCLUDES .shtml 取消该命令前的注释符# 加入html AddType text/html .…

在 Kotlin 中,`@JvmOverloads` 注解用于为具有默认参数值的函数生成重载方法

在 Kotlin 中,JvmOverloads 注解用于为具有默认参数值的函数生成重载方法。这个注解在你需要从 Java 代码调用 Kotlin 函数时特别有用,因为 Java 不支持默认参数值。 下面是一个例子,说明 JvmOverloads 的工作原理: Kotlin 代码…

前端javascript中的排序算法之插入排序

插入排序(Selection Sort)基本思想: 插入排序每次排一个数组项,以此方式构建最后的排序数组。假定第一项已经排序了,接着, 它和第二项进行比较,第二项是应该待在原位还是插到第一项之前呢&#…

软件工具网站推荐

1.菜鸟工具 菜鸟工具 - 不止于工具菜鸟工具,为开发设计人员提供在线工具,网址导航,提供在线PHP、Python、 CSS、JS 调试,中文简繁体转换,进制转换等工具。致力于打造国内专业WEB开发工具,集成开发环境&…

详细谈谈负载均衡的startupProbe探针、livenessProbe探针、readnessProbe探针如何使用以及使用差异化

文章目录 startupProbe探针startupProbe说明示例配置参数解释 使用场景说明实例——要求: 容器在8秒内完成启动,否则杀死对应容器工作流程说明timeoutSeconds: 和 periodSeconds: 参数顺序说明 livenessProbe探针livenessProbe说明示例配置参数解释 使用…

CSS技巧专栏:一日一例 1.纯CSS实现 会讨好的热情按钮 特效

题外话: 从今天开始,我准备开设一个新的专栏,专门写 使用CSS实现各种酷炫按钮的方法,本专栏目前准备写40篇左右,大概会完成如下按钮效果: 今天,我来介绍第一个按钮的实现方法:会讨好的热情按钮。为什么我给它起这样的名字呢?你看它像不像一个不停摇尾巴的小黄?当你鼠…

【QML之·基础语法概述】

系列文章目录 文章目录 前言一、QML基础语法二、属性三、脚本四、核心元素类型4.1 元素可以分为视觉元素和非视觉元素。4.2 Item4.2.1 几何属性(Geometry):4.2.2 布局处理:4.2.3 键处理:4.2.4 变换4.2.5 视觉4.2.6 状态定义 4.3 Rectangle4.3.1 颜色 4.4…

1Panel服务器面板支持哪些Linux操作系统?

1Panel面板支持的Linux操作系统版本有哪些?1Panel支持主流Linux发行版本,包括RedHat、CentOS、Ubuntu、Debian、openEuler及其他国产操作系统。支持多种服务器架构,码笔记整理详细1Panel面板支持的服务器系统、架构、内存和浏览器支持&#x…

【界面态】霍尔效应表征氮化对SiC/SiO2界面陷阱的影响

引言 引言主要介绍了硅碳化物(SiC)金属-氧化物-半导体场效应晶体管(MOSFETs)作为新一代高压、低损耗功率器件的商业化背景。SiC MOSFETs因其优越的电气特性,在高电压和高温应用领域具有巨大的潜力。然而,尽…

综合安全防护

题目 1,DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问. 2,生产区不允许访问互联网,办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMz区的FTP服务器和HTTP服务器,仅能ping通10.0.3.10 4,办公区分为市场部和研发部,研…