基於gokit的微服務項目骨架ko

前段時間發佈了一個小小的web開發項目骨架morningo,性能與效率齊飛,開發速度在短暫時間熟悉go語言後應該是匹配php,ruby等這些腳本語言,然後期項目併發性能,基本併發到上千乃至上萬tcp鏈接沒問題。但從業務架構層面看,項目再發展,數據庫存在瓶頸,單體項目耦合度高,可維護性差,可延展性差,存在不少問題。於是項目早期能夠採用單體架構,但後期仍然推薦的是面向服務的分佈式架構。分佈式的架構模式雖然帶來了增長的代碼量,服務間溝通的成本,但總體項目更具備彈性,延展性更好。php

項目地址:https://github.com/chenhg5/kogit

gokit介紹

go語言的優勢不用贅述,那麼基於go的微服務框架有嗎?gokit就是一個go語言相關的微服務工具包。它自身稱爲toolkit,並非framework。也就是gokit是將一系列的服務集合在一塊兒,提供接口,從而讓開發者自由組合搭建本身的微服務項目。基本上看完gokit的例子就能夠動手模仿着寫一個相似的小項目。gokit的結構分爲:github

clipboard.png

transport

決定用哪一種方式提供服務請求,通常就是 http,rpcweb

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爲此提供了不少微服務工具組件。api

clipboard.png

  • 認證組件(basic, jwt)
  • 迴路熔斷器
  • 日誌組件
  • 普羅米修斯監控系統
  • 限流器
  • 服務發現系統接口(etcd, consul等)
  • 路由跟蹤
  • ...

這些組件大大方便了咱們開發一個微服務應用。ruby

關於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/併發

相關文章
相關標籤/搜索