gRpc
一、简介
1、gprc概念
gRpc是有google开源的一个高性能的pc框架,Stubby google内部的rpc,2015年正式开源,云原生时代一个RPC标准。
tips:异构系统,就是不同编程语言的系统。
2、grpc核心设计思路
grpc核心设计思路
1. 网络通信 --> grpc自己封装网络通信的部分,提供多种语言的网络通信的封装(java(netty),c,go)的支持异构语言。
2. 协议 --> http2协议,传输数据,支持二进制。支持双向流(双工)。连接的多路复用(NIO)
3. 序列化 --> 基于文本Json,基于二进制(java原生序列化方式,Thrift二进制序列化,压缩二进制序列化)
protobuf(protocol buffers)google开源的一种序列化方式。
dubbo也可以用protobuf。 时间效率和空间效率是Json的3---5倍。
定义了一套,IDL语言。
4.代理的创建 --> 让调用者像调用本地方法那样,去调用远端的服务方法一样。
stub.
3、gRpc和protobuf的区别
grpc是rpc框架。
protobuf是一种序列化方式
4、gRpc与ThrifRpc区别
共性:支持异构语言的 RPC
区别:
1. 网络通信 Trift TCP 专属协议
grpc http2
2. 性能角度,thrift Rpc效率高于gRpc.
3. gRpc 大厂背书(google),云原生时代 合作更好 集成更多,所以grpc应用更广泛
5、gRpc的好处
-
高效的进行进程间通信。
-
支持多种语言 。原生支持,C GO Java实现。c语言版本上扩展,c++,c#,node JS,python,ruby,php (二等公民)
-
支持多平台运行。 Linux Andriod IOS MacOS Windows
-
gRpc序列化方式采用protobuf,效率高
-
使用http2协议
-
大厂背书
二、http2.0协议
1、回顾 http1.x 协议
1.1、http1.0 协议
1.2、http1.1 协议
1.3、总结http1.x协议特性:
2、HTTP2.0协议
-
Http2.0协议是一个二进制协议,效率高于Http1.x协议,可读性差。
-
可以实现双工通信
-
一个连接可以请求多个数据。【多路复用】
3、HTTP2.O协议的三个概念
-
数据流 Stream
-
消息 message
-
帧 frame
一个连接,有多个数据流。Stream.
3.1、requestMessage
一个数据流,有request Message.
Message,里面有frame.
第一个frame,对应的就是header。
-
method:post
-
version:http2.0
-
user-agent:chrome
第二个frame,是body
如果get,就是一个frame帧。没有data,body。
3.1、responseMessage
第一个frame,对应的就是head。
-
status: 200
-
version:http2.0
第二个frame,是body
4、其他的相关概念
4.1、数据流的优先级
-
数据流的优先级:可以为不同的Stream设置权重,来限制不同流的顺序。
-
流控:client发送数据太快了,server处理不过来,通知client暂停数据的发送。
三、Protocol Buffers [protobuf]
1、简介
-
protobuf是一种与编程语言无关【IDL】,与具体的平台无关【OS】。他定义的中间语言,可以方便,在Client和server之间进行RPC的数据传输。
-
protobuf
目前主流应用的都是protobuf3.
-
protobuf主要安装protobuf的编译器,编译器目的,可以把protobuf的IDL语言,转换成具体某一种开发语言。
2、protobuf编译器安装
github上.
https://www.github.com/protocolbuffers/protobuf/releases
建议,64位,v3.19.6,是一个exe文件。
windows版本
1.直接解压缩,放置在一个特定的目录下面
2.直接配置环境变量 path
protoc --version
mac版本
brew install protobuf
3、protobuf IDEA插件
IDEA 新版本。原生支持,protocol Buffers.
-
2021.2版本后面的新版本,IDEA内置了Protobuf插件,和gRPC插件,都是默认勾选的。
-
2021.2版本之前的老版本,可以选装第三方protobuf插件。
-
二者不能共存