gRPC與go chassis
儘管grpc-go本身也自帶一些雲原生能力,比如負載均衡,但是還遠遠不夠,並且需要使用者自己來編寫程式碼實現。
go chassis是一個統一的微服務開發框架,能夠整合不同的通訊協議,並使用統一的路由管理,負載均衡,熔斷降級,限流,監控等功能。
隨著grpc的流行,go chassis決定將grpc整合到自己的框架中,為grpc-go帶來更加豐富強大的功能
關於go chassis能夠提供的能力可以從這篇來開始瞭解。
原理
go chassis的設計允許任意協議的接入
無論協議如何,都可以通過實現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內部有schema與operation的概念: 其中helloworld.Greeter就是schema, SayHello為operation
2. 生成helloworld.pb.go
protoc –go_out=. helloworld.proto
之後的步驟就與原生grpc-go有所不同了
3. 手動更改helloworld.pb.go中的一個變數
必須將_Greeter_serviceDesc改為Greeter_serviceDesc
Provider端
1. 編寫業務邏輯
2.將業務邏輯註冊到go chassis,此時就需要更改的那個變數Greeter_serviceDesc
第一個參數列示你要向哪個協議伺服器註冊,第二個為業務邏輯,第三個為grpc serivce desc
3. 修改配置檔案chassis.yaml,最小配置項需要配置服務中心,以及指定需要啟動的協議伺服器
4. 修改microservice.yaml,為這個微服務起個名字
5. 啟動服務
Consumer端
1. 拿到pb檔案生成go程式碼
protoc –go_out=. hello.proto
2. 修改配置檔案chassis.yaml
3. 修改microservice.yaml, 為consumer起個名字
4. main中呼叫服務端,指定微服務名(RPCServer),schema,operation與引數和返回
那麼現在grpc已經擁有了基本的負載均衡能力,服務端向Service Center註冊
而consumer將週期快取provider例項列表,進行負載均衡
更多高階特性,可參考文件進行配置
http://go-chassis.readthedocs.io/en/latest/