Go Micro介紹與入門

一 什么是Micro?Micro是一個微服務生態系統,致力于提供產品 , 服務和解決方案,以實現現代軟件驅動型企業的創新 。我們計劃成為任何與微服務相關的事實資源,并期待公司能夠利用這項技術為自己的業務 。從早期的原型開始一直到大規模的生產部署 。
我們已經看到行業發生根本性轉變 。摩爾定律是有效的,我們每天都能獲得越來越多的計算能力 。但是,我們無法完全獲取這種新的能力 ?,F有的工具和開發實踐在這個新時代并沒有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類型 。可以編碼任何種類的消息并從不同的客戶端發送 ??蛻舳撕头掌髂J處理此問題 。這包括默認的protobuf和json
  • 請求/響應:基于RPC的請求/響應,支持雙向流 。我們提供了同步通信的抽象 。對服務的請求將自動解決,負載平衡,撥號和流式傳輸 。啟用tls時,默認傳輸為http / 1.1或http2Async Messaging:PubSub是異步通信和事件驅動架構的一流公民 。事件通知是微服務開發的核心模式 。啟用tls時,默認消息傳遞是點對點http / 1.1或http2
  • 可插拔接口:Go Micro為每個分布式系統抽象使用Go接口,因此,這些接口是可插拔的,并允許Go Micro與運行時無關,可以插入任何基礎技術插件地址:https://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的框架結構
Go Micro介紹與入門

文章插圖
【Go Micro介紹與入門】

    推薦閱讀