這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
前段時間發布了一個小小的web開發項目骨架morningo,效能與效率齊飛,開發速度在短暫時間熟悉go語言後應該是匹配php,ruby等這些指令碼語言,而後期項目並發效能,基本並發到上千乃至上萬tcp串連沒問題。但從業務架構層面看,項目再發展,資料庫存在瓶頸,單體項目耦合度高,可維護性差,可延展性差,存在很多問題。因而項目早期可以採用單體架構,但後期仍然推薦的是面向服務的分布式架構。分布式的架構模式雖然帶來了增加的代碼量,服務間溝通的成本,但整體項目更具有彈性,延展性更好。
項目地址:https://github.com/chenhg5/ko
gokit介紹
go語言的優點不用贅述,那麼基於go的微服務架構有嗎?gokit就是一個go語言相關的微服務工具包。它自身稱為toolkit
,並不是framework
。也就是gokit是將一系列的服務集合在一起,提供介面,從而讓開發人員自由組合搭建自己的微服務項目。基本上看完gokit的例子就可以動手模仿著寫一個類似的小項目。gokit的結構分為:
transport
決定用哪種方式提供服務要求,一般就是 http,rpc
endpoint
是gokit最重要的一個層,是一個抽象的接收請求返迴響應的函數類型。在這個定義的類型裡面會去調用service層的方法,組裝成response返回。而gokit中的所有中介軟體組件都是通過裝飾者設計模式注入的。
type Endpoint func(ctx context.Context, request interface{}) (response interface{}, err error)func(log Logger, in endpoint.Endpoint) endpoint.Endpoint { return func(ctx context.Context, req interface{}) (interface{}, error) { logger.Log("input", toJSON(req)) resp, err := in(ctx, req) logger.Log("output", toJSON(resp), "err", err) return resp, err }}
service
所有的具體方法寫在這裡,可以理解為單體web架構中的控制器部分。
工具包
這三個層組成一個gokit微服務應用。此外,作為一個工具包,gokit為此提供了很多微服務工具組件。
- 認證組件(basic, jwt)
- 迴路熔斷器
- 日誌組件
- 普羅米修斯監控系統
- 限流器
- 服務發現系統介面(etcd, consul等)
- 路由跟蹤
- ...
這些組件大大方便了我們開發一個微服務應用。
關於ko
ko是一個基於gokit的微服務架構應用開發骨架。一個基本的微服務架構包括:分發層api網關,監控系統,日誌系統,服務提供層等。ko的目的是提供一個架構參考,從而減短開發人員上手微服務架構的時間,最終是想提供一個思路讓開發人員能夠在極短的時間內架構起一個正式環境完備功能的微服務架構應用,並可以馬上著手於開發業務功能。同時,避免與各種基礎服務之間耦合度過高,提供靈活的服務定製介面給開發人員。ko會在gokit的基礎上,會提供一個解耦且功能完備的Api網關,帶有資料連線等功能完備的服務層,以及輔助項目構建的命令列腳手架工具。目前ko還在不斷完善開發中,會在本文中更新進度。附傳統的基本模型架構圖。
參考資料
[1] https://www.jianshu.com/p/cff...
[2] https://www.jianshu.com/p/0c3...
[3] https://gokit.io/faq/