micro擁有完整的微服務生態,使用它構建一整套完整的微服務架構。下圖是做者在博客中給出的使用micro的微服務架構圖。 git
使用micro框架提供的工具Micro API(命令 micro api 運行)便可啓動啓動一個API網關。$ go get -u github.com/micro/micro
$ micro api --help
NAME:
micro api - Run the api gateway
USAGE:
micro api [command options] [arguments...]
OPTIONS:
--address Set the api address e.g 0.0.0.0:8080 [$MICRO_API_ADDRESS]
--handler Specify the request handler to be used for mapping HTTP requests to services; {api, event, http, rpc} [$MICRO_API_HANDLER]
--namespace Set the namespace used by the API e.g. com.example.api [$MICRO_API_NAMESPACE]
--resolver Set the hostname resolver used by the API {host, path, grpc} [$MICRO_API_RESOLVER]
複製代碼
micro工具是使用go-micro構建,全部一樣具備服務發現等功能。如上圖,micro api會把外部的http請求轉發的內部Order API服務等,API服務內部實現會調用更底層的Service。通常咱們將這裏的API服務(Order API ...)稱爲聚合層服務或者業務層服務,更加底層的Serivce稱爲支撐服務或者基礎服務。github
能夠看出從邏輯上大體分爲三層,網關層,聚合服務層,基礎服務層,如圖: golang
使用硬件或者軟件負載均衡將流量分攤到API網關,由網關統一鑑權,而後再將請求路由到後端對應的服務上。相同的服務能夠有多個實例,網關會按必定規則分攤到不一樣的實例,規則是經過插件可更改的,默認是隨機。充值服務等聚合層的服務會根據業務邏輯調用底層的用戶服務獲取用戶數據,調用帳單服務建立帳單等,與底層服務的調用採用RPC調用,micro採用protobuf來編解碼,傳輸方式是可選的,mciro默認爲http,可使用grpc,tcp,nats,utp等。全部的服務均可以多實例部署,go-micro已經幫咱們處理好服務發現,RPC調用等問題,開發起來很是方便。固然咱們還須要鑑權,熔斷,鏈路追蹤,監控等功能,才能真正的能夠投入使用。micro框架的插件機制,能夠很是方便的實現這些功能。web
通常鑑權,熔斷等功能都須要內置在API網關中,micro自帶的網關並無提供這些功能,可是咱們能夠本身寫插件或者使用框架自帶的插件來實現。計劃爲micro API網關增長以下功能:後端
聚合層服務主要是業務層邏輯,具體實現就是對外的HTTP API供前端調用。雖然micro API網關提供的將HTTP轉換成內部RPC調用功能,可是寫起來總以爲變扭。幸運的是micro一樣提供gin等經常使用golang web 框架的集成方法,此處有做者的例子https://github.com/micro/examples/tree/master/greeter/api。使用這種方式,網關在工做時就不須要將外部HTTP請求轉換成RPC方法,因此須要在啓動mciro API網關增長一個參數:micro api --handler=http ,handler默認是rpc模式。api