揭秘gRPC:释放闪电般的通信能力

网络 通信技术
在我们深入讨论gRPC的细节之前,澄清远程通信领域各种术语之间的关系非常重要,这有时可能令人困惑。

在我们深入讨论gRPC的细节之前,澄清远程通信领域各种术语之间的关系非常重要,这有时可能令人困惑。

RPC — 远程过程调用

根据维基百科的定义,“在分布式计算中,远程过程调用(RPC)是指计算机程序导致在不同地址空间中执行过程(子程序),通常在共享网络上的另一台计算机上,就好像它是一个正常的(本地)过程调用,程序员没有明确编写远程交互的详细信息。”

简而言之,这是一种让一个计算机程序请求另一个程序执行某项任务的方式,即使它们位于不同的计算机上也可以。这有点像在您的程序中调用一个函数,尽管它是在不同的机器上执行的。这是一种过程调用,就好像它在同一台机器上一样,但实际上不在同一台机器上,RPC库/框架负责抽象化所有这些复杂性。

RPC流程

RPC框架负责屏蔽底层的传输方法(TCP或UDP)、序列化方法(XML/JSON/二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程服务提供者,而不必关心底层通信。这涉及到调用的细节和过程。

REST

REST代表表述性状态传输,是一种用于设计网络应用程序的成熟架构风格。RESTful API使用HTTP请求执行CRUD(创建、读取、更新、删除)操作,通常表示为URL。REST API以其简单性和使用GET、POST、PUT和DELETE等标准HTTP方法而闻名。

HTTP

HTTP(超文本传输协议)是互联网上的数据通信基础。它定义了消息的格式和传输方式,以及Web服务器和浏览器如何响应各种命令。HTTP随着时间的推移发生了演变,不同版本提供了各种功能和改进:

  • HTTP/1.0:HTTP的第一个版本非常简单,缺少许多现代功能。在HTTP/1.0中,每个请求都需要一个新的TCP连接,导致效率低下。
  • HTTP/1.1:通过引入保持活动连接的机制,HTTP/1.1改进了HTTP/1.0,允许多个请求和响应在单个TCP连接上发送,从而减少了延迟。然而,它仍然存在一些限制,比如“头部阻塞”问题,其中一个慢速请求可以阻止同一连接中的后续请求,导致“瀑布”效应。
  • HTTP/2:HTTP/2引入了二进制帧机制,允许多路复用、请求优先级和头部压缩。这些增强显著提高了网络通信的效率和速度。它通过允许在单个连接内有多个并发流来消除“头部阻塞”问题。
  • HTTP/3:最新版本HTTP/3通过使用QUIC传输协议进一步提高性能。它侧重于减少延迟,特别是在存在高丢包率或不可靠网络的情况下。HTTP/3设计得比其前身更具弹性和高效性。

所以现在我们了解了这些术语。让我们开始吧!

什么是gRPC?

gRPC(这里的“g”代表什么?)是一种进程间通信技术,允许您连接、调用、操作和调试分布式异构应用程序,就像进行本地函数调用一样简单。

当您开发gRPC应用程序时,首先要做的是定义一个服务接口。服务接口定义包含有关如何消费服务的信息,允许消费者调用哪些远程方法,调用这些方法时要使用什么方法参数和消息格式,等等。我们在服务定义中指定的语言称为接口定义语言(IDL)。

gRPC使用协议缓冲区作为定义服务接口的IDL。协议缓冲区是一种与语言无关、平台中立、可扩展的机制,用于序列化结构化数据。

gRPC架构

是什么让gRPC拥有闪电般的性能?以下是内部情况:

HTTP/2: 2015年,HTTP/2取代了HTTP/1.1,提供了多路复用功能,允许多个请求和响应共享单个连接,提高了效率。

  • 请求/响应多路复用: 由于HTTP/2的二进制帧,gRPC可以在单个连接内处理多个请求和响应,彻底改变了通信效率。
  • 头部压缩: HTTP/2的HPack策略压缩头部,减小了有效负载大小。再加上gRPC的高效编码,这使性能非常出色。

Protobuf:秘密武器

gRPC效率游戏中的关键因素之一是协议缓冲区,简称Protobuf。Protobuf定义数据结构和函数合同。客户端和服务器都需要使用相同的Protobuf语言,这是它们如何相互理解的方式。协议缓冲区(ProtoBuf)在gRPC框架内发挥三个主要作用:定义数据结构、指定服务接口,并通过序列化和反序列化增强传输效率。

gRPC的优势有哪些

除了有一个非常可爱的吉祥物外。采用gRPC的原因在于其独特的优势:

  • 进程间通信的效率: 与JSON或XML不同,gRPC使用基于协议缓冲区的二进制协议进行通信,提高了速度。它建立在HTTP/2之上,使其成为最高效的进程间通信技术之一。
  • 明确定义的服务接口和模式: gRPC鼓励优先进行合同定义,优先考虑服务接口定义,而不是深入研究实现细节。这种简单性、一致性、可靠性和可扩展性定义了应用程序开发体验。
  • 强类型和多语言支持: gRPC使用协议缓冲区来定义服务,清晰地指定了应用程序之间通信的数据类型。这有助于提高稳定性,并减少运行时和互操作性错误。此外,gRPC可以与各种编程语言无缝集成,为开发人员提供了选择其首选语言的灵活性。
  • 双向流和内置功能: gRPC本地支持客户端和服务器端的流式处理,简化了流式服务和客户端的开发。它还内置了对关键功能的支持,如身份验证、加密、弹性(包括截止日期和超时)、元数据交换、压缩、负载均衡和服务发现。
  • 云原生集成和成熟性: 作为Cloud Native Computing Foundation(CNCF)的一部分,gRPC与现代框架和技术无缝集成,成为通信的首选选择。CNCF中的项目,如Envoy,支持gRPC,并且许多监控工具,包括Prometheus,与gRPC应用程序有效地配合使用。此外,gRPC在Google进行了广泛测试,并被广泛采用。
责任编辑:赵宁宁 来源: 小技术君
相关推荐

2023-12-08 14:07:44

Polars数据科学数据库

2017-04-24 11:05:10

灵焕3 Pro传输商务

2023-08-25 14:37:37

2017-12-01 10:56:25

戴尔

2020-01-15 16:00:16

Linuxseq命令数字序列

2021-01-14 22:30:52

5G网络科技

2024-06-27 11:00:07

2020-09-24 14:43:02

5G

2021-11-08 10:17:48

gRPC Istio网格

2023-11-19 23:24:21

Golang开发

2023-08-21 09:46:33

5G技术智能家居

2017-08-17 15:15:18

人工智能失业

2016-10-11 15:01:29

2023-08-22 15:17:43

2018-09-18 15:57:44

机器学习ML神经网络

2017-06-05 09:35:39

2020-06-28 08:02:50

DevOps初创公司

2023-02-09 10:39:15

gRPC通信模式

2012-07-24 10:30:12

2019-04-26 12:11:37

快手秒变闪电手
点赞
收藏

51CTO技术栈公众号