您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

什么是gRPC

时间:2020-04-08 13:45:02  来源:  作者:闻数起舞

REST和RPC架构之间的差异

 

本文的目的是对gRPC有一个高级的了解。 它还将解释gRPC与Web应用程序通信遵循的现有协议和体系结构之间的异同。

什么是gRPC?

gRPC是开源的远程过程调用框架,用于在服务之间进行高性能通信。 这是将以不同语言编写的服务与负载均衡,跟踪,运行状况检查和身份验证的可插拔支持相连接的有效方法。 默认情况下,gRPC使用协议缓冲区来序列化结构化数据。 通常,对于微服务体系结构,gRPC被认为是REST协议的更好替代方案。 gRPC中的" g"可以归因于最初开发该技术的google

在深入探讨gRPC之前,让我们看一下微服务架构。

微服务与Monoliths

整体架构是设计应用程序的传统方式。 它包含一个不可分割的代码库,用于服务于客户端用户界面,服务器端应用程序和数据库。 在项目中工作的所有开发人员都将代码贡献到同一存储库中。 我最喜欢的与整体建筑相关的类比之一是将其视为一室公寓。 单个房间将根据需要分为各种空间。

整体架构的优势在于,由于只有一个单元,因此可以轻松完成日志记录,性能监控和缓存之类的操作。 而且,它很容易开发,测试,调试和部署。

但是随着应用程序的增长,它变得难以维护,扩展甚至理解。 而且,它可能变得如此复杂,以至于代码的少量更改会影响整个应用程序。

整体结构的另一个重要缺点是,它是对单一技术的严格承诺。 采用新的框架或语言可能需要对整个系统进行重写。

进入微服务架构!

如果单片式架构是一室公寓,则微服务架构可以视为具有许多房间的房屋。 这意味着整个应用程序将细分为多个较小的应用程序或服务。

这使开发团队可以灵活地选择最适合其需求的技术,并使他们能够独立扩展服务。 微服务应用程序中的任何故障仅影响特定服务,而不影响整个应用程序。

这些服务可以独立开发,维护和部署,它们通过称为API(应用程序编程接口)的已定义方法相互通信。

通过HTTP的微服务之间的通信可以通过多种方式完成。 使用最广泛的方法是遵循REST协议。 gRPC是执行此通信的另一种方法。 它旨在克服REST在微服务通信中的局限性。

REST架构

REST是使用HTTP协议的Web架构。 它被广泛用于Web应用程序的开发。 简而言之,REST是一种客户端-服务器关系,其中通过简单的表示形式(例如JSON / XML)向客户端提供后端数据。 如Roy Fielding所述,REST代表代表状态转移。 REST是一种协议,它不强制执行任何有关如何在较低级别实施的规则。 它为高级体系结构实施提供了指导。

为了使任何应用程序真正实现RESTful,必须遵循六个体系结构约束:

· 统一接口:意味着必须向Web应用程序中的API使用者提供API接口。

· 客户端-服务器:客户端和服务器必须彼此独立,并且客户端应仅知道资源的URI。

· 无状态:服务器不得存储与客户端请求相关的任何内容。 客户端负责维护应用程序的状态。

· 可缓存的:资源必须可缓存。

· 分层系统:体系结构必须是分层的,这意味着体系结构的组件可以位于多个服务器中。

· 按需代码:客户端必须能够获取可执行代码作为响应。 这是一个可选约束。

基于REST的Web服务被称为RESTful Web服务。 在这些应用程序中,每个组件都是一种资源,可以使用HTTP标准方法通过公共接口访问这些资源。 以下四种HTTP方法通常用于基于REST的体系结构中:

· GET - 对资源的只读访问。

· POST — 创建一个新资源。

· Delete — 删除资源。

· PUT - 更新现有资源/创建新资源。

RPC架构

RPC代表远程过程调用。 顾名思义,其思想是我们可以在远程服务器上调用函数/方法。 RPC协议允许以相同的格式获取问题的结果,而不管它在何处执行。 它可以是本地的,也可以使用更好的资源在远程服务器中。

RPC是比REST更旧的协议。 从1970年代的ARP.NET时代起,它就已经用于执行网络操作。 RPC一词最早由布鲁斯·杰伊·尼尔森(Bruce Jay Nelson)于1981年提出。但是,正如我们将要看到的,RPC仍然很重要,并以不同的方式在基于API的现代应用程序中实现。

想法是一样的。 通过定义公共方法来构建API。 然后用参数调用方法。 RPC只是一堆函数,但是在HTTP API的上下文中,它需要将方法放在URL中,并将参数放在查询字符串或主体中。

RPC API将使用诸如{/ id:1}主体的POST / deleteResource之类的东西,而不是REST方法(即DELETE / resource / 1)。

RPC在物联网设备和其他需要针对低功率设备进行自定义合约通信的解决方案中非常受欢迎,因为许多计算操作可以转移到另一设备。 传统上,RPC可以实现为RPC-XML和RPC-JSON。

gRPC是要在RPC协议上创建的最新框架。 它利用其优势,并试图纠正传统RPC的问题。

什么是gRPC?

根据目前为止所读的内容,我们可以重新定义gRPC。 它是对传统RPC框架的改编。 那么,它与现有的RPC框架有何不同?

最重要的区别是gRPC使用协议缓冲区作为接口定义语言进行序列化和通信,而不是JSON / XML。 协议缓冲区可以描述数据的结构,并且可以从该描述中生成代码,以生成或解析表示结构化数据的字节流。 这就是为什么gRPC首选多语言(使用不同技术实现)的Web应用程序的原因。 二进制数据格式使通信更轻松。 gRPC也可以与其他数据格式一起使用,但是首选的是协议缓冲区。

同样,gRPC建立在HTTP / 2之上,它支持双向通信以及传统的请求/响应。 gRPC允许服务器和客户端之间的松散耦合。 实际上,客户端会打开与gRPC服务器的长期连接,并且将为每个RPC调用打开一个新的HTTP / 2流。

REST与gRPC

与使用JSON(主要是JSON)的REST不同,gRPC使用协议缓冲区,这是编码数据的更好方法。 由于JSON是基于文本的格式,因此它比protobuf格式的压缩数据要重得多。

与传统REST相比,gRPC的另一个显着改进是它使用HTTP 2作为其传输协议。 主要由REST使用的HTTP 1.1基本上是一个请求-响应模型。 (REST也可以使用HTTP2来实现。)gRPC利用HTTP 2的双向通信功能以及传统的响应请求结构。 在HTTP 1.1中,当多个请求来自多个客户端时,它们将被一一处理。 这会降低系统速度。 HTTP 2允许多路复用,因此可以同时处理多个请求和响应。

我们可以得出结论,当用例涉及使用惯用API的多语言通信或大规模微服务通信时,gRPC是一个不错的选择。

 

(本文翻译自Arun Mathew Kurian的文章《Understanding gRPC》,参考:
https://medium.com/better-programming/understanding-grpc-60737b23e79e)



Tags:gRPC   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
如何通过三行配置解决在Kubernetes中的gRPC扩展问题
一切都始于我向我们的高级软件工程师提出的一个问题: “忘掉通信速度。你真的觉得在gRPC中开发通信比REST更好吗?” 我不想听到的答案立刻就来了:“绝对是的。”在我提出这个问...【详细内容】
2023-11-07  Search: gRPC  点击:(366)  评论:(0)  加入收藏
在 Kubernetes 环境中实现 gRPC 负载均衡
前言前段时间写过一篇 gRPC 的入门文章,在最后还留了一个坑没有填:图片也就是 gRPC 的负载均衡问题,因为当时的业务请求量不算大,再加上公司没有对 Istio 这类服务网格比较熟悉...【详细内容】
2023-10-17  Search: gRPC  点击:(400)  评论:(0)  加入收藏
在Kubernetes中实现gRPC流量负载均衡
在尝试将gRPC服务部署到Kubernetes集群中时,一些用户(包括我)面临的挑战之一是实现适当的负载均衡。在深入了解如何平衡gRPC的方式之前,我们首先需要回答一个问题,即为什么需要平...【详细内容】
2023-10-09  Search: gRPC  点击:(295)  评论:(0)  加入收藏
gRPC对比REST,在Spring Boot 中使用gRPC
1 为什么选择 gRPCgRPC是一种高性能的先进RPC(远程过程调用)框架,是开源的,并且兼容不同的环境。它使用协议缓冲区作为消息交换格式。不同语言中的 gRPC 客户端和服务器通信示例...【详细内容】
2023-07-17  Search: gRPC  点击:(118)  评论:(0)  加入收藏
Nginx如何实现gRPC反向代理
Nginx可以用来实现gRPC的反向代理,这里简要介绍一下如何配置Nginx实现grpc反向代理。要实现grpc反向代理,需要进行以下步骤: 安装gRPC和protobuf在Nginx服务器上安装好gRPC和pr...【详细内容】
2023-04-21  Search: gRPC  点击:(460)  评论:(0)  加入收藏
Spring Boot+Nacos+gRPC,一个区别于 OpenFeign 的微服务通信方案!
gRPC 的基础知识前面跟小伙伴们分享了很多了,今天再写一篇给这个小小的系列收个尾。我们前面介绍的都是 gRPC 的基本用法,最终目的当然是希望能够在 Spring Boot 中用上这个...【详细内容】
2023-04-04  Search: gRPC  点击:(234)  评论:(0)  加入收藏
如何用一个端口同时暴露 HTTP1/2、gRPC、Dubbo 协议?
本文我们将介绍 Apache Dubbo 灵活的多协议设计原则,基于这一设计,在 Dubbo 框架底层可灵活的选用 HTTP/2、HTTP/REST、TCP、gRPC、JsonRPC、Hessian2 等任一 RPC 通信协议,同...【详细内容】
2023-03-17  Search: gRPC  点击:(85)  评论:(0)  加入收藏
技术选型:如何选择REST、GraphQL 和 gRPC
REST、GraphQL 和 gRPC 是现代 Web 应用程序中最流行的 3 种 API 开发技术。那么在做技术选型时,三者要如何选择呢?在本文中,我们将一起对比 REST、GraphQL 和 gRPC 的特性和用...【详细内容】
2023-03-17  Search: gRPC  点击:(290)  评论:(0)  加入收藏
Go 语言怎么一键生成一个 gRPC 服务?
本文我们介绍怎么使用命令行工具 micro new 创建一个 gRPC 服务,并且怎么构建和运行服务。​01 介绍Go 开源项目 Micro​ 为我们提供一套微服务解决方案,它主要包含两个部分...【详细内容】
2023-03-06  Search: gRPC  点击:(167)  评论:(0)  加入收藏
gRPC三种Java客户端性能测试实践
我之前分享了Java和Go语言版本的gRPC接口的服务端和客户端的开发,使用的基本都是基础的原声API,旧文如下: Grpc服务开发和接口测试初探【Java】 2022-04-20 gRPC服务开发和接口...【详细内容】
2022-07-07  Search: gRPC  点击:(263)  评论:(0)  加入收藏
▌简易百科推荐
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  vivo互联网技术    Tags:Java 8   点击:(18)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20    51CTO  Tags:Java代码   点击:(25)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18    51CTO  Tags:Java   点击:(34)  评论:(0)  加入收藏
Java生产环境下性能监控与调优详解
堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,...【详细内容】
2024-02-04  大雷家吃饭    Tags:Java   点击:(63)  评论:(0)  加入收藏
在项目中如何避免和解决Java内存泄漏问题
在Java中,内存泄漏通常指的是程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被垃圾回收器回收,最终导致内存占用不断增加,进而影响程序的性...【详细内容】
2024-02-01  编程技术汇  今日头条  Tags:Java   点击:(78)  评论:(0)  加入收藏
Java中的缓存技术及其使用场景
Java中的缓存技术是一种优化手段,用于提高应用程序的性能和响应速度。缓存技术通过将计算结果或者经常访问的数据存储在快速访问的存储介质中,以便下次需要时可以更快地获取。...【详细内容】
2024-01-30  编程技术汇    Tags:Java   点击:(78)  评论:(0)  加入收藏
JDK17 与 JDK11 特性差异浅谈
从 JDK11 到 JDK17 ,Java 的发展经历了一系列重要的里程碑。其中最重要的是 JDK17 的发布,这是一个长期支持(LTS)版本,它将获得长期的更新和支持,有助于保持程序的稳定性和可靠性...【详细内容】
2024-01-26  政采云技术  51CTO  Tags:JDK17   点击:(100)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  大雷家吃饭    Tags:Java   点击:(111)  评论:(0)  加入收藏
这篇文章彻底让你了解Java与RPA
前段时间更新系统的时候,发现多了一个名为Power Automate的应用,打开了解后发现是一个自动化应用,根据其描述,可以自动执行所有日常任务,说的还是比较夸张,简单用了下,对于office、...【详细内容】
2024-01-17  Java技术指北  微信公众号  Tags:Java   点击:(108)  评论:(0)  加入收藏
Java 在 2023 年仍然流行的 25 个原因
译者 | 刘汪洋审校 | 重楼学习 Java 的过程中,我意识到在 90 年代末 OOP 正值鼎盛时期,Java 作为能够真正实现这些概念的语言显得尤为突出(尽管我此前学过 C++,但相比 Java 影响...【详细内容】
2024-01-10  刘汪洋  51CTO  Tags:Java   点击:(82)  评论:(0)  加入收藏
站内最新
站内热门
站内头条