go-chassis 爲 grpc-go 帶來高級雲原生特性

 gRPC與go chassis

儘管grpc-go自己也自帶一些雲原生能力,好比負載均衡,可是還遠遠不夠,而且須要使用者本身來編寫代碼實現。git

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

隨着grpc的流行,go chassis決定將grpc集成到本身的框架中,爲grpc-go帶來更加豐富強大的功能緩存

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

Go語言微服務開發框架實踐-go chassis負載均衡

原理

go chassis的設計容許任意協議的接入框架


不管協議如何,均可以經過實現client與server接口來接入到go chassis框架ide

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
post

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


例子

使用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

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

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/

相關文章
相關標籤/搜索