go-chassis為grpc-go帶來(lái)高級(jí)云原生特性


?gRPC與go?chassis

盡管grpc-go本身也自帶一些云原生能力,比如負(fù)載均衡,但是還遠(yuǎn)遠(yuǎn)不夠,并且需要使用者自己來(lái)編寫代碼實(shí)現(xiàn)。

go?chassis是一個(gè)統(tǒng)一的微服務(wù)開(kāi)發(fā)框架,能夠集成不同的通信協(xié)議,并使用統(tǒng)一的路由管理,負(fù)載均衡,熔斷降級(jí),限流,監(jiān)控等功能。

隨著grpc的流行,go?chassis決定將grpc集成到自己的框架中,為grpc-go帶來(lái)更加豐富強(qiáng)大的功能

關(guān)于go?chassis能夠提供的能力可以從這篇來(lái)開(kāi)始了解。

Go語(yǔ)言微服務(wù)開(kāi)發(fā)框架實(shí)踐-go chassis

原理

go chassis的設(shè)計(jì)允許任意協(xié)議的接入

無(wú)論協(xié)議如何,都可以通過(guò)實(shí)現(xiàn)client與server接口來(lái)接入到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

每種請(qǐng)求都會(huì)被轉(zhuǎn)換為統(tǒng)一的抽象Invocation,而invocation是微服務(wù)治理中的標(biāo)準(zhǔn)模型,所以就可以使用標(biāo)準(zhǔn)的功能,例如負(fù)載均衡,熔斷,路由管理等,最終再次使用標(biāo)準(zhǔn)協(xié)議將請(qǐng)求發(fā)送出去,協(xié)議與原生協(xié)議完全兼容。

例子

使用go?chassis編寫grpc程序需要遵從一定的標(biāo)準(zhǔn),并不與原生的編寫方法相同,完整的例子在https://github.com/go-chassis/go-chassis-examples/tree/master/grpc

本次將使用Apache?ServiceComb?Service?Center作為注冊(cè)中心

編寫proto?IDL

1. 編寫proto描述文件

go?chassis內(nèi)部有schema與operation的概念:?其中helloworld.Greeter就是schema,?SayHello為operation

2.?生成helloworld.pb.go

protoc –go_out=. helloworld.proto

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

3.?手動(dòng)更改helloworld.pb.go中的一個(gè)變量

必須將_Greeter_serviceDesc改為Greeter_serviceDesc

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

Provider端

1.?編寫業(yè)務(wù)邏輯

2.將業(yè)務(wù)邏輯注冊(cè)到go?chassis,此時(shí)就需要更改的那個(gè)變量Greeter_serviceDesc

第一個(gè)參數(shù)表示你要向哪個(gè)協(xié)議服務(wù)器注冊(cè),第二個(gè)為業(yè)務(wù)邏輯,第三個(gè)為grpc serivce desc

3.?修改配置文件chassis.yaml,最小配置項(xiàng)需要配置服務(wù)中心,以及指定需要啟動(dòng)的協(xié)議服務(wù)器

4.?修改microservice.yaml,為這個(gè)微服務(wù)起個(gè)名字

5.?啟動(dòng)服務(wù)

Consumer端

1.?拿到pb文件生成go代碼

protoc –go_out=. hello.proto

2.?修改配置文件chassis.yaml

3.?修改microservice.yaml,?為consumer起個(gè)名字

4.?main中調(diào)用服務(wù)端,指定微服務(wù)名(RPCServer),schema,operation與參數(shù)和返回

那么現(xiàn)在grpc已經(jīng)擁有了基本的負(fù)載均衡能力,服務(wù)端向Service?Center注冊(cè)

而consumer將周期緩存provider實(shí)例列表,進(jìn)行負(fù)載均衡

更多高級(jí)特性,可參考文檔進(jìn)行配置

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容