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

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

时间:2022-09-29 17:01:43浏览次数:58  
标签:生命周期 架构 grpc gRPC RPC 调用 服务器 HelloRequest 客户端

介绍关键的gRPC概念,概述gRPC架构和RPC生命周期。

不熟悉gRPC?请先阅读《gRPC简介》。关于特定语言的细节,请参见您所选择的语言的快速入门、教程和参考文档。

 

纵观全局
服务定义
像许多RPC系统一样,gRPC也是围绕着定义服务的理念,指定可以远程调用的方法及其参数和返回类型。默认情况下,gRPC使用协议缓冲区作为接口定义语言(IDL)来描述服务接口和有效载荷消息的结构。如果需要的话,也可以使用其他的替代品。

service HelloService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string greeting = 1;
}

message HelloResponse {
  string reply = 1;
}

gRPC让你定义四种服务方法。

单一的RPC,客户端向服务器发送一个请求,并得到一个响应,就像普通的函数调用一样。

rpc SayHello(HelloRequest) 返回(HelloResponse)。

服务器流式RPC,客户端向服务器发送一个请求,并得到一个流来读回一连串的消息。客户端从返回的流中读取信息,直到没有更多的信息。gRPC保证在单个RPC调用中的信息排序。

rpc LotsOfReplies(HelloRequest) 返回(stream HelloResponse)。

客户端流式RPC,客户端写了一连串的消息并将它们发送到服务器,同样使用一个提供的流。一旦客户端完成了消息的写入,它就等待服务器读取这些消息并返回其响应。gRPC再次保证了单个RPC调用中的消息排序。

rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);

双向流RPC,双方都使用读写流发送一连串的消息。这两个流独立运行,因此客户和服务器可以按照他们喜欢的顺序进行读写:例如,服务器可以等待收到所有客户的消息,然后再写它的响应,或者它可以交替地读一个消息然后写一个消息,或者其他一些读和写的组合。每个流中的消息的顺序被保留下来。

rpc BidiHello(stream HelloRequest) 返回(stream HelloResponse)。

你会在下面的RPC生命周期部分了解更多关于不同类型的RPC。

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

在服务器端,服务器实现服务所声明的方法,并运行gRPC服务器来处理客户端调用。gRPC基础设施对传入的请求进行解码,执行服务方法,并对服务响应进行编码。
在客户端,客户端有一个被称为存根的本地对象(对于某些语言,首选术语是客户端),它实现的方法与服务相同。然后,客户端就可以在本地对象上调用这些方法,将调用的参数包装在适当的协议缓冲区消息类型中--gRPC在向服务器发送请求并返回服务器的协议缓冲区响应后查看。
同步与异步
同步的RPC调用,在服务器的响应到达之前,是最接近于RPC所期望的过程调用的抽象的。另一方面,网络本身就是异步的,在许多情况下,能够在不阻塞当前线程的情况下启动RPC是非常有用的。

大多数语言中的gRPC编程API都有同步和异步两种类型。你可以在每种语言的教程和参考文档中找到更多信息(完整的参考文档即将推出)。

 

 

 

标签:生命周期,架构,grpc,gRPC,RPC,调用,服务器,HelloRequest,客户端
From: https://www.cnblogs.com/ben-zhou/p/16742173.html

相关文章

  • grpc介绍
     本页向您介绍gRPC和协议缓冲区。gRPC可以使用协议缓冲区作为其接口定义语言(IDL)和底层消息交换格式。如果你是gRPC和/或协议缓冲区的新手,请阅读这个!如果你只是想先深入......
  • UNIAPP的生命周期
    UNIAPP的生命周期: Pages页面生命周期:onlnit:初始化加载(比Load更早)百度小程序专用onLoad:初始化加载onShow:页面显示onReady:DOM加载完毕......
  • 防火墙基础之大型企业网络架构负载均衡和安全防护
    防火墙基础之大型企业网络架构负载均衡和安全防护原理概述:​防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间......
  • 一文搞懂MySQL客户端/服务器运行架构
    前言之前对MySQL的认知只限于会写些SQL,本篇开始进行对MySQL进行深入的学习,记录和整理下自己对MySQL不熟悉的地方。如果有需要可以关注我的专栏一起学习,共同进步!关于mysql的......
  • RabbitMQ原理和架构图解(附6大工作模式)
    为什么要使用RabbitMQ?1.解耦系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦。2.异步将消息写入消息队列,非必要的业务逻辑以......
  • nginx架构分析之 模块化
    Nginx涉及到的模块分为核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块以及第三方模块等五大类。核心模块核心模块是指Nginx服务器正常运行时必不可少的模块,它们提供了......
  • 大型网站技术架构+核心原理与案例分析 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1Ux6FDAIf5OnEaDZqmppPUg点击这里获取提取码 ......
  • Python总体架构、Python对象
    Python总体架构Python的整体架构主要分为3个部分:1.左边是Python提供的大量模块、库以及用户自定义的模块。2.右边是Python的运行时环境,包括对象/类型系统、内存分配器和......
  • .NET 反向代理 YARP 代理 GRPC
    前面的YARP文档中,介绍了怎么去代理http,和如何根据域名转发,而在现在微服务的应用是越来越来多了,服务间的调用依靠http越来越不现实了,因为http多次握手的耗时越发......
  • CTO也糊涂的常用术语:功能模块、业务架构、用户需求……[20210217更新]
    功能模块、业务架构、需求分析、用户需求、系统分析、功能设计、详细设计、文档、业务、技术……很多被随口使用的名词,其实是含糊甚至错误的。到底含糊在哪里,错误在哪里,不仅......