首页 > 其他分享 >GRPC核心概念、架构和生命周期

GRPC核心概念、架构和生命周期

时间:2023-06-07 10:48:07浏览次数:47  
标签:生命周期 架构 响应 GRPC gRPC RPC 消息 服务器 客户端

GRPC核心概念、架构和生命周期

标签(空格分隔): go,grpc

官网地址:https://grpc.io/docs/what-is-grpc/core-concepts/

概述

与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。默认情况下,gRPC 使用协议缓冲区作为接口定义语言 (IDL) 来描述服务接口和有效负载消息的结构。如果需要,可以使用其他替代方案

gRPC 允许您定义四种服务方法

  • 一元 RPC
    其中客户端向服务器发送单个请求并返回单个响应,就像普通函数调用一样
    rpc SayHello(HelloRequest) returns (HelloResponse);
  • 服务器流式处理 RPC
    其中客户端向服务器发送请求并获取流以读回消息序列。客户端从返回的流中读取,直到没有更多消息。gRPC 保证单个 RPC 调用中的消息排序
    rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
  • 客户端流式处理 RPC
    其中客户端写入一系列消息并将其发送到服务器,再次使用提供的流。客户端完成消息写入后,它将等待服务器读取消息并返回其响应。同样,gRPC 保证单个 RPC 调用中的消息排序
    rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
  • 双向流式处理 RPC
    其中双方使用读写流发送一系列消息。这两个流独立运行,因此客户端和服务器可以按照它们喜欢的任何顺序进行读取和写入:例如,服务器可以等待接收所有客户端消息,然后再写入响应,或者它可以交替读取消息然后写入消息,或者读取和写入的某种其他组合。保留每个流中消息的顺序
    rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);

使用接口

从 .proto 文件中的服务定义开始,gRPC 提供了生成客户端和服务器端代码的协议缓冲区编译器插件。gRPC 用户通常在客户端调用这些 API,并在服务器端实现相应的 API

 - 在服务器端,服务器实现服务声明的方法,并运行 gRPC 服务器来处理客户端调用。gRPC
   基础结构解码传入请求、执行服务方法并对服务响应进行编码

 - 在客户端,客户端有一个称为存根的本地对象(对于某些语言,首选术语是客户端),它实现与服务相同的方法。然后,客户端可以在本地对象上调用这些方法,这些方法将调用的参数包装在适当的协议缓冲区消息类型中,将请求发送到服务器,并返回服务器的协议缓冲区响应

RPC 生命周期

在本部分中,你将详细了解当 gRPC 客户端调用 gRPC 服务器方法时会发生什么情况。有关完整的实现详细信息,请参阅特定于语言的页面

Unary RPC【一元RPC】

首先考虑最简单的 RPC 类型,其中客户端发送单个请求并返回单个响应
  • 客户端调用存根方法后,将通知服务器已使用此调用的客户端元数据、方法名称和指定的截止时间(如果适用)调用了 RPC
  • 然后,服务器可以立即发回自己的初始元数据(必须在任何响应之前发送),也可以等待客户端的请求消息。首先发生,是特定于应用程序的
  • 一旦服务器获得客户端的请求消息,它就会执行创建和填充响应所需的任何工作。然后,响应(如果成功)连同状态详细信息(状态代码和可选状态消息)和可选的尾随元数据一起返回给客户端
  • 如果响应状态为“正常”,则客户端将获得响应,从而在客户端完成调用

Server streaming RPC【服务器流RPC】

服务器流式处理 RPC 类似于一元 RPC,不同之处在于服务器返回消息流以响应客户端的请求。发送所有消息后,服务器的状态详细信息(状态代码和可选状态消息)和可选的尾随元数据将发送到客户端。这样就完成了服务器端的处理。客户端在拥有服务器的所有消息后完成

Client streaming RPC【客户端流RPC】

客户端流式处理 RPC 类似于一元 RPC,不同之处在于客户端向服务器发送消息流而不是单个消息。服务器使用单个消息(以及其状态详细信息和可选的尾随元数据)进行响应,通常但不一定要在收到所有客户端的消息之后

Bidirectional streaming RPC【双向流RPC】

    在双向流式处理 RPC 中,调用由调用该方法的客户端和接收客户端元数据、方法名称和截止时间的服务器发起。服务器可以选择发回其初始元数据或等待客户端开始流式传输消息

    客户端和服务器端流处理是特定于应用程序的。由于这两个流是独立的,因此客户端和服务器可以按任意顺序读取和写入消息。例如,服务器可以等到它收到客户端的所有消息后再写入其消息,或者服务器和客户端可以玩“乒乓球”——服务器收到请求,然后发回响应,然后客户端根据响应发送另一个请求,依此类推

截止时间/超时

    gRPC 允许客户端指定在 RPC因DEADLINE_EXCEEDED错误终止之前,他们愿意等待 RPC 完成的时间。在服务器端,服务器可以查询特定 RPC 是否已超时, 或者还剩下多少

时间来完成 RPC

RPC 终止

    在 gRPC 中,客户端和服务器都对调用是否成功做出独立的本地确定,它们的结论可能不匹配。这意味着,例如,您可能有一个在服务器端成功完成的 RPC(“我已经发送了我所有的响应!”),但在客户端失败(“响应在我的截止日期之后到达!”)。服务器也可以在客户端发送所有请求之前决定完成

取消 RPC

    客户端或服务器可以随时取消 RPC。取消会立即终止 RPC,以便不再执行任何进

一步的工作

标签:生命周期,架构,响应,GRPC,gRPC,RPC,消息,服务器,客户端
From: https://www.cnblogs.com/yanweifeng/p/17462631.html

相关文章

  • 软考高级软件架构师学习笔记一(软件架构设计)
    软件架构设计一、软件架构的概念⭐⭐⭐1、软件架构的概念需求分析-----------架构------------软件设计            (鸿沟)体系结构==架构架构设计就是需求分配,即是将满足需求的职责分配到组件上。2、软件架构建模结构模型:以架构的构件、连接件和其他概念来......
  • 架构师如何找到自己的商业模式
    作为一个架构师,必须要在有限的资源下最大化架构活动所带来的商业价值。对于任何一个架构活动而言,架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等等,都是非常有限的。但架构活动就是要在这些限制条件之下,将商业价值最大化。商业价值(Businessvalue)呢,就是从现金收......
  • 微服务架构图
    微服务架构图  posted@ 2020-11-1510:27  朱志勇 阅读(8526) 评论(0)  编辑  收藏  举报 SpringCloud微服务总体架构图Springcloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,Springcloud中各个组件在微服务架构中扮演的角色如图所示。......
  • Vue 生命周期
    Vue生命周期1.1简单实现打开页面1.1.1元素透明度变化<body><divid="root"><h2:style="{opacity}">欢迎来到王者荣耀</h2></div></body><script>varvm=newVue({el:"#root",......
  • Vue——计算属性、监听属性、Vue生命周期、组件介绍和使用、组件间通信、ref属性
    计算属性//1计算属性是基于他们的依赖变量进行缓存的//2计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算)//3计算属性就像python中的property装饰器,可以把方法/函数伪装成属性//4计算属性,必须有返回值<body><divid......
  • vue之生命周期钩子
    目录一、生命周期图1.官方原图2.理解的图二、生命周期8个声明周期钩子,什么情况会用到组件销毁-给组件写一个定时器一、生命周期图1.官方原图2.理解的图二、生命周期newVue()---->创建出来---》页面关闭---》被销毁掉----》整个整个过程经历了一个周期----》vue帮咱们提......
  • EasyNTS上云网关现已支持Linux ARM架构客户端
    EasyNTS上云网关管理平台可集中管理所有接入的EasyNTS上云网关设备,实现接入与管控、动态组网、远程运维、文件传输、远程指令调用等功能,从终端到云端,形成了一整套的上云网关解决方案,极大地解决了现场无固定IP、端口不开放、系统权限不开放等问题。在之前的EasyNTS版本中,后台管理页......
  • 跨境电商系统的实现原理与技术架构分析
    跨境电商系统是一个综合性的软件系统,它通过整合多个平台的数据和服务,提供了全面的跨境电商经营解决方案。本文将介绍跨境电商系统的实现原理与技术架构。一、实现原理跨境电商系统实现的基本原理是将海外商品导入国内市场,实现商品销售及物流配送。常见的跨境电商平台包括淘宝、天猫......
  • 9.4. 分布式与微服务架构
    在本章节中,我们将介绍分布式系统和微服务架构的基本概念。分布式系统解决了单体应用面临的可扩展性、高可用性等问题,而微服务架构进一步提升了系统的可维护性和灵活性。9.4.1.分布式系统基本概念分布式系统是由多个独立的计算节点组成的系统,这些节点通过网络进行通信和协作。......
  • bean的生命周期
    执行无参构造器,创建了bean实例调用了set方法,设置了属性值执行了初始化的方法获得了创建bean实例对象执行了销毁的容器的方法packagecom.guodaxia.bean.lifttime;publicclassTestTime{Stringname;publicTestTime(){System.out.println("执行第......