• gRPC的使用①


    gRPC简介

    grpc来着google,是开源的,同时也是cloud native computation基金会一部分。

    grpc允许你你以rpc定义请求响应,然后grpc会帮你处理一切问题。

    它的速度很快,执行效率很高,基于http/2构建,第一案是,支持流,其他开发语言,并且可以很简单插入身份认证,负载均衡,日志等。

    学习grpc需要先学习Protocol buffers,他是定义消息和服务,然后只需要实现服务即可,剩下的grpc代码会自动生成。

    .proto这个文件可以适用于十几种开发语言,并且允许你适用用一个框架支持百万级的rpc调用

    开发模式

    grpc适用合约优先的api开发模式,他默认适用protocol buffers (protobuf) 作为接口设计语言,

    这个.proto这文件包括两部分:

    grpc服务定义

    服务端和客户端消息的传递

    Protoct Buffer

    开发环境:vscode插件:vscode-proto3和Clang-Format这两个插件

    window还需要安装Clang,window64系统https://releases.llvm.org/

     

     

     一个简单的proto:

    syntax="proto3";
    
    message FirstMessage{
        int32 id=1;
        string name =2;
        bool is_male=3;
    }

    Protocol buffers里面,字段名称其实没有那么重要,但是编译成使用的语言就比较重要了

    对于proto来说,tag更重要

    tag:最小是1,最大是2的29次方-1会,或者536870911,但是不能使用19000到19999,这部分保留。

    从1到15占一个字节,用在频繁的字段;16到2047占两个字节,用在不频繁字段。

    字段规则:

    单数字段:这个字段只能出现0-1次。

    重复字段:与singular相对repeated,作一个list或者数组,你可以重复这个字段。

    一个例子:

    person:

    syntax="proto3";//协议使用
    
    import "date.proto";//导入需要的date
    
    package my.project;//打包,避免名称冲突
    
    
    message Person{
        int64 id=1;
        string name=2;
        float height=3;
        float weight=4;
        bytes avatar=5;
        string email=6;
        bool email_verified=7;
        Date birthday=12;
    
        repeated string phone_number=8;//packed
    
        reserved 9,10,20 to 100;
        reserved "foo","bar";
    
        enum Gender{
            NOT_SPECIFIED=0;
            FEMALE=1;
            MALE=2;
        }
    }

    date:

    syntax="proto3";
    
    message Date{
        int64 year=1;
        int64 month=2;
        int64 day=3;
    }

    之后编译需要去安装proto编译器:https://github.com/protocolbuffers/protobuf/releases

    安装好后,需要配置环境变量在path上指向proto的exe;

    最后cmd:protoc

     说明安装好了,并且配置正常

    在vs里编译:

     消息类型的演进:

    消息类型会发生改变,可能会添加字段,也可能删除一些字段

    但是可能很多程序使用protobuffer的消息,但是没法随着需求尽心更新。

    所以,你对数据户必须进行演进的时候,会破会性的变化,否则他的程序可能无法正常工作。

    两种变更情景:

    向前兼容变更:新的proto文件写数据->从旧的proto读数据

    向后兼容变更:旧的proto文件写数据->从新的proto读数据

    规则:

    1.不要修改现有字段数字

    2.可以新加字段

    3.字段可以被删除,只要他们数字tag在跟新后消息中不使用,你可以把它字段名改为“OBSOLETE_”前缀而不是删除,或者把这些字段数字进行保留reserved

    gRPC结构:

    client(生成代码)<-(传输协议protocol buffers)->sever(生成代码)

    设计步骤:

    定义消息->生成代码->开发client/sever

     grpc生命周期

    创建隧道->创建client->client发送请求(可选携带的metadata)->sever发送metadata->发送/接受消息

    身份认证:

    这里不是用户身份认证,指的是多个sever和client之间。他们是如何识别出来谁是谁的,并且还能安全尽心消息传输。

    在身份认证方面,grpc一共有4中认证机制:

    1.不采用任何措施连接

    2.tls/ssl连接

    3.基于google token 身份认证

    4.自定义身份认证供应商。

  • 相关阅读:
    浅谈 LCA
    树剖毒瘤题整理
    树链剖分&咕咕咕了好久好久的qtree3
    洛谷P4095新背包问题
    洛谷P4127同类分布
    洛谷P4124 手机号码
    数位dp好题整理+自己wa过的细节记录
    P4999烦(gui)人(chu)的数学作业
    洛谷P4317 花(fa)神的数论题(数位dp解法)
    网络流之最短路径覆盖问题
  • 原文地址:https://www.cnblogs.com/liuyang95/p/13303580.html
Copyright © 2020-2023  润新知