在介绍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

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

什么是 gRPC ?相关推荐

  1. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  2. etcd 笔记(04)— etcd 网关与 gRPC 网关

    1. etcd 网关 etcd 网关是一个简单的 TCP 代理,可将网络数据转发到 etcd 集群.网关是无状态且透明的,它既不会检查客户端请求,也不会干扰集群响应,支持多个 etcd 服务器实例,并 ...

  3. php 长连接心跳_支持gRPC长链接,深度解读Nacos2.0架构设计及新模型

    作者 | 杨翊(席翁) Nacos PMC 来源|阿里巴巴云原生公众号 Nacos 简介 Nacos 在阿里巴巴起源于 2008 年五彩石项目,该项目完成了微服务拆分和业务中台建设,随着云计算和开源环 ...

  4. grpc 传递上下文_grpc 源码笔记 02:ClientConn

    上篇笔记中梳理了一把 resolver 和 balancer,这里顺着前面的流程走一遍入口的 ClientConn 对象. ClientConn // ClientConn represents a ...

  5. SpringBoot整合Grpc实现跨语言RPC通讯

    什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行.它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查 ...

  6. gRPC简介及简单使用(C++)

    gRPC是一个现代的.开源的.高性能远程过程调用(RPC)框架,可以在任何平台运行.gRPC使客户端和服务器端应用程序能够透明地进行通信,并简化了连接系统的构建.gRPC支持的语言包括C++.Ruby ...

  7. 在Windows和Linux上编译gRPC源码操作步骤(C++)

    gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...

  8. 支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者 | 杨翊(席翁)  Nacos PMC Nacos ...

  9. Gonet2 游戏server框架解析之gRPC提高(5)

    上一篇blog是关于gRPC框架的基本使用,假设说gRPC仅仅是远程发几个參数,那和一个普通的http请求也没多大区别了. 所以今天我就来学习一下gRPC高级一点的用法. 流! 流能够依据用法,分为单 ...

  10. 【Networking】gRPC golang 相关资料

    参考资料: Golang gRPC 示例:  http://www.cnblogs.com/YaoDD/p/5504881.html grpc golang学习心得(1)----安装与测试:   ht ...

最新文章

  1. 送书 | 深入浅出,一起学习贝叶斯!
  2. java操作js文件_JS操作文件
  3. wxWidgets:wxPlatformInfo类用法
  4. How to Fix an App that Crashes in Release but n...
  5. vue组件 Prop传递数据
  6. 穿戴式设备的用户体验设计-郝华奇
  7. nuxt express mysql_用Express+Nuxt从零开始写一个SSR博客
  8. 24点游戏java代码 中国开源社区_编程之美 1.16 24点游戏
  9. win安装 lua php 扩展,window平台搭建Lua开发环境
  10. Java虚拟机 --- 内存区域
  11. 这三个博弈论新趋势,正深刻影响深度强化学习道翰天琼认知智能未来机器人接口API
  12. 系统清理软件测试,系统垃圾清理有用吗?六大清理工具评测
  13. anaconda 修复快捷方式
  14. linux设备/dev/dsp,/dev/mixer
  15. 北京划定63处禁止开发区域 总面积逾3千平方公里 (zz)
  16. 由于您的系统没有安装html help,win10遇到“您未安装FLASH控件”的提示怎么办
  17. php违章查询源码,ThinkPHP聚合数据违章查询接口
  18. 手把手教你爬取任意日期全部股票分时数据~
  19. Keil软件的方波仿真
  20. 如何进行用户行为分析

热门文章

  1. HTML行内元素、块状元素和行内块状元素的区分
  2. docker学习5--docker数据卷(volume)
  3. Spring与Web整合
  4. Web 安全与 Rational AppScan 入门
  5. 转载:页面滚动条处理
  6. 关于H5跳转到小程序和android的方法
  7. oracle日常维护(不断更新)
  8. pycharm (二)
  9. 论富客户端程序的webservice实现
  10. 向域管理转型所遇到的问题