百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

gRPC入门知识(grpc实战)

ccwgpt 2024-10-13 01:31 52 浏览 0 评论

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年代的ARPANET时代起,它就已经用于执行网络操作。 RPC一词最早由布鲁斯·杰伊·尼尔森(Bruce Jay Nelson)于1981年提出。但是,正如我们将要看到的,RPC仍然很重要,并以不同的方式在基于API的现代应用程序中实现。

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

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

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

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

什么是gRPC?

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

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

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

REST与gRPC

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

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

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


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

相关推荐

十分钟让你学会LNMP架构负载均衡(impala负载均衡)

业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...

AGV仓储机器人调度系统架构(agv物流机器人)

系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...

远程热部署在美团的落地实践(远程热点是什么意思)

Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...

springboot搭建xxl-job(分布式任务调度系统)

一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...

大模型:使用vLLM和Ray分布式部署推理应用

一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...

国产开源之光【分布式工作流调度系统】:DolphinScheduler

DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...

简单可靠高效的分布式任务队列系统

#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...

虚拟服务器之间如何分布式运行?(虚拟服务器部署)

  在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...

一文掌握 XXL-Job 的 6 大核心组件

XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...

京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?

京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...

企业级项目组件选型(一)分布式任务调度平台

官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...

python多进程的分布式任务调度应用场景及示例

多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...

SpringBoot整合ElasticJob实现分布式任务调度

介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...

分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...

SpringBoot任务调度:@Scheduled与TaskExecutor全面解析

一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...

取消回复欢迎 发表评论: