go-chassis 為 grpc-go 帶來高階雲原生特性

二手雄獅發表於2018-11-07

 gRPC與go chassis

儘管grpc-go本身也自帶一些雲原生能力,比如負載均衡,但是還遠遠不夠,並且需要使用者自己來編寫程式碼實現。

go chassis是一個統一的微服務開發框架,能夠整合不同的通訊協議,並使用統一的路由管理,負載均衡,熔斷降級,限流,監控等功能。

隨著grpc的流行,go chassis決定將grpc整合到自己的框架中,為grpc-go帶來更加豐富強大的功能

關於go chassis能夠提供的能力可以從這篇來開始瞭解。

Go語言微服務開發框架實踐-go chassis

原理

go chassis的設計允許任意協議的接入

go-chassis 為 grpc-go 帶來高階雲原生特性

無論協議如何,都可以通過實現client與server介面來接入到go chassis框架

https://github.com/go-chassis/go-chassis/blob/master/core/client/client.go

https://github.com/go-chassis/go-chassis/blob/master/core/server/server.go

每種請求都會被轉換為統一的抽象Invocation,而invocation是微服務治理中的標準模型,所以就可以使用標準的功能,例如負載均衡,熔斷,路由管理等,最終再次使用標準協議將請求傳送出去,協議與原生協議完全相容。

例子

使用go chassis編寫grpc程式需要遵從一定的標準,並不與原生的編寫方法相同,完整的例子在https://github.com/go-chassis/go-chassis-examples/tree/master/grpc

本次將使用Apache ServiceComb Service Center作為註冊中心

編寫proto IDL

1. 編寫proto描述檔案

go-chassis 為 grpc-go 帶來高階雲原生特性go-chassis 為 grpc-go 帶來高階雲原生特性

go chassis內部有schema與operation的概念: 其中helloworld.Greeter就是schema, SayHello為operation

2. 生成helloworld.pb.go

protoc –go_out=. helloworld.proto

之後的步驟就與原生grpc-go有所不同了

3. 手動更改helloworld.pb.go中的一個變數

go-chassis 為 grpc-go 帶來高階雲原生特性

必須將_Greeter_serviceDesc改為Greeter_serviceDesc

也就是將此變數暴露出去,供別的package使用

Provider端

1. 編寫業務邏輯

go-chassis 為 grpc-go 帶來高階雲原生特性

2.將業務邏輯註冊到go chassis,此時就需要更改的那個變數Greeter_serviceDesc

go-chassis 為 grpc-go 帶來高階雲原生特性

第一個參數列示你要向哪個協議伺服器註冊,第二個為業務邏輯,第三個為grpc serivce desc

3. 修改配置檔案chassis.yaml,最小配置項需要配置服務中心,以及指定需要啟動的協議伺服器

go-chassis 為 grpc-go 帶來高階雲原生特性

4. 修改microservice.yaml,為這個微服務起個名字

go-chassis 為 grpc-go 帶來高階雲原生特性

5. 啟動服務

go-chassis 為 grpc-go 帶來高階雲原生特性

Consumer端

1. 拿到pb檔案生成go程式碼

protoc –go_out=. hello.proto 

2. 修改配置檔案chassis.yaml

go-chassis 為 grpc-go 帶來高階雲原生特性

go-chassis 為 grpc-go 帶來高階雲原生特性3. 修改microservice.yaml, 為consumer起個名字

go-chassis 為 grpc-go 帶來高階雲原生特性

4. main中呼叫服務端,指定微服務名(RPCServer),schema,operation與引數和返回

go-chassis 為 grpc-go 帶來高階雲原生特性

那麼現在grpc已經擁有了基本的負載均衡能力,服務端向Service Center註冊

而consumer將週期快取provider例項列表,進行負載均衡

更多高階特性,可參考文件進行配置

http://go-chassis.readthedocs.io/en/latest/

相關文章