rpc简介

RPC (Remote Procedure Call)

RPC 是一种分布式计算技术,允许一个计算机程序(客户端)在本地调用另一个计算机程序(服务器)的方法或函数,就像调用本地代码一样,尽管这些程序可能运行在不同的网络环境中,甚至可能使用不同的操作系统和编程语言。RPC 提供了一种抽象,让开发者无需直接处理底层网络通信细节(如 socket 编程、序列化、反序列化、错误处理等),就能实现跨进程、跨网络的服务调用。

核心概念与工作原理:

  1. 接口定义:首先,需要定义服务接口(包括方法名、参数类型、返回类型等),描述客户端可以调用的远程操作。接口定义通常是平台无关的,可以通过 IDL(Interface Definition Language)如 Google 的 Protocol Buffers(protobuf)来编写。

  2. 客户端 stub:客户端拥有一个本地的代理对象(stub),它实现了服务接口。当客户端调用这个 stub 的方法时,实际发生的是对远程服务的调用请求封装成网络消息发送出去。

  3. 服务端 stub:服务端同样有一个 stub,它接收来自客户端的请求消息,解封请求数据,调用实际的服务逻辑,然后将执行结果打包成响应消息返回给客户端。

  4. 网络通信:客户端和服务端通过网络协议(如 TCP/IP)交换请求和响应消息。这些消息需要经过序列化(将数据结构转换为适合网络传输的字节流)和反序列化(将字节流还原为原数据结构)过程。

  5. 透明性:对于客户端程序员而言,调用远程服务就如同调用本地函数一样,无需关心网络连接、数据传输、错误处理等复杂细节。RPC 框架负责处理这些底层任务,提供了一种跨网络、跨语言的透明调用体验。

RPC 的优点:

  • 抽象复杂性:简化分布式系统开发,屏蔽底层网络通信细节。
  • 模块化与解耦:服务间通过接口定义进行交互,有利于系统架构的模块化和松耦合。
  • 跨语言与跨平台:通过统一的接口定义,支持不同语言、不同平台间的互操作。
  • 易扩展与维护:服务可以独立部署、升级,不影响其他服务,利于系统规模的伸缩和维护。

gRPC

gRPC 是一个高性能、开源、通用的 RPC 框架,由 Google 主导开发。它基于 HTTP/2 协议标准,并广泛使用 Google 的 Protocol Buffers(protobuf)作为接口描述语言和默认的数据序列化方式。gRPC 的主要特点如下:

  1. HTTP/2 支持:利用 HTTP/2 的多路复用、二进制帧、头部压缩、优先级控制等特点,实现高效、低延迟的通信。同时,由于基于 HTTP/2,gRPC 能够轻松穿越大多数防火墙和代理。

  2. protobuf:使用 protobuf 作为接口定义语言(IDL)和数据交换格式,提供强类型、语言无关、高效的序列化与反序列化能力。protobuf 支持丰富的数据类型,并且可以自动为多种编程语言生成对应的 stub 代码。

  3. 多语言支持:gRPC 原生支持 C、Java、Go、Python、Node.js、Ruby、Objective-C、PHP、C# 等多种编程语言,使得不同语言编写的微服务可以无缝互操作。

  4. 服务类型:gRPC 支持多种服务类型,包括 unary(一发一收)、server streaming(一发多收)、client streaming(多发一收)和 bidirectional streaming(双向流),满足不同场景下的通信需求。

  5. 工具链完善:提供了丰富的开发、调试、测试、监控工具,如服务发现、负载均衡、健康检查、跟踪、日志、认证与授权等功能。

使用 gRPC 的步骤大致如下:

  1. 定义服务接口:使用 protobuf 文件定义服务接口和消息类型。

  2. 生成代码:使用 protobuf 编译器生成对应语言的 stub 代码。

  3. 实现服务:服务端实现 protobuf 生成的服务接口代码。

  4. 启动服务:服务端启动 gRPC 服务器,监听指定端口。

  5. 调用服务:客户端创建 gRPC 客户端实例,通过 stub 调用远程服务方法。

  6. 配置与管理:根据需要配置负载均衡、身份验证、日志记录、监控等高级功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 配置 jedis 来连接redis

Maven依赖 首先配置 maven依赖,这个依赖,要结合自己的springboot 的版本去选, 如果想要看自己的springboot 版本 在 启动类中去 加入,这两行代码 String version SpringBootVersion.getVersion(); log.info("***SpringBo…

Node.js 基础学习

文章目录 1. Node.js1.1 是什么?1.2 作用 2. 命令行工具2.1 命令的结构2.2 常用命令 3. Node.js 注意点3.1 Node.js 中不能使用DOM 和BOM 的API3.2 Node.js 中顶级对象叫做global 4. Buffer4.1 Buffer 特点4.2 Buffer 创建方式4.3 Buffer 操作与注意点 5. 计算机基础…

Flask:URL与视图的映射

默认端口号80、443 blog_id 限制数据类型的话(int) 除此之外别的数据类型也可以,或者多个(用any) /book/list?page6

spring boot后端开发基础

spring boot后端开发基础 Spring Boot一、开发步骤二、Web分析三、跨域问题四、HTTP协议五、Web服务器六、响应前端请求七、springboot常用注解创建一个简单的RESTful API服务层和数据访问层配置类和Bean定义响应体和路径变量 Spring Boot 一、开发步骤 创建项目 添加依赖 项…

三大层次学习企业架构框架TOGAF

前言 对于一名架构师来讲,如果说编程语言是知识库层次中的入门石,那么企业架构框架则相当于知识库层次中的金字塔尖。如果想成长为企业级的架构师,企业架构框架是必须要攀登的高塔。 目前国内绝大多数企业采用TOGAF标准,因此我们…

浅谈rDNS在IP情报建设中的应用

在当今数字化世界中,互联网已经成为人们日常生活和商业活动中不可或缺的一部分。在这个庞大而复杂的网络生态系统中,IP地址是连接和识别各种网络设备和服务的基础。然而,仅仅知道一个设备的IP地址并不足以充分理解其在网络中的角色和行为。为…

wps屏幕录制怎么用?分享使用方法!

数字化时代,屏幕录制已成为我们学习、工作和娱乐中不可或缺的一部分。无论是制作教学视频、分享游戏过程,还是录制网络会议,屏幕录制都能帮助我们轻松实现。WPS作为一款功能强大的办公软件,其屏幕录制功能也备受用户青睐。本文将详…

创新指南|利用 AI 工具转变您的内容策略

内容策略涉及规划、创建和管理内容。无论您是在策划博客文章、社交媒体更新还是网站内容,精心制定的内容策略是营销活动成功的关键。然而,如果没有合适的工具,维持强大的内容策略可能会具有挑战性。这就是人工智能(AI) 工具发挥作用的地方&am…

Python 将PowerPoint (PPT/PPTX) 转为HTML格式

PPT是传递信息、进行汇报和推广产品的重要工具。然而,有时我们需要将这些精心设计的PPT演示文稿发布到网络上,以便于更广泛的访问和分享。本文将介绍如何使用Python将PowerPoint文档转换为网页友好的HTML格式。包含两个示例: 目录 Python 将…

聚观早报 | 华为Pura70系列先锋计划;月之暗面升级Kimi

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 4月19日消息 华为Pura70系列先锋计划 月之暗面升级Kimi OPPO Find X7将推白色版本 波士顿动力推出人形机器人 v…

liqo学习及安装,k8s,kubernetes多集群互联

先按照官方的教程在虚拟机安装学习 在开始以下教程之前,您应该确保您的系统上安装了以下软件: Docker,容器运行时。Kubectl,Kubernetes 的命令行工具。 curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.…

使用Docker部署开源建站工具—Halo,并实现个人博客公网访问

目录 推荐 前言 1. Docker部署Halo 1.1 检查Docker版本 如果未安装Docker可参考: 已安装Docker步骤: 1.2 在Docker中部署Halo 2. Linux安装Cpolar 2.1 打开服务器防火墙 2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址 4. 固定Halo公网…

前端CSS中“:hover”伪类选择器的使用

前端CSS中“:hover”伪类选择器的使用 一、前言二、改变链接的属性1.源码12.源码1运行效果 三、改变图片的属性1.源码22.源码2运行效果 四、改变卡片的属性1.源码32.源码3运行效果 五、结语六、定位日期 一、前言 在css中的:hover(悬停)伪类…

有交互作用的正交实验设计及数据分析

文章目录 一、认识有交互作用的正交试验1.1 交互作用1.2 问题假设1.3表头设计 参考“十二五”普通高等教育本科规划教材《实验设计与数据处理》 一、认识有交互作用的正交试验 1.1 交互作用 交互作用在实验设计中是指两个或多个因素在一起作用时对实验结果产生的影响&#xf…

OpenHarmony鸿蒙南向开发案例:【智能燃气检测设备】

样例简介 本文档介绍了安全厨房案例中的相关智能燃气检测设备,本安全厨房案例利用轻量级软总线能力,将两块欧智通V200Z-R/BES2600开发板模拟的智能燃气检测设备和燃气告警设备组合成。当燃气数值告警时,无需其它操作,直接通知软总…

如何用 AI 工具做数据分析与可视化?

(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 万字长文,助力你用 AI 提升科研效率。 2024 年 4 月 14 日,应武汉大学信息管理学院的邀请,我和北京大学步一老师给几…

STM32学习和实践笔记(17):STM32外部中断(EXTI)的整体介绍

1.外部中断介绍 1.1 EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事件/中断请求的边沿检测器。(事件与中断的区别,可参看STM32---中断与事件的区别_中断和事件的区别-CSDN博客) 具体有哪些&a…

Android JetPack Compose+Room----实现搜索记录功能

文章目录 需求概述功能展示实现搜索功能使用的技术1.Android Jetpack room2.Android JetPack Compose 代码实现编写搜索界面接入Room实现搜索功能的管理引入依赖定义包结构定义操作表的Dao类定义数据库的基础配置定义数据库的Dao管理类使用数据库升级 源码地址 需求概述 搜索功…

人工智能论文GPT-3(2):2020.5 Language Models are Few-Shot Learners;微调;少样本Few-Shot (FS)

2 方法Approach 我们的基本预训练方法,包括模型、数据和训练,与GPT-2中描述的过程相似,只是模型规模、数据集规模和多样性,以及训练时长有所扩大,相对简单直接。 我们使用的上下文学习也与GPT-2相似,但在…

CentOS 7静默安装Oracle 11g(记一次最小化CentOS 7安装Oracle 11g的经历)

# [pdf在线免费转word文档](https://orcc.online/pdf) https://orcc.online/pdf 1.最小化安装CentOS 7后首先设置一下固定IP 可以先查询一下自己的网卡设备的名称,是ens33,所以网卡配置文件名称就是ifcfg-ens33(前面的ifcfg-不用管&#xf…