Go Micro介紹與入門

一 什麼是Micro?

Micro是一個微服務生態系統,致力於提供產品,服務和解決方案,以實現現代軟體驅動型企業的創新。我們計劃成為任何與微服務相關的事實資源,並期待公司能夠利用這項技術為自己的業務。從早期的原型開始一直到大規模的生產部署。

我們已經看到行業發生根本性轉變。摩爾定律是有效的,我們每天都能獲得越來越多的計算能力。但是,我們無法完全獲取這種新的能力。現有的工具和開發實踐在這個新時代並沒有scale。沒有提供開發人員從單一程式碼庫轉向更高效的設計模式的工具。大多數公司不可避免地以單一設計達到收益遞減,必須進行大規模的研發再造。 Netfix,Twitter,Gilt和Hailo都是最好的例子。所有最終都建立了自己的微服務平台。

我們的願景是提供基本的構建模組,使任何人都可以輕鬆採用微服務。

二 go-micro簡介

Go Micro是一個插件化的基礎框架,基於此可以構建微服務,Micro的設計哲學是可插拔的插件化架構

在架構之外,它默認實現了consul作為服務發現(2019年源碼修改了默認使用mdns),通過http進行通訊,通過protobuf和json進行編解碼

Micro 是一個用於構建和管理分散式系統的系統.

Micro 的主要組件如下:

  • 運行時: 用於管理服務包括 auth, config, discovery, networking 的運行時環境.
  • 框架: 用於編寫要在運行時運行的服務的 Go 框架.
  • 客戶端: 多語言客戶端, 使其他程式能夠訪問微服務.

三 go-micro的主要功能

  • 服務發現:自動服務註冊和名稱解析。服務發現是微服務開發的核心。當服務A需要與服務B通話時,它需要該服務的位置。默認發現機制是多播DNS(mdns),一種零配置系統。您可以選擇使用SWIM協議為p2p網路設置八卦,或者為彈性雲原生設置設置consul
  • 負載均衡:基於服務發現構建的客戶端負載均衡。一旦我們獲得了服務的任意數量實例的地址,我們現在需要一種方法來決定要路由到哪個節點。我們使用隨機散列負載均衡來提供跨服務的均勻分布,並在出現問題時重試不同的節點
  • 消息編碼:基於內容類型的動態消息編碼。客戶端和伺服器將使用編解碼器和內容類型為您無縫編碼和解碼Go類型。可以編碼任何種類的消息並從不同的客戶端發送。客戶端和伺服器默認處理此問題。這包括默認的protobuf和json
  • 請求/響應:基於RPC的請求/響應,支援雙向流。我們提供了同步通訊的抽象。對服務的請求將自動解決,負載平衡,撥號和流式傳輸。啟用tls時,默認傳輸為http / 1.1或http2
    Async Messaging:PubSub是非同步通訊和事件驅動架構的一流公民。事件通知是微服務開發的核心模式。啟用tls時,默認消息傳遞是點對點http / 1.1或http2
  • 可插拔介面:Go Micro為每個分散式系統抽象使用Go介面,因此,這些介面是可插拔的,並允許Go Micro與運行時無關,可以插入任何基礎技術
    插件地址://github.com/micro/go-plugins

四 go-micro通訊流程

Server監聽客戶端的調用,和Brocker推送過來的資訊進行處理。並且Server端需要向Register註冊自己的存在或消亡,這樣Client才能知道自己的狀態
Register服務的註冊的發現,Client端從Register中得到Server的資訊,然後每次調用都根據演算法選擇一個的Server進行通訊,當然通訊是要經過編碼/解碼,選擇傳輸協議等一系列過程的

如果有需要通知所有的Server端可以使用Brocker進行資訊的推送,Brocker 資訊隊列進行資訊的接收和發布

五 go-micro核心介面

go-micro之所以可以高度訂製和他的框架結構是分不開的,go-micro由8個關鍵的interface組成,每一個interface都可以根據自己的需求重新實現,這8個主要的inteface也構成了go-micro的框架結構
在這裡插入圖片描述

Tags: