【gRPC】:快速上手gRPC与protobuf

一、微服务

微服务出来之前,是单体架构,如下图所示。

一旦某个服务宕机,可能会引起整个应用都不能用,隔离性比较差。

只能整体应用进行伸缩,浪费资源,可伸缩性很差。

并且代码耦合在一起,可维护性很差。

在这里插入图片描述

那么就发展出了微服务架构,所有的请求就都访问网关,然后根据请求路由到不同的集群上,然后再返回请求到网关,网关再返回给用户。

在这里插入图片描述
在这里插入图片描述

拆分需要将每个服务的公共功能都放在网关实现,或者把公共功能单独做一个服务,形成新的服务,比如统一认证中心。这也算是服务拆分。

服务拆分之后,服务之间调用是进程和进程之间调用、服务器和服务器之间的调用。那么这个时候就需要发起网络调用,http是比较常见的协议,但是性能比较低,这个时候需要引入RPC-远程过程调用,通过自定义协议发起TCP调用,来加快传输效率。

同时每个服务由于可能分布在成干上百台机器上,服务和服务之间的调用,会出现一些问题,比如,如何知道应该调用哪台机器上的服务,调用方可能需要维护被调用方的地址,这个地址可能很多,增加了额外的负担,这时候就需要引入服务治理

服务治理是一个大的概念,这个概念中有一个比较重要的点就是 服务发现,服务发现中 有个重要的东西 是 注册中心

服务提供商在启动服务的时候需要把服务注册到服务发现(注册中心),然后
服务消费方去注册中心要对应的服务的地址。

在这里插入图片描述

同时,服务和服务之间的调用会发生一些问题,为了避免产生连锁的雪崩反应,引入了服务容错,同时为了追踪一个调用所经过的服务,引入了链路追踪,这些就构成了一个微服务的生态。

二、gRPC介绍

服务和服务之间调用需要使用RPC,gRPC 是一款语言中立、平台中立、开源的远程过程调用系统, gRPC 客户端和服务端可以在多种环境中运行和交互,例如用java 写一个服务端,可以用 go 语言写客户端调用。

数据在进行网络传输的时候,需要进行序列化,序列化的协议有很多种,比如xml、json、protobuf等,gRPC默认用Protocol buffers,这是google开源的一套成熟的结构数据序列化机制。

序列化:将数据结构或对象转换成二进制串的过程。
反序列化:将在序列化过程中所产生的二进制串转换成数据结构或对象的过程。

三、protobuf

protobuf是二进制数据格式,需要编码和解码,本身不具有可读性,所以只能反序列化之后才能得到真正可读的数据。

序列化之后的提及比json和xml很小,适合网络传输,同时支持跨平台多种语言,并且序列化、反序列化的速度很快。

到github中下载protoc通用编译器,https://github.com/protocolbuffers/protobuf/releases?page=1,找到对应版本并下载即可。下载之后解压到某处,并且将bin目录添加到环境变量中。

然后安装go专用的protoc生成器。

在Go Path下安装命令:

(base) PS D:\GoProject\bin> go install github.com/golang/protobuf/protoc-gen-go@latest

安装成功后会生成一个可执行文件,也就是protoc-gen-go.exe文件,执行protoc命令会自动调用这个插件。

在这里插入图片描述
定义一种源文件,扩展名为 .proto ,使用这种源文件,可以定义存储类的内容(消息类型)。

protobuf有自己的编译器 protoc,可以将.proto 编译成对应语言的文件,就可以进行使用了。

现在我们尝试下写一个简单demo。

syntax = "proto3";

// go_package ="path;name"; path表示生成的go文件的存放地址,会自动生成目录。
// name 表示生成的go文件所属的包名,如果不进行配置,那么默认使用这个proto文件的名称。
option  go_package = "../service";

// 指定待会文件生成出来的package
package service;

// 传输的对象
message  User{
   
   
  string username = 1;
  int32 age = 2;
}

在pbfile路径下输入protoc命令,会自动帮我们生成service文件夹和对应的文件。

PS D:\GoProject\protobuflearn\pbfile> protoc --go_out=./ .\user.proto

在这里插入图片描述

编写简单的main demo来试试proto用法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值