什么是 gRPC ?
在介绍gRPC
之前我们先了解下什么是RPC
。
什么是 RPC?
RPC
是Remote Procedure Call
的简称,中文叫远程过程调用。
说的白话一点,可以这么理解:现在有两台服务器A和B。部署在A服务器上的应用,想调用部署在B服务器上的另一个应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来达到调用的效果。
现在,我们在A服务的一个本地方法中封装调用B的逻辑,然后只需要在本地使用这个方法,就达到了调用B的效果。
对使用者来说,屏蔽了细节。你只需要知道调用这个方法返回的结果,而无需关注底层逻辑。
那,从封装的那个方法角度来看,调用B之前我们需要知道什么?
当然是一些约定啊。比如,
调用的语义,也可以理解为接口规范。(比如
RESTful
)网络传输协议 (比如
HTTP
)数据序列化反序列化规范(比如
JSON
)。
有了这些约定,我就知道如何给你发数据,发什么样的数据,你返回给我的又是什么样的数据。
从上图中可以看出,RPC
是一种客户端-服务端(Client/Server
)模式。
从某种角度来看,所有本身应用程序之外的调用都可以归类为RPC
。无论是微服务、第三方HTTP
接口,还是读写数据库中间件Mysql
、Redis
。
HTTP 和 RPC 有什么区别?
我之前也问个这个问题。
首先这个问题本身不太严谨。
HTTP
只是一个通信协议,工作在OSI
第七层。
而RPC
是一个完整的远程调用方案。它包含了:接口规范、传输协议、数据序列化反序列化规范。
这样看,RPC
和 HTTP
的关系只可能是包含关系。为什么是可能?因为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
的文本格式。
多路复用
HTTP/2
支持通过同一个连接发送多个并发的请求。
而HTTP/1.x
虽然通过pipeline
也能并发请求,但多个请求之间的响应依然会被阻塞。
服务端推送
服务端推送是一种在客户端请求之前发送数据的机制。在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.
它是一种与语言、平台无关 、可扩展的序列化结构数据。它的定位类似于JSON
、XML
,但是比他们更小、更快、更简单。更多关于Protocol Buffers
介绍,我下一篇再写。
gRPC 是如何进行远程调用的?
官网有一张图:
从上图和文档中可以看出,用gRPC来进行远程调用服务,客户端(client
) 仅仅需要gRPC Stub
(为啥叫存根?) ,通过Proto Request
向gRPC 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 ?相关推荐
- RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例
1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...
- etcd 笔记(04)— etcd 网关与 gRPC 网关
1. etcd 网关 etcd 网关是一个简单的 TCP 代理,可将网络数据转发到 etcd 集群.网关是无状态且透明的,它既不会检查客户端请求,也不会干扰集群响应,支持多个 etcd 服务器实例,并 ...
- php 长连接心跳_支持gRPC长链接,深度解读Nacos2.0架构设计及新模型
作者 | 杨翊(席翁) Nacos PMC 来源|阿里巴巴云原生公众号 Nacos 简介 Nacos 在阿里巴巴起源于 2008 年五彩石项目,该项目完成了微服务拆分和业务中台建设,随着云计算和开源环 ...
- grpc 传递上下文_grpc 源码笔记 02:ClientConn
上篇笔记中梳理了一把 resolver 和 balancer,这里顺着前面的流程走一遍入口的 ClientConn 对象. ClientConn // ClientConn represents a ...
- SpringBoot整合Grpc实现跨语言RPC通讯
什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行.它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查 ...
- gRPC简介及简单使用(C++)
gRPC是一个现代的.开源的.高性能远程过程调用(RPC)框架,可以在任何平台运行.gRPC使客户端和服务器端应用程序能够透明地进行通信,并简化了连接系统的构建.gRPC支持的语言包括C++.Ruby ...
- 在Windows和Linux上编译gRPC源码操作步骤(C++)
gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...
- 支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者 | 杨翊(席翁) Nacos PMC Nacos ...
- Gonet2 游戏server框架解析之gRPC提高(5)
上一篇blog是关于gRPC框架的基本使用,假设说gRPC仅仅是远程发几个參数,那和一个普通的http请求也没多大区别了. 所以今天我就来学习一下gRPC高级一点的用法. 流! 流能够依据用法,分为单 ...
- 【Networking】gRPC golang 相关资料
参考资料: Golang gRPC 示例: http://www.cnblogs.com/YaoDD/p/5504881.html grpc golang学习心得(1)----安装与测试: ht ...
最新文章
- 送书 | 深入浅出,一起学习贝叶斯!
- java操作js文件_JS操作文件
- wxWidgets:wxPlatformInfo类用法
- How to Fix an App that Crashes in Release but n...
- vue组件 Prop传递数据
- 穿戴式设备的用户体验设计-郝华奇
- nuxt express mysql_用Express+Nuxt从零开始写一个SSR博客
- 24点游戏java代码 中国开源社区_编程之美 1.16 24点游戏
- win安装 lua php 扩展,window平台搭建Lua开发环境
- Java虚拟机 --- 内存区域
- 这三个博弈论新趋势,正深刻影响深度强化学习道翰天琼认知智能未来机器人接口API
- 系统清理软件测试,系统垃圾清理有用吗?六大清理工具评测
- anaconda 修复快捷方式
- linux设备/dev/dsp,/dev/mixer
- 北京划定63处禁止开发区域 总面积逾3千平方公里 (zz)
- 由于您的系统没有安装html help,win10遇到“您未安装FLASH控件”的提示怎么办
- php违章查询源码,ThinkPHP聚合数据违章查询接口
- 手把手教你爬取任意日期全部股票分时数据~
- Keil软件的方波仿真
- 如何进行用户行为分析