Go - Micro微服務框架實踐 - 常見問題

目錄

 

什麼是 Micro ?

Micro是開源的

社區

生態系統

該從何入手

micro有哪些使用者

如何才能使用micro

除了Consul,可以使用其它的註冊中心嗎

Etcd

零依賴

Micro可以在哪些環境運行

API、Web、SRV 服務之間的區別是什麼

API 服務

Web 服務

SRV 服務

Micro的性能如何

Micro支持gRPC嗎

Micro與Go-Kit比較

想了解更多


FAQ章節包含了的常見問題,並作了一些解答。

 

什麼是 Micro ?

Micro 是一個着眼於分佈式系統開發的微服務生態系統。

Micro是開源的

Micro由開源的庫與工具組成,旨在輔助微服務開發。

  • go-micro - 基於Go語言的可插拔RPC微服務開發框架;包含服務發現、RPC客戶/服務端、廣播/訂閱機制等等。
  • go-plugins - go-micro的插件有etcd、kubernetes、nats、rabbitmq、grpc等等。
  • micro - 微服務工具集包含傳統的入口點(entry point);API 網關、CLI、Slack Bot、代理及Web UI。

還有其它相關的庫和服務可以參考 github.com/micro

社區

我們有上千人的社區在Slack平臺上:slack.micro.mu

生態系統

Micro跨過了單一組合開發的模式,她的開源工具與服務都是由社區貢獻的。

相關的生態系統可以進右邊的傳送門查看:micro.mu/explore/.

該從何入手

可以先從go-micro入手。 readme文檔裏提供了一個demo微服務示例。

如果要了解更多的資源可以查閱開始入門 ,或者簽出示例源碼。

可以通過micro工具集的cli,web ui,slack,或者api網關(api gateway)來訪問操控務。

micro有哪些使用者

相關用戶頁面列出了一些使用micro服務的公司(列表更新可能不會太及時)。

還有很多公司在使用我們的框架但是沒有公開列出來,如果你們你們正在使用micro,可以告訴我們,我們會列出來。

如何才能使用micro

其實非常簡單

  1. 使用go-micro編寫服務。
  2. 使用micro工具集來訪問這些服務。

你可以簽出我們在github上的簡易Greeter示例。

除了Consul,可以使用其它的註冊中心嗎

當然是可以的,服務的註冊發現的實現機制是可插拔的,之所以使用Consul是因爲它擁有的特性以及它足夠簡單。 比如:

Etcd

如果你想使用etcd那你只需要引用etcd包,然後在啓動的註冊方式上標明使用的是etcd就行了。

import (
        _ "github.com/micro/go-plugins/registry/etcd"
)

service --registry=etcd --registry_address=127.0.0.1:2379

零依賴

micro專門爲零依賴配置內置有一個多路廣播DNS服務註冊中心。

如果要使用,只需要在程序啓動指令上傳上--registry=mdns或者MICRO_REGISTRY=mdns

Micro可以在哪些環境運行

micro對運行環境不挑食。只要你喜歡,在哪都行,裸機, 亞馬遜AWS或者Google Cloud,也可以運行在你喜歡的容器編排系統中比如:Mesos、Kubernetes。

右邊的這個鏈接中有關於如何使用K8s來開發micro服務的micro kubernetes demo

API、Web、SRV 服務之間的區別是什麼

image

API、Web、SRV作爲micro工具集的一部分,我們嘗試着使用一些設計模式規劃出彈性的架構,通過把API接口Web管理控制檯SRV(SRV是service的簡稱,可理解爲後臺業務邏輯部分)。

API 服務

micro api默認把go.micro.api作爲API網關服務的命名空間,micro api遵從API網關模式。

查看更多內容請求翻閱:api

Web 服務

Web服務由micro web提供,默認命名空間是go.micro.web。我們堅信,web應用作爲微服務中的一等公民,所以把構建web管理控制檯作爲微服務的一部分顯得非常重要。micro web其實是一個反向代理,並把http請求基於路徑解析到適當的web應用程序。

查看更多內容請求翻閱:web

SRV 服務

SRV 服務是RPC服務的基礎,也就是你常寫的服務類型。我們一般把它稱作RPC或後後端服務,因爲它作爲後臺架構的一部分,不應該暴露在最外層。默認情況下,我們使用go.micro.srv作爲它的命名空間,或者你可以使用像com.example.srv這樣的名字。

Micro的性能如何

性能目前並不是Micro主要關注的事情。雖然代碼寫出來應該是最優化並且要避免超過負載,但是確實是沒有這麼多時間花在基準壓力測試上。與net/http或者其它web框架相互比較目前毫無意義。Micro提供的是更高級別的微服務需求,這裏面就包含服務發現、負載均衡、消息編碼等等。要比較,我想得把這些都一起比較了纔行。

如果你還是關心性能問題,最簡單的方式就是通過傳遞以下參數運行程序,便可以提取出最大值。

--selector=cache # 激活基於內存的服務節點發現機制
--client_pool_size=10 # 激活客戶端連接池

Micro支持gRPC嗎

支持。這兒有幾個插件:transport、client、server。

可以查看micro/go-plugins.

我們也提供了golang版本的gRPC快速上手demo:micro/go-grpc.

Micro與Go-Kit比較

這個問題經常出現,那二者的區別有哪些呢?

Go-kit聲稱自己是一個微服務的標準庫。像GO一樣,go-kit提供獨立的包,通過這些包,開發者可以用來組建自己的應用程序。Go-kit非常不錯,基於Go-kit,你可以完全掌控你定義的服務。

Go-micro則是一個面向微服務的可插拔RPC框架。go-micro是一個只在特殊方向上努力的框架,它嘗試簡化分佈式系統之間的通信,所以我們可以花更多的時間在我們需要關注的業務邏輯上。對於想快速啓動,把程序跑起來,同時用擁有一些可插拔的能力從基礎架構中斷開的能力,而不用修改代碼,那麼go-micro也很不錯。

Micro作爲一個微服務工具庫,好比一把瑞士軍刀,在我們構建微服務時,可以提供傳統的接入點,比如http api gateway,web ui,cli,slack bot等等。Micro使用工具來引導架構關注點之間邏輯上的隔離,推動開發者創建API層的服務來暴露對外的API接口,並且創建隔離於對外API的Web層微服務。

如果想全盤掌控,那麼使用go-kit;但是如果想弄一個有想法框架,使用go-micro。

想了解更多

 

Go - Micro微服務框架實踐系列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章