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

什么是 gRPC ?

作者头像
KevinYan
发布2021-10-14 16:14:41
2K0
发布2021-10-14 16:14:41
举报
文章被收录于专栏:网管叨bi叨网管叨bi叨

在介绍gRPC之前我们先了解下什么是RPC

什么是 RPC?

RPCRemote Procedure Call的简称,中文叫远程过程调用。

说的白话一点,可以这么理解:现在有两台服务器A和B。部署在A服务器上的应用,想调用部署在B服务器上的另一个应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来达到调用的效果。

现在,我们在A服务的一个本地方法中封装调用B的逻辑,然后只需要在本地使用这个方法,就达到了调用B的效果。

对使用者来说,屏蔽了细节。你只需要知道调用这个方法返回的结果,而无需关注底层逻辑。

那,从封装的那个方法角度来看,调用B之前我们需要知道什么?

当然是一些约定啊。比如,

  • 调用的语义,也可以理解为接口规范。(比如RESTful)
  • 网络传输协议 (比如HTTP)
  • 数据序列化反序列化规范(比如JSON)。

有了这些约定,我就知道如何给你发数据,发什么样的数据,你返回给我的又是什么样的数据。

img

从上图中可以看出,RPC是一种客户端-服务端(Client/Server)模式。

从某种角度来看,所有本身应用程序之外的调用都可以归类为RPC。无论是微服务、第三方HTTP接口,还是读写数据库中间件MysqlRedis

HTTP 和 RPC 有什么区别?

我之前也问个这个问题。

首先这个问题本身不太严谨。

HTTP只是一个通信协议,工作在OSI第七层。

RPC是一个完整的远程调用方案。它包含了:接口规范、传输协议、数据序列化反序列化规范。

这样看,RPCHTTP的关系只可能是包含关系。为什么是可能?因为RPC传输协议那块我可以不基于HTTP呀。

所以这个问题应该改成:基于HTTP的远程调用方案 (如:HTTP+RESTful+JSON) 和直接使用RPC远程调用方案有什么区别?

RPC 和 gRPC 有什么关系?

gRPC是由 google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多数流行的编程语言。

gRPC基于 HTTP/2协议传输。而HTTP/2相比HTTP1.x,有以下一些优势:

用于数据传输的二进制分帧

HTTP/2采用二进制格式传输协议,而非HTTP/1.x的文本格式。

img

多路复用

HTTP/2支持通过同一个连接发送多个并发的请求。

HTTP/1.x虽然通过pipeline也能并发请求,但多个请求之间的响应依然会被阻塞。

img

服务端推送

服务端推送是一种在客户端请求之前发送数据的机制。在HTTP/2中,服务器可以对客户端的一个请求发送多个响应。而不像HTTP/1.X一样,只能通过客户端发起request,服务端才产生对应的response

减少网络流量的头部压缩。

HTTP/2对消息头进行了压缩传输,能够节省消息头占用的网络流量。至于如何压缩的,可以查看这篇:HPACK: Header Compression for HTTP/2[1]

同时gRPC使用Protocol Buffers作为序列化协议。关于Protocol Buffers。官网有一句介绍:

Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler.

它是一种与语言、平台无关 、可扩展的序列化结构数据。它的定位类似于JSONXML,但是比他们更小、更快、更简单。更多关于Protocol Buffers介绍,我下一篇再写。

gRPC 是如何进行远程调用的?

官网有一张图:

img

从上图和文档中可以看出,用gRPC来进行远程调用服务,客户端(client) 仅仅需要gRPC Stub(为啥叫存根?) ,通过Proto RequestgRPC Server发起服务调用,然后 gRPC Server通过Proto Response(s)将调用结果返回给调用的client

至于上面这段逻辑gRPC里面做了啥,有哪些调用方式,介绍完pb再写。

总结

第一篇文章主要介绍了RPC是什么,以及一些gRPC的基础概念。

参考

  • https://grpc.io/docs/what-is-grpc/introduction/
  • https://httpwg.org/specs/rfc7541.html [1]
  • https://www.upyun.com/tech/article/227/1.html?utm_source=zhihu&utm_medium=referral&utm_campaign=202831825&utm_term=http2
  • https://www.zhihu.com/question/34074946

如果文章对你有所帮助,点赞、转发、留言都是一种支持!

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

本文分享自 网管叨bi叨 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 RPC?
  • HTTP 和 RPC 有什么区别?
    • RPC 和 gRPC 有什么关系?
      • 用于数据传输的二进制分帧
        • 多路复用
          • 服务端推送
            • 减少网络流量的头部压缩。
            • gRPC 是如何进行远程调用的?
              • 总结
                • 参考
                相关产品与服务
                文件存储
                文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档