介紹
micro 是一個用來開發(fā)cloud native application的程序工具集,采用的是微服務(wù)架構(gòu),使用go語言編寫拳亿。
micro主要包括:
- toolkits
- api - api 網(wǎng)關(guān),服務(wù)的唯一入口點
- bot - Slack and hipchat bot. CLI and ChatOps via messaging.
- cli 命令行工具用于和整個系統(tǒng)交互
- new - 一個微服務(wù)代碼模板生成工具
5 . web - web的控制面板电湘,通過它可以和相應(yīng)的service進(jìn)行交互鹅经、查詢
- framework
即go-micro的部分,一個插件式的基于grpc的分布式開發(fā)框架 - plugin - micro的插件
幾個部分贷痪。
本次的代碼閱讀主要研究micro的toolkits和framework部分
go-micro
go-micro
?
├── broker
├── client // service的對外接口
├── cmd
├── codec //編解碼器
├── errors //Error接口的實現(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實現(xiàn)
├── publisher.go //依賴注入Client
├── README.md
├── registry //服務(wù)注冊器
├── selector //服務(wù)選擇器(服務(wù)發(fā)現(xiàn)的負(fù)載均衡)
├── server //service 的內(nèi)部server
├── service.go //封裝service的實現(xiàn)
├── service_test.go
├── transport //用于實現(xiàn)點對點通信
├── wrapper.go
└── wrapper_test.go
從上面可以看出go-micro 是一個編寫微服務(wù)的框架妹沙,一個service包括接收請求的server和對外發(fā)送請求的client熟吏。通信的方式包括點對點的同步通信(transport)和異步通信(Broker)通過事件的pub/sub的方式提供牵寺。
設(shè)計上把一個類要聚合的內(nèi)容通過Options的方式替換出去,每一個聚合的對象都是一個Option吗铐,然后每個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
....
}
具體的每一個項目都是一個Option例如Broker嫉鲸、Cmd、Client座菠、而且每一個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
}
這樣就實現(xiàn)了每一個模塊都是可以替換的實現(xiàn)升略。也就對應(yīng)了go-micro’s pluggable的設(shè)計理念屡限。通過面向接口編程的方式,搭建了整個庫的骨架翰撑。
組件
一個大概的micro圖樣额嘿。
一個Service 包括Server和Client。Server包括Register东帅、Transport靠闭、Broker。Client包括Broker坎炼、Transport谣光、Register萄金、Selector。
Register:服務(wù)的注冊于反注冊
Transport : 點對點的同步通信支持
Broker : 異步通信支持(通過事件的 Publicate 和 Subscribe)
Selector : 發(fā)現(xiàn)服務(wù) 和 選取服務(wù)時的負(fù)載均衡日戈。
靠這些組件的組合來對外提供Services.