【RPC基础知识】

定义

RPC(Remote Procedure Call) 即远程过程调用,通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。

为什么要 RPC ?

因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以,需要通过网络编程才能传递方法调用所需要的参数。并且,方法调用的结果也需要通过网络编程来接收。但是,如果我们自己手动网络编程来实现这个调用过程的话工作量是非常大的,因为,我们需要考虑底层传输方式(TCP 还是 UDP)、序列化方式等等方面。RPC 能帮助我们做什么呢?

简单来说,通过 RPC 可以帮助我们调用远程计算机上某个服务的方法,这个过程就像调用本地方法一样简单。并且!我们不需要了解底层网络编程的具体细节。

举个例子:两个不同的服务 A、B 部署在两台不同的机器上,服务 A 如果想要调用服务 B 中的某个方法的话就可以通过 RPC 来做。一言蔽之:RPC 的出现就是为了让你调用远程方法像调用本地方法一样简单。

组件架构

在这里插入图片描述

  • 客户端程序:发起远程调用请求。
  • 客户端代理(Client Stub):负责序列化参数并通过网络发送请求。
  • 传输层:网络传输协议,用于发送和接收数据。
  • 服务器代理(Server Stub):负责反序列化请求并调用实际服务。
  • 服务器程序:执行具体的操作并返回结果。

优点

简化分布式计算:开发人员不必关注网络通信的细节,可以像调用本地函数一样调用远程服务。
跨平台支持:使用IDL和代理生成,RPC可以支持不同操作系统和编程语言之间的互操作性。
模块化设计:RPC鼓励将应用程序分解为不同的服务模块,促进系统的模块化设计。

挑战

网络延迟和错误处理:由于RPC涉及网络通信,延迟和失败是不可避免的,开发人员需要处理这些情况。
安全性:远程调用涉及跨网络传输数据,可能存在安全风险,通常需要加密和认证机制。
版本兼容性:当客户端和服务器端的接口发生变化时,如何保持兼容性是一个挑战。

常见的RPC框架

1. gRPC

  • 开发者:Google
  • 协议:基于HTTP/2
  • 数据格式:使用Protocol Buffers(Protobuf)作为接口定义语言和序列化格式。
  • 特点:
    • 支持多语言:gRPC支持包括C++, Java, Python, Go等多种编程语言。
    • 高性能:由于使用了HTTP/2,gRPC支持多路复用、流式通信、头部压缩等特 性,提高了效率和速度。
    • 双向流:gRPC支持双向流,客户端和服务器可以在同一个连接上同时发送和接收消息。
    • 强大的生态系统:gRPC在微服务架构中被广泛采用,并且有丰富的生态工具支持,如gRPC Gateway可以方便地暴露REST API。
  • 缺点:
    • 通过 ProtoBuf 定义接口和数据类型还挺繁琐的
    • 几乎没有服务治理能力,需要依赖其他组件,比如腾讯北极星

2. Apache Thrift

  • 开发者:最初由Facebook开发,后来转移到Apache基金会
  • 协议:支持多种传输协议和编码格式
  • 数据格式:自定义二进制格式,可以使用IDL(Interface Definition Language)生成代码
  • 特点:
    • 跨语言支持:Thrift支持多种编程语言,包括Java、C++、Python、PHP、Ruby等,适合跨语言应用程序开发。
    • 灵活性:Thrift提供了多种传输协议(如TCP、HTTP)和编码格式(如二进制、JSON)。
    • 轻量级:相比一些其他RPC框架,Thrift较为轻量,适合低延迟应用。

3. Apache Dubbo

  • 开发者:阿里巴巴,后捐赠给Apache基金会
  • 协议:基于自定义的RPC协议
  • 数据格式:支持多种序列化方式,包括Hessian、JSON、Protobuf等
  • 特点:
    • 微服务支持:Dubbo天生支持微服务架构,具有服务发现、负载均衡、熔断等功能。
    • 高可用性:Dubbo内置了服务治理功能,如服务降级、失败重试等,增强了系统的健壮性。
    • 扩展性:Dubbo提供了丰富的扩展点,可以根据需求自定义功能。

4. Hessian

  • 开发者:Caucho Technology
  • 协议:基于HTTP
  • 数据格式:二进制序列化格式
  • 特点:
    • 简洁高效:Hessian使用二进制格式进行数据传输,性能较高,且易于实现。
    • 跨语言支持:虽然Hessian最初是为Java设计的,但也有多种语言的实现版本。
    • 轻量级:Hessian适合资源受限的环境,如嵌入式系统或移动设备。

5. RMI (Remote Method Invocation)

  • 开发者:Sun Microsystems(现为Oracle)
  • 协议:基于Java的自定义协议
  • 数据格式:Java序列化
  • 特点:
    • 深度集成:RMI是Java平台的一部分,支持在不同Java虚拟机之间调用对象的方法。
    • 强类型支持:由于是Java原生支持,RMI可以直接使用Java对象,类型安全且易于使用。
    • 局限性:RMI仅适用于Java环境,不支持跨语言调用。

总结

RPC的核心原理在于将复杂的网络通信过程隐藏在调用机制之下,使开发者可以像调用本地函数一样调用远程函数。通过序列化、反序列化、网络传输、代理机制,RPC实现了跨网络的过程调用,从而支持分布式系统和服务的构建。

gRPC 和 Thrift 虽然支持跨语言的 RPC 调用,但是它们只提供了最基本的 RPC 框架功能,缺乏一系列配套的服务化组件和服务治理功能的支撑。

Dubbo 不论是从功能完善程度、生态系统还是社区活跃度来说都是最优秀的。而且,Dubbo 在国内有很多成功的案例比如当当网、滴滴等等,是一款经得起生产考验的成熟稳定的 RPC 框架。最重要的是你还能找到非常多的 Dubbo 参考资料,学习成本相对也较低。

参考:
有了 HTTP 协议,为什么还要有 RPC ?

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

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

相关文章

MVC与设计模式理解-lnmp学习之路

一、MVC 前言: MVC是一种应用架构模式,也可以说是一种业务架构或是一种应用设计思想,用于组织业务逻辑并分离代码的。 MVC组成结构是Model-View-Controller,Model是管控数据层,View是管控视图层,Controlle…

基于矢量光场的光学加工技术

欢迎关注GZH《光场视觉》 摘要:作为光的一个基本属性,偏振、振幅和相位提供的自由度对光场调控具有重要作用。具有空间结构偏振态、振幅和相位分布的矢量光场因其具有不同于传统光场的独特性质而被应用于诸多领域。近年来,时空分布特性更加丰…

合宙LuatOS开发板使用手册——Air700EAQ

EVB-Air700EL&700EY 开发板是合宙通信推出的基于 Air700EL&700EY 模组所开发的, 包含电源,SIM 卡,USB,PCB 天线等必要功能的最小硬件系统。 以方便用户在设计前期对 模块进 行性能评估,功能调试,软…

“面试宝典:高频算法题目详解与总结”

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

JavaScript 的进阶概念补充:V8 引擎的垃圾回收机制

JavaScript 的进阶概念补充:V8 引擎的垃圾回收机制 JavaScript 的垃圾回收机制在各大浏览器中实现有所不同,其中 V8 引擎(Google Chrome 和 Node.js 中使用的 JavaScript 引擎)尤为知名。理解 V8 引擎的垃圾回收机制,…

Linux_kernel简介01

--------------------------------------------------------- 力扣专题 --------------------------------------------------------- 一、嵌入式开发 1、ARM的历史 ARM原本含义(Acom RISC Machine)后来Acron公司独立出了ARM部门,成立了ARM公司(Advan…

消费电子钛时代到来!天工股份抢占发展高地,业绩爆发式增长、前景广阔

消费电子“钛时代”正加速到来。 27日凌晨,苹果正式定档iPhone 16系列新品的发布会日期。据悉,本次iPhone 16 Pro系列将全系标配钛金属中框,继续沿用并升级此前在iPhone 15 Pro系列上应用的钛金属材质。 回看去年9月秋季新品发布会&#xf…

VIVADO自定义 IP封装

简介 本章节主要针对VIVAO 2020.2版本做IP自定义封装,其中涉及到IP寄存器读写配置,自定义接口封装等介绍。 IP封装 IP标准自定义步骤一般有创建工程,封装IP,自定义内容,添加自定义库这4个步骤,下面…

音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息

通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息: ffprobe -of json -show_packets XXX.wav 输出如下: 其中: 1.codec_type:packet类型,表示该路流是视频还是音…

《机器学习》 基于GANs构建数字图像生成器

文章目录 引言生成对抗网络的基本原理生成对抗网络的数学表达生成对抗网络的应用生成对抗网络的挑战与优化生成对抗网络的实现示例结论:机器学习和ai技术的出现成为了C……SD……N 热榜的爹。 使用机器学习技术对热榜文章进行分析 引言 生成对抗网络(Ge…

macos USB外接键盘ctrl键绑定方法 解决外接USB键盘与mac键盘不一致问题

mac电脑外接USB键盘后我们需要修改一下 ctrl键的绑定后才符合我们的使用习惯,因为标准USB键盘和mac键盘上面的ctrl键是不一样的, mac上面的 command 键 对应我们USB键盘上面的 ctrl 键. 修改方法: 偏好设置 --> 键盘 点击修饰键 后 选择键盘里面选择 USB键盘 ,然后调换…

鸿蒙( Beta5.0版)开发实战:自定义TabBar页签

介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果。 效果图预览 使用说明: 依次点击tabBar页面,除了社区图标之外,其它图标往上移动一小段距离。 实现…

【SpringCloud应用框架】GateWay网关

Spring Cloud Alibaba 之初识GateWay网关 文章目录 一、网关介绍二、网关对比三、GateWay基本概念:执行流程: 总结 一、网关介绍 在微服务架构中,一个系统会被拆分为多个微服务。如果没有网关存在,我们只能在客户端记录梅哥为服务…

第138天:内网安全-WinLinux内存离线读取Hashcat 破解RDPSSH 存储提取

案例一: 明文获取-Windows-内存读取&离线读取&RDP保存&Hashcat windows实验背景 微软为了防止明文密码泄露发布了补丁 KB2871997 ,关闭了 Wdigest 功能。当系统为 win10 或 2012R2 以上时,默认在内存缓存中禁止保存明文密…

leetcode60.不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7 输出:28 示例 2:…

Mysql数据库当执行SQL响应比较慢,怎样排查及解决?

一 如果执行SQL响应比较慢,可能有以下四个原因: 1 没有索引或者是SOL没有命中索引,导致索引失效。 2 单表数据量过多,导致查询遇到瓶颈。 3 可能是网络原因,或者机器负载过高。 4 热点数据导致单点负载不均衡。 二 解…

11.STL

STL阶段 禁止复制 文本查询扩展作业解析 get_file函数的作用就是进行预处理操作&#xff0c;将文件中的每一行的内容放在shared_ptr<vector<string>> file里面进行存储&#xff1b;然后对每一个单词进行处理&#xff0c;将单词与行号放在map<string, shared_p…

linux 内核代码学习(七)

linux内核代码的研究中断了一段时间了&#xff0c;现在又重新开始了研究&#xff0c;个人觉得linux内核的学习是没有上限的&#xff0c;总是一个温故而知新的过程&#xff0c;是一个不断积累的过程。首先还是要先搭建一个方便自己学习和研究的平台&#xff0c;经过不断的尝试&a…

学习bat脚本

内容包含一些简单命令或小游戏&#xff0c;在乐趣中学习知识。 使用方法&#xff1a; 新建文本文档&#xff0c;将任选其一代码保存到文档中并保存为ASCII编码。将文件后缀改为.bat或.cmd双击运行即可。 一. 关机脚本 1. 直接关机 echo off shutdown -s -t 00秒直接关机。 2…

C语言 | Leetcode C语言题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; bool canConstruct(char * ransomNote, char * magazine){int r strlen(ransomNote);//首先是我们的目标数组和我们的提供方数组长度int m strlen(magazine);if (r > m)return false;//如果提供的数量都不够补充目标&#xff0c;那肯定…