golang微服务教程1--protobuf

一.什么是微服务

据说,早在2011年5月,在威尼斯附近的软件架构师讨论会上,就有人提出了微服务架构设计的概念,用它来描述与会者所见的一种通用的架构设计风格。时隔一年之后,在同一个讨论会上,大家决定将这种架构设计风格用微服务架构来表示。

起初,对微服务的概念,没有一个明确的定义,大家只能从各自的角度说出了微服务的理解和看法。
有人把微服务理解为一种细粒度SOA(service-oriented Architecture,面向服务架构),一种轻量级的组件化的小型SOA。 在2014年3月,詹姆斯·刘易斯(James Lewis)与马丁·福勒(Martin Fowler)所发表的一篇博客中,总结了微服务架构设计的一些共同特点,这应该是一个对微服务比较全面的描述。

这篇文章中认为:“简而言之,微服务架构风格是将单个应用程序作为一组小型服务开发的方法,每个服务程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务是围绕业务功能构建的。可以通过全自动部署机器独立部署。这些服务器可以用不同的编程语言编写,使用不同的数据存储技术,并尽量不用集中式方式进行管理“

	原文链接 https://martinfowler.com/articles/microservices.html

二、什么是protobuf

protobuf是google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。
你可以理解为类似json的传输格式,但是它比json传输更快,体积更小,也更安全。

protobuf是后起之秀,是谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为profobuf是二进制数据格式,需要编码和解码。数据本身不具有可读性。因此只能反序列化之后得到真正可读的数据。

2.1优点

相对于其它protobuf更具有优势
1:序列化后体积相比Json和XML很小,适合网络传输
2:支持跨平台多语言
3:消息格式升级和兼容性还不错
4:序列化反序列化速度很快,快于Json的处理速速

2.2缺点

Protobuf 与 XML 相比也有不足之处。它功能简单,无法用来表示复杂的概念。
XML 已经成为多种行业标准的编写工具,Protobuf 只是 Google 公司内部使用的工具,在通用性上还差很多。 由于文本并不适合用来描述数据结构,所以 Protobuf 也不适合用来对基于文本的标记文档(如 HTML)建模。
另外,由于 XML 具有某种程度上的自解释性,它可以被人直接读取编辑,在这一点上 Protobuf 不行,它以二进制的方式存储,除非你有 .proto 定义,否则你没法直接读出 Protobuf 的任何内容。

三.Protobuf安装步骤

Linux平台

#下载 protoBuf: 
$ git clone https://github.com/protocolbuffers/protobuf.git 123
#安装依赖库 
$ sudo apt-get install autoconf automake libtool curl make g++ unzip libffi- dev -y 
#安装
 $ cd protobuf/ 
 $ ./autogen.sh 
 $ ./configure 
 $ make 
 $ sudo make install $ sudo ldconfig 
 # 刷新共享库 很重要的一步啊 #安装的时候会比较卡 #成功后需要使用命令测试 
 $ protoc –h

windows平台
1.下载安装文件
https://github.com/protocolbuffers/protobuf/releases/tag/v3.10.0

2.解压到任意目录

3.配置环境变量

将上一步解压出来的目录/bin(即protoc.exe所在的目录)添加到环境变量中

4.检查

cmd输入protoc查看是否安装成功

四.加入golang的支持

1.获取 proto包

#Go语言的proto API接口
 $ go get -v -u github.com/golang/protobuf/proto

2.安装protoc-gen-go插件

#安装 
$ go get -v -u github.com/golang/protobuf/protoc-gen-go
#编译 
$ cd $GOPATH/src/github.com/golang/protobuf/protoc-gen-go/ 
$ go build
#将生成的 protoc-gen-go可执行文件,放在/bin目录下 
$ sudo cp protoc-gen-go /bin/

五.demo

1.编写test.proto测试类

syntax = "proto3";
package myproto;
message Test {
  string name = 1;
  int32 stature = 2 ;
  repeated int64 weight = 3;
  string motto = 4;
}

2.编译

进入proto所在目录,执行以下命令即可编译成go文件

protoc --go_out=./ *.proto

猜你喜欢

转载自blog.csdn.net/jin870132/article/details/106743132