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.自定义身份认证供应商。

 

posted @ 2020-07-19 23:55  蔡老板2019  阅读(378)  评论(0编辑  收藏  举报