• gRpc入门


    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的好处

    1. 高效的进行进程间通信。

    1. 支持多种语言 。原生支持,C GO Java实现。c语言版本上扩展,c++,c#,node JS,python,ruby,php (二等公民)

    1. 支持多平台运行。 Linux Andriod IOS MacOS Windows

    2. gRpc序列化方式采用protobuf,效率高

    3. 使用http2协议

    4. 大厂背书

    二、http2.0协议

    1、回顾 http1.x 协议

    1.1、http1.0 协议

    • 请求响应的模式。

    • 短连接协议(无状态协议)。建立在tcp(长连接)上的,http主动断开连接(之前设备不好,主动断开)。

    • 传输数据文本结构

    • 单工,无法实现服务端推送。

      • 变相实现服务推送,(采用客户端轮询)

    1.2、http1.1 协议

    • 请求相应的模式

    • 有限的长连接(保持一段时间)

    • 只能通过升级的方式,websocket协议,实现服务器想客户端推送。不属于http1.1的能力

    1.3、总结http1.x协议特性:

    • 传输数据文本格式,可读性好但是效率差。

    • 本质上http1.x协议,无法实现双工通信。

    • 资源的请求。需要发送多次请求,建立多个连接才可以完成。分流(静态资源分离,cdn缓存加速)

    2、HTTP2.0协议

    1. Http2.0协议是一个二进制协议,效率高于Http1.x协议,可读性差。

    2. 可以实现双工通信

    3. 一个连接可以请求多个数据。【多路复用】

    3、HTTP2.O协议的三个概念

    1. 数据流 Stream

    2. 消息 message

    3. 帧 frame

    一个连接,有多个数据流。Stream.

    3.1、requestMessage

    一个数据流,有request Message.

    Message,里面有frame.

    第一个frame,对应的就是header。

    • method:post

    • version:http2.0

    • user-agent:chrome

    第二个frame,是body

    • data

    如果get,就是一个frame帧。没有data,body。

    3.1、responseMessage

    第一个frame,对应的就是head。

    • status: 200

    • version:http2.0

    第二个frame,是body

    • response数据

    4、其他的相关概念

    4.1、数据流的优先级

    1. 数据流的优先级:可以为不同的Stream设置权重,来限制不同流的顺序。

    2. 流控:client发送数据太快了,server处理不过来,通知client暂停数据的发送。

    三、Protocol Buffers [protobuf]

    1、简介

    1. protobuf是一种与编程语言无关【IDL】,与具体的平台无关【OS】。他定义的中间语言,可以方便,在Client和server之间进行RPC的数据传输。

    2. protobuf

      • protobuf 2

      • protobuf 3

      目前主流应用的都是protobuf3.

    1. 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.

    1. 2021.2版本后面的新版本,IDEA内置了Protobuf插件,和gRPC插件,都是默认勾选的。

    1. 2021.2版本之前的老版本,可以选装第三方protobuf插件。

    1. 二者不能共存

  • 相关阅读:
    易基因|DNA-蛋白质互作的检测技术及ChIP-seq实验关键 | 易讲堂
    SpringBoot整合Mybatis(使用c3p0数据源)
    Oracle 坏块及修复
    【面试题】手撕缓存LRU
    Java入门第106课——测试集合持有对象
    TCP/IP(七)TCP的连接管理(四)全连接
    非线性优化求解ICP实例
    ELK日志分析系统实战
    ​LeetCode解法汇总2678. 老人的数目
    1110 区块反转分数 25
  • 原文地址:https://blog.csdn.net/qq_33472553/article/details/132695352