前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初探gRPC

初探gRPC

作者头像
会呼吸的Coder
发布2023-03-03 19:33:30
5170
发布2023-03-03 19:33:30
举报
文章被收录于专栏:会呼吸的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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档