A tour of gRPC:01 - 基础理论

      最后更新:2022-06-23 17:53:21 手机定位技术交流文章

      gRPC的动机

      在实际工程中,后端服务实现方法往往是多个,由于技术或商业上的限制,很多服务都是用多种语言写的。为了互相沟通,必须通过统一的API合同达成服务之间的协议。该 协定 将 规定 下列 事项 : 通讯 渠道,验证机制 、 负载格式 、 数据模型及如何处理异常情况.

      当然,我们希望通讯效率高(快、轻),由于微型服务之间的信息交换量通常是巨大的,因此,通信也应该越快越好。同时,在例如移动应用或其他网络速度和带宽有限的情况下,具有轻量通信协议与后端服务交互是很重要的。

      最后,我们 还 希望, 通讯 将 尽可能 简单,例如,我们现在有一个系统,有数千种服务,我们不想花太多时间编写能让服务彼此沟通的代码。我们想要的是某种框架,让框架帮助我们完成所有与通讯有关的内容,让开发人员关注服务实现的核心业务逻辑.

      gRPC 是什么?

      gRPC最初由谷歌开发,g在gRPC中通常被认为代表谷歌,事实上,在gRPC1中,0是正确的,然而,以下g的版本与版本代码相符(例如1.(g的1表示好),可以查看gRPC版本代码。gRPC现在是Cloud Gene Foundation(CNCF)的一部分(如k8s)。那么RPC代表什么?远程程序调用是调用的一种形式,通俗的说,它通过底框自动处理,允许一个计算机上的程序调用另一个计算机上的程序。这个电话似乎在服务端,我们直接在客户端上调用服务端代码方法(或函数)。

      gRPC如何工作?

      客户端有一个小块 ( 堆 ) 提供与服务器相同的方法,stub由gRpc自动生成。Stub在后端调用gRPC框架,并通过网络与服务器交换信息。由于存在小题,客户和服务器现在只关心实现业务的核心逻辑。

      gRPC 代码生成

      gRPC如何帮助我们生成小作品?

      为了为服务器和客户端生成小作品,我们必须首先在协议缓冲文件中写入API合同(规则),描述服务及其有效消息负载(支付负载)。

      下面显示一个简单的协议缓冲器在protoBuf格式

      在上面的示例文件中,定义了Hello方法(函数),它使用HelloRequest作为输入,并返回一个问候,HelloRequest只包含一个字符串名称,HelloResponse也有一个字符串的问候。从类似的源文件中,根据编程语言的协议缓冲编译器,为服务器和客户端生成stub代码.

      那么为什么gRPC使用协议缓冲器作为API协议?

      1.阅读和理解非常容易

      2.让不同的编程语言具有统一的描述

      3.使用二进制格式,较小,易于传输,比基于文本的格式如JSON/XML更好的序列/逆序列性能

      4.提供客户与服务器之间强有力的API合同

      5.它具有大量的API进化规则,确保API是前后兼容的

      事实上,gRPC并不与协议缓冲器紧密相连,我们可以使用Google Flatbuffers或Microsoft Bond而不是Protocol Buffer.但协议缓冲是一个很好的规则,它被许多编程语言支持。

      原始实现: GO, Java, NodeJS

      软件实现: C/C++, C#, Objective-C, Python, Ruby, Dart, PHP

      非官方支持的第三方库: Swift rust typescript..

      gRPC为什么有效?

      gRPC使用HTTP/2作为传输协议,因此,它继承了HTTP/2提供的一些优秀功能。例如,二进制格式,与其他基于文本的协议相比,高性能, 更强壮, 易于运输, 更安全地解码,与协议缓冲器的结合也更好;Http/2也使用HPACK压缩HEAD,降低成本和提高性能; 多路由重用也可以在HTTP/2中进行,这意味着客户和服务端可以通过单一的TPC连接同时发送多个请求并接收多个响应,这样可以有效地减少延误以提高网络使用效率;HTTP/2还允许服务器发送,客户单一请求时,服务端可以返回多个响应,在多数情况下,这对于减少客户和服务端之间的延误是非常有价值的。

      Http/2如何在底部工作

      HTTP/2 TCP连接可以支持多个双向流。每个流都有独特的标识符,并载有多个双向消息,每个消息(请求/响应)可以分解成多个二进制帧,框架是带有不同数据类型的最小单元,例如:HEADERS(head),SETTINGS(settings), PRIORITY(priority),DATA(data, etc.)。

      不同流域的框架在连接上交叉,当它们到达另一端时将重新组装。

      HTTP/2 vs HTTP/1.1

      让我们再看一下HTTP/2,HTTP/1对我们很熟悉。

      四种gRPC

      客户端发送请求,服务器响应响应

      客户端流客户端流:客户端发送多个消息流请求,并期望服务器只对一个响应

      服务器流服务器流:客户端只发送一个请求,服务器响应多个消息流响应

      双向流(英语:Bidirectional streaming):客户端和服务器同时发送多个请求和响应,这是一个非常灵活的非阻塞方式,这意味着任何一方不需要在发送下一个消息之前等待响应。

      gRPC vs REST

      gRPC应用场景

      微型服务是gRPC真正发挥作用的地方,因为它可以实现低延迟和高吞吐量通信.由于许多编程语言提供了开源代码生成,因此它也适用于多语言环境。点对点通信也是使用gRPC的好地方,因为它提供了良好的支持双向流。最后,由于它的轻量消息格式,它对于一个有限的网络环境也是很好的选择。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/28207.html

          热门文章

          文章分类