首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >初探gRPC

初探gRPC

作者头像
会呼吸的Coder
发布于 2023-03-03 11:33:30
发布于 2023-03-03 11:33:30
6151
举报
文章被收录于专栏:会呼吸的Coder会呼吸的Coder

背景

随着微服务框架和云原生框架的出现,传统的单体应用程序被分解为一组细粒度的、自治的和面向业务能力的微服务,网络通信链路的数量激增,服务间的通信技术也因此成为了现代分布式系统中至关重要的一个环节。

目前,我们在应用开发中,最常用的通信方式是构建一个ResutFul服务,通过http协议进行服务调用,然后再比较多的场景下,restful服务对于构建进程间通信来讲过于庞大,低效并且容易出错,因为需要一个比restful服务更高效的高可扩展,松耦合的进程间通信技术,隐藏,诞生了gRPC,一种用于构建分布式应用程序和微服务的现代进程通信方式。

什么是gRPC

gRPC是一种进程间通信技术。在 gRPC 中,客户端可以直接调用不同机器上的服务端的方法,就像调用本地函数一样。

与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的接口及其参数和返回类型。服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用。而客户端有一个stub(在某些语言中也称为client),它提供与服务器相同的方法。客户端通过调用stub的方法来与服务端进行通信,获取响应结果。

下图为开发gRPC应用的一个示例:

  1. 首先,需要定义一个服务接口,定义了包含有关客户端如何使用你的服务,允许客户端调用方法等等一系列的信息,一般是通过protocol buffer来定义服务接口的。
  2. 定义好接口之后,可以使用protoc工具生成服务端代码,它通过提供低价🧑🎓抽象来简化服务端逻辑,另外,还可以生成客户端代码(client stub),它通过抽象来简化客户端通讯,以隐藏不同编程语言的低级通信。
  3. 客户端使用你在服务接口定义中指定的方法来进行远程调用,就像进行本地函数调用一样简单。底层 gRPC 框架会自动帮你处理数据序列化、网络通信、身份验证、访问控制、可观察性等远程通信相关的所有复杂的工作。

gRPC的优点:

  1. 实现的进程间通信方式高效。gRPC 不使用 JSON等文本格式,而是使用基于二进制协议的protocol buffer进行通信。此外,gRPC 是在 HTTP/2 之上实现的protocol buffer,这使得进程间通信更快。
  2. 具有简单、定义良好的服务接口和协议。你首先定义服务接口,然后处理实现细节。因此,与用于RESTful服务定义的 OpenAPI/Swagger不同,gRPC 提供了简单但一致、可靠且可扩展的应用程序开发体验。
  3. 强类型。protocol buffer清楚地定义了应用程序之间通信的数据类型,这使得分布式应用程序开发更加稳定。因为静态类型有助于减少你在构建跨多个团队和技术的云原生应用程序时遇到的大多数运行交互错误。
  4. 支持多语言。gRPC被设计成支持多种编程语言。使用protocol buffer的服务定义与语言无关。因此,你可以选择grpc支持的任意语言,并与任何现有的 gRPC 服务或客户端进行通信。
  5. 支持双向流式传输。gRPC 对客户端或服务器端流式传输具有原生支持,这使得开发流媒体服务或流媒体客户端变得更加容易。
  6. 内置多种高级特性。gRPC 提供对高级特性的内置支持,例如身份验证、加密、元数据交换、压缩、负载平衡、服务发现等。

gRPC的缺点:

  1. 不适合面向外部的服务,当向外部客户端使用时,可能不是最合适的协议,因为目前gRPC还没有广泛的流传,而且,协议驱动和强类型化等特性会降低对外提供服务的灵活性。
  2. 生态系统相对较小。与传统的 REST/HTTP 协议相比,gRPC 生态系统仍然相对较小。浏览器和移动应用程序对 gRPC 的支持仍处于初级阶段。

gRPC的四种消息流

·gRPC 支持四种通信模式,分别是简单 RPC、服务端流式 RPC、客户端流式 RPC 和双向流式 RPC。

简单RPC

在简单的 RPC 中,在 gRPC server端和 gRPC client端之间的通信总是一个请求对应一个响应。

服务端流式 RPC

从client端的角度来看,简单 RPC 和服务端流式 RPC 具有相同的请求消息流。在这两种情况下,我们都会发送一条请求消息。主要区别在于server端。server端会发送多条消息,而不是向client端发送一条响应消息。

客户端流式 RPC

在客户端流式 RPC 中,client端向server端发送多条消息,server端发送一条响应消息作为回复。

双向流式 RPC

在此模式中,client端通过发送请求头帧来建立连接。一旦建立连接,client端和server端都可以直接发送多个长度前缀消息,而无需等待对方完成。双方都可以自主结束连接,这意味着他们不能再发送任何消息。

总结

gRPC 建立在两个快速高效的协议之上,称为protocol buffer和 HTTP/2。protocol buffer是一种数据序列化协议,它是一种与语言无关、平台中立和可扩展的结构化数据序列化方法。序列化后,此协议会生成一个比普通 JSON 数据更小的二进制强类型数据。之后,这个序列化后的二进制数据会通过称为 HTTP/2 的二进制传输协议进行传输。

HTTP/2 是互联网协议 HTTP 的下一个主要版本。HTTP/2 是完全多路复用的,这意味着 HTTP/2 可以通过单个 TCP 连接并行发送多个数据请求。这使得用 HTTP/2 编写的应用程序比其他应用程序更快、更简单、更健壮。

所有这些因素使 gRPC 成为一个高性能的 RPC 框架。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 初级程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
你好,请问下 grpc的配置中 address的配置 用dns的方式配置,怎么实现多个dns地址域名的配置呢
你好,请问下 grpc的配置中 address的配置 用dns的方式配置,怎么实现多个dns地址域名的配置呢
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
深入了解grpc(一):grpc介绍
随着微服务架构和云原生架构的出现,传统的单体应用程序被分解为一组细粒度的、自治的和面向业务能力的“微服务”,网络通信链路的数量激增,进程间(或服务间/应用程序间)通信技术也因此成为了现代分布式系统中至关重要的一个环节。
_94886_860
2022/09/12
9.2K0
深入了解grpc(一):grpc介绍
gRPC 简介实践
现代的软件服务大多数是分布式应用程序,通过暴露自己的 API 对内或对外提供了一系列的功能点。服务与服务之间有时是跨语言、跨平台通信的。
lincoln
2022/03/08
7190
gRPC 简介实践
ASP.NET Core 使用 gRPC 初探
为什么突然说到gRPC呢,其实以前就想说一说这个东西,也想尝试使用一下,一直没有机会,一直看我公众号的小伙伴肯定都知道,这几天一直在录制一个《eShopOnContainer微服务架构》系列,现在已经是8期了,里边涵盖了使用ASP.NETCore开发微服务的常用的基本的知识技能,具体的你可以看我的视频就行,B站也同步更新。
老张的哲学
2022/04/11
1.7K0
ASP.NET Core 使用 gRPC 初探
【知识】RPC和gRPC
RPC(Remote Procedure Call,远程过程调用) 是一种进程间通信协议。它允许程序调用另一台机器(或同一台机器的其他进程)上的函数/过程,好像在调用本地函数一样,隐藏了网络通信的细节。
小锋学长生活大爆炸
2025/07/04
3400
.NetCore3.1 gRPC 实战
gRPC(Remote procedure call)是google开源的网络通讯框架;同时也是Cloud Native Computation基金会下的产品。本文章的项目源码会在结尾的联系方式中找到。
JusterZhu
2022/12/07
1.4K0
.NetCore3.1 gRPC 实战
.NET领域最硬核的gRPC 核心能力一把梭
有关grpc更深层次的前世今生、底层原理、困惑点释疑请听下回分解, 欢迎菜鸟老鸟们提出宝贵意见。
有态度的马甲
2024/01/19
5410
.NET领域最硬核的gRPC 核心能力一把梭
ASP.NET Core 3.0 使用gRPC
gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架。 gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建。它使用HTTP/2作为通信协议,使用 Protocol Buffers 作为序列化协议。
梁规晓
2019/09/26
8320
ASP.NET Core 3.0 使用gRPC
GRPC知识总结
第一次接触到grpc,套用官网的话:A high-performance, open-source universal RPC framework;这里的RPC即:remote procedure call
诗和元芳
2024/05/24
2640
潜力无限:深入探索 gRPC 的奇妙世界
曾经,我们在构建分布式系统时总是不得不面对繁琐的网络通信问题。然而,随着gRPC的崛起,这个问题似乎变得不再那么棘手。就像一位神奇的通信大师,gRPC为我们打开了通往分布式系统新世界的大门。让我们一起揭开这扇门背后的奇妙秘密吧!
一只牛博
2025/05/30
2250
用Golang构建gRPC服务
继续之前,请确保你已经对gRPC概念有所了解,并且熟悉protocol buffer。需要注意的是教程中的示例使用的是 proto3版本的protocol buffer:你可以在Protobuf语言指南与Protobuf生成Go代码指南中了解到更多相关知识。
KevinYan
2019/10/13
2.2K0
聊聊高性能 RPC框架 gRPC
RPC、gRPC、Thrift、HTTP,大家知道它们之间的联系和区别么?这些都是面试常考的问题,今天带大家先搞懂 RPC 和 gRPC。
码猿技术专栏
2023/05/01
2.1K0
聊聊高性能 RPC框架 gRPC
gRPC-shop:什么是 gRPC(一)
在正式写grpc-shop之前,我们需要先花几篇文章介绍一些基础概念。 在介绍gRPC之前我们先了解下什么是RPC。
RememberGo
2021/08/25
7520
什么是 gRPC ?
说的白话一点,可以这么理解:现在有两台服务器A和B。部署在A服务器上的应用,想调用部署在B服务器上的另一个应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来达到调用的效果。
KevinYan
2021/10/14
2.4K0
什么是 gRPC ?
1.gRPC 入门解惑
gRPC(gRPC Remote Procedure Call)是一种高性能、开源的远程过程调用(RPC)框架。它允许分布在不同计算机上的应用程序能够像调用本地方法一样进行通信,从而实现了在分布式系统中进行高效的通信。
AI码师
2023/09/11
5350
1.gRPC 入门解惑
聊聊gRPC的特性和背后设计的原则(一)
开一个gRPC学习的专题,感兴趣的一起参与,一周一篇,下一篇聊聊protocol buffer 什么是gRPC? RPC全称(Remote Procedure Call),远程过程调用,指的是一台计算机通过网络请求另一台计算机的上服务,从而不需要了解底层网络细节,RPC是构建在已经存在的协议(TCP/IP,HTTP等)之上的,RPC采用的是客户端,服务器模式。 gRPC是云原生计算基金会(CNCF)项目, gRPC 一开始由 google 开发,是一款语言中立、平台中立的服务间通信框架,使用gRPC可以使得
阿伟
2019/08/13
3.5K0
.NET gRPC核心功能初体验
gRPC是高性能的RPC框架, 有效地用于服务通信(不管是数据中心内部还是跨数据中心)。
有态度的马甲
2021/03/12
2K0
.NET gRPC核心功能初体验
gRPC基本教程
•在.proto文件中定义一个服务。•使用协议缓冲编译器生成服务器和客户端代码。•使用Go gRPC API编写一个简单的服务端和客户端。
孟斯特
2023/10/16
9570
[799]python grpc
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
周小董
2020/05/12
1K0
Go语言入门篇-gRPC基于golang & java简单实现
server端stub又被称为skeleton(骨架)。可以理解为代理类。而实际上基于Java的RPC框架stub基本上也都是使用动态代理。
用户7798898
2020/09/27
1.6K0
Go语言入门篇-gRPC基于golang & java简单实现
Grpc 跨语言远程调用 python
gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
py3study
2020/01/09
3.8K0
相关推荐
深入了解grpc(一):grpc介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档