這裏寫自定義目錄標題
一.什麼是微服務
據說,早在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