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

2023-10-08 09:52

本文主要是介绍揭秘gRPC:释放闪电般的通信能力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

c513dfa8bb4beb3ccc94a5f019578443.jpeg

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

RPC — 远程过程调用

7c8bf42943d6139f4908e57267d9020b.png

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

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

RPC流程

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

REST

94dc49eb83d17418912bf2f906050dd5.png

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

HTTP

bb0d545319a8de822327c585a823dc78.jpeg

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

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

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

什么是gRPC?

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

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

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

de431863f6bd2baa36fde5ad42fedd26.png

gRPC架构

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

1.HTTP/2: 2015年,HTTP/2取代了HTTP/1.1,提供

了多路复用功能,允许多个请求和响应共享单个连接,提高了效率。

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

Protobuf:秘密武器

54b56f6d4d872296857262805f3b56bf.png

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

gRPC的优势有哪些

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

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

  15caa390f28f759c25e18da487b40d99.jpeg8995ce11b4b62f4c94ddd94f9ee1f74d.jpeg

这篇关于揭秘gRPC:释放闪电般的通信能力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/164462

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

无线领夹麦克风什么牌子好用?揭秘领夹麦克风哪个牌子音质好!

随着短视频行业的星期,围绕着直播和视频拍摄的电子数码类产品也迎来了热销不减的高增长,其中除了数码相机外,最为重要的麦克风也得到了日益增长的高需求,尤其是无线领夹麦克风,近几年可谓是异常火爆。别看小小的一对无线麦克风,它对于视频拍摄的音质起到了极为关键的作用。 不过目前市面上的麦克风品牌种类多到让人眼花缭乱,盲目挑选的话容易踩雷,那么无线领夹麦克风什么牌子好用?今天就给大家推荐几款音质好的

负债不再是障碍?银行信贷“白名单“揭秘

谈及银行信贷产品,常闻有言称存在无需考量负债与查询记录之奇品,此等说法十有八九为中介诱人上钩之辞。轻信之下,恐将步入连环陷阱。除非个人资质出类拔萃,如就职于国央企或事业单位,工龄逾年,五险一金完备,还款能力卓越,或能偶遇线下产品对查询记录稍显宽容,然亦非全然无视。宣称全然不顾者,纯属无稽之谈。 银行非慈善机构,不轻易于困境中援手,更偏爱锦上添花之举。若无坚实资质,即便求助于银行亦难获青睐。反

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(