Go micro 源碼閱讀-結(jié)構(gòu)

介紹

micro 是一個(gè)用來開發(fā)cloud native application的程序工具集,采用的是微服務(wù)架構(gòu),使用go語言編寫。
micro主要包括:

  • toolkits
    1. api - api 網(wǎng)關(guān),服務(wù)的唯一入口點(diǎn)
    2. bot - Slack and hipchat bot. CLI and ChatOps via messaging.
    3. cli 命令行工具用于和整個(gè)系統(tǒng)交互
    4. new - 一個(gè)微服務(wù)代碼模板生成工具
      5 . web - web的控制面板,通過它可以和相應(yīng)的service進(jìn)行交互、查詢
  • framework
    即go-micro的部分,一個(gè)插件式的基于grpc的分布式開發(fā)框架
  • plugin - micro的插件
    幾個(gè)部分。
    本次的代碼閱讀主要研究micro的toolkits和framework部分

go-micro

go-micro
?
├── broker
├── client       // service的對外接口
├── cmd
├── codec      //編解碼器
├── errors      //Error接口的實(shí)現(xiàn),提供返回error信息
├── function.go    // https://micro.mu/blog/2017/06/06/functions.html
├── function_test.go
├── go-micro.go         //go-micro 對外服務(wù)接口(service,和相關(guān)度 Pub/Sub接口)
├── go-micro.png
├── LICENSE
├── metadata
├── options.go  //service的配置Option實(shí)現(xiàn)
├── publisher.go        //依賴注入Client
├── README.md
├── registry             //服務(wù)注冊器
├── selector      //服務(wù)選擇器(服務(wù)發(fā)現(xiàn)的負(fù)載均衡)
├── server                   //service 的內(nèi)部server
├── service.go            //封裝service的實(shí)現(xiàn)
├── service_test.go
├── transport  //用于實(shí)現(xiàn)點(diǎn)對點(diǎn)通信
├── wrapper.go
└── wrapper_test.go

從上面可以看出go-micro 是一個(gè)編寫微服務(wù)的框架,一個(gè)service包括接收請求的server和對外發(fā)送請求的client。通信的方式包括點(diǎn)對點(diǎn)的同步通信(transport)和異步通信(Broker)通過事件的pub/sub的方式提供。

設(shè)計(jì)上把一個(gè)類要聚合的內(nèi)容通過Options的方式替換出去,每一個(gè)聚合的對象都是一個(gè)Option,然后每個(gè)Option都是可以設(shè)置的,只要滿足了特定的接口即可。
例如:Service 的Options定義

type Options struct {
 Broker    broker.Broker
 Cmd       cmd.Cmd
 Client    client.Client
 Server    server.Server
 Registry  registry.Registry
 Transport transport.Transport
 ....
}

具體的每一個(gè)項(xiàng)目都是一個(gè)Option例如Broker、Cmd、Client、而且每一個(gè)Option都是接口形式的定義,例如:

type Broker interface {
 Options() Options
 Address() string
 Connect() error
 Disconnect() error
 Init(...Option) error
 Publish(string, *Message, ...PublishOption) error
 Subscribe(string, Handler, ...SubscribeOption) (Subscriber, error)
 String() string
}

這樣就實(shí)現(xiàn)了每一個(gè)模塊都是可以替換的實(shí)現(xiàn)。也就對應(yīng)了go-micro’s pluggable的設(shè)計(jì)理念。通過面向接口編程的方式,搭建了整個(gè)庫的骨架。

組件

一個(gè)大概的micro圖樣。


go-micro-struct.png.png

一個(gè)Service 包括Server和Client。Server包括Register、Transport、Broker。Client包括Broker、Transport、Register、Selector。
Register:服務(wù)的注冊于反注冊
Transport : 點(diǎn)對點(diǎn)的同步通信支持
Broker : 異步通信支持(通過事件的 Publicate 和 Subscribe)
Selector : 發(fā)現(xiàn)服務(wù) 和 選取服務(wù)時(shí)的負(fù)載均衡。
靠這些組件的組合來對外提供Services.


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

相關(guān)閱讀更多精彩內(nèi)容

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