Go-Micro微服務入門(三):揭開go-micro的神秘面紗

2020-10-11 Yeaze

在本文正式開始之前,我覺得大家有必要先對微服務有一個大概的認識和了解。當下,微服務早已不是什麼新鮮的概念了,甚至已經開始逐步過渡到了下一代微服務-Service Mesh。當前微服務的實施也沒有一個統一的行業標準,因為服務怎麼拆分,拆分的顆粒等這些問題都不是一概而論的,都是需要根據實際業務來選擇最合適的方案。

那麼Go-Micro到底是什麼?

我們常說的Go-Micro其實包含了兩個部分Micro和Go-micro。

關於 Micro

Micro 是一個著眼於分布式系統開發的微服務生態系統,同時也是一個工具集。

在Micro架構中,作為與其同名的運行時管理工具Micro就是最主要的構件。我們通過下圖了解Micro架構:

架構

micro由以下幾個部分組成:

  1. API網關(API Gateway): API Gateway 網關。API網關是請求的入口,把請求動態路由到具體服務。網關允許我們建立可伸縮的後臺微服務架構,並且讓工作在前端的公共API更健壯。Micro API基於服務發現擁有強大的路由能力,通過我們預置的handlers插件,它可以處理http、gRPC、websocket、消息推送事件等等。
  2. 命令行接口(Interactive CLI): 交互式的命令行接口。CLI通過終端可以描述、查詢、直接與平臺和服務進行交互。CLI提供所有的命令讓開發者明白微服務正在處理的事情。CLI也包含了交互模式。
  3. 服務代理(Service Proxy): 服務代理,基於Go Micro和MUCP協議構建的透明的代理服務。它將服務發現、負載均衡、消息編碼、中間件、傳輸及代理插件轉移到某一(具體服務所在)位置,同api不同,它不暴露任何接口,只工作在內部環境,相當於橋接內部服務。
  4. 模板生成(Template Generation): 基於模板快速創建新的服務代碼。Micor提供預置的模板,通過模板編寫統一風格的代碼。
  5. SlackOps小機器人(SlackOps Bot): Slack小機器人插件,當它運行中服務中時,這個插件允許開發者通過Slack消息來操作平臺。MicroBot插件提供聊天配置選項,這樣就可以讓團隊通過向小機器人發送聊天消息來做一些我們希望它做的事,這裡面當然也包含像動態發現服務一樣創建slack命令。
  6. 管理控制臺(Web Dashboard): 通過Web管理控制臺,可以直接在Web頁面上查看服務的運行情況,展示端點信息,請求與響應狀態,甚至直接向服務進行查詢。管理控制臺也有CLI交互頁面提供給開發者在線上處理,就像直接操作終端一樣。
  7. Go-micro框架(Go Framework): Go Micro框架是Micro的底層、核心。GO-Micro把分布式服務抽象,並提供簡便的方式讓大家構建具有高彈性的微服務。

關於 Go-micro

Go-micro是一個可插拔的RPC框架,用於分布式系統的開發。

架構

特性:

  1. 服務發現(Service Discovery) - 自動服務註冊與名稱解析。
  2. 負載均衡(Load Balancing) - 在服務發現之上構建了智能的負載均衡機制。
  3. 同步通信(Synchronous Comms) - 基於RPC的通信,支持雙向流。
  4. 異步通信(Asynchronous Comms) - 內置發布/訂閱的事件驅動架構。
  5. 消息編碼(Message Encoding) - 基於content-type的動態編碼,支持protobuf、json,開箱即用。
  6. 服務接口(Service Interface) - 所有特性都被打包在簡單且高級的接口中,方便開發微服務。

對於有PHP/Laravel開發經驗的朋友,在某些程度上可以把Go-micro和Micro理解成Laravel與Artisan的關係,也就是開發框架和工具集的關係。在實際開發過程中,對於Micro我們只要根據文檔或者micro命令的幫助說明掌握如何使用或者何時使用即可。但是對於Go-micro這個微服務框架本身,還是有必要繼續深入了解的。特別是整個框架的可插拔設計,這是非常值得開發人員去借鑑的。

相關焦點

  • Go-Micro微服務入門(二):創建一個go-micro項目
    /order-srv/go.mod#將文件第一行的 module order-srv 修改為 module micro-demo/order-srv#解釋下為何這麼做:以微服務形式開發項目,那麼一個微服務就是一個可以獨立部署的模塊。
  • Go-Micro微服務入門(一):環境搭建
    安裝GO(golang)下載go安裝包:wget https://studygolang.com/dl/golang/go1.13.3.linux-amd64.tar.gz解壓安裝包到/usr/local目錄:tar -C /usr/local -zxvf go1.13.3.linux-amd64.tar.gz
  • go微服務框架go-micro深度學習(三)Registry服務的註冊和發現
    服務的註冊與發現是微服務必不可少的功能,這樣系統才能有更高的性能,更高的可用性。go-micro框架的服務發現有自己能用的接口Registry。只要實現這個接口就可以定製自己的服務註冊和發現。go-micro在客戶端做的負載,典型的Balancing-aware Client模式。
  • Mix PHP V2.2 發布,與 go-micro 深度集成的 PHP 微服務開發框架
    本次版本更新主要是增加微服務開發相關的組件與開發骨架,從上一次 Mix V2.1 非常激進的切換為單線程協程後 [為何從 Reactor+Manager+Worker 多進程改為單線程協程],Mix V2.2 在微服務方面也非常激進的選擇了和其他 Swoole 框架截然不同的路徑:與 go-micro 微服務生態深度集成,借用 golang 微服務生態的治理工具
  • Mix PHP V2.2 發布,與 go-micro 深度集成的 PHP 微服務開發框架...
    [為何從 Reactor+Manager+Worker 多進程改為單線程協程],Mix V2.2 在微服務方面也非常激進的選擇了和其他 Swoole 框架截然不同的路徑:與 go-micro 微服務生態深度集成,借用 golang 微服務生態的治理工具Mix Micro在很多 Swoole 框架自建微服務生態的時候,我認為微服務生態要是能與主流生態直接無縫通信可能更具有實用價值
  • Go-Micro 集成 Nacos 實戰之服務註冊與發現
    Go-Micro 概述Micro是一個微服務工具包,包括:API提供並將 HTTP 請求路由到相應微服務的 API 網關。它充當微服務訪問的單一入口,將HTTP 請求轉換為 RPC 並轉發給相應的服務也可以用作反向代理。
  • 什麼是Micro?它是微服務發展的未來……
    Micro則是一個開源項目,致力於簡化微服務開發。它開始了一個面向微服務開發的微操作框架。但即便在那之前,go micro還是一個被黑客攻擊的小庫,它的創建是為了在2014年時開發一個「kubernetes as a service」項目。Go Micro的想法源於將kubernetes構建為一個服務的嘗試,它作為一組微服務語言編寫,但剛剛面世不久就夭折。
  • 老王學習go語言——2.1 Go Kit和Go Micro
    https://gokit.io/faq/#introduction-mdash-understanding-go-kit-key-concepts這裡只挑重點列一下:1.go-Kit不是MVC框架,基礎結構是transport, EndPoint,Service,請求首先進入transport,然後是Endpoint,最後由Service來處理。
  • 華為雲 ServiceComb 抄襲 Go Micro 代碼,已致歉
    2017年6月19日在 LC3 開源峰會上,華為宣布開源了微服務框架 ServiceComb,華為稱它是 FusionCloud 解決方案中 PaaS 平臺的重要組成部分,內置了高可靠性運行、
  • Go周報2:埠掃描、json瓶頸、slice修改、微服務
    三、關於Go和python互調 很多公司並不是只有一個Go技術棧。諾,有個群友公司就是python+Go技術棧,於是就有了一個問題,以前的一些祖傳庫是python寫的。又不想重寫,GO能不能調。那麼介紹個庫 https://github.com/sbinet/go-python Python本身支持C API。go又有cgo 無縫調用C。
  • Dubbo-go 雲原生核心引擎探索
    ,也湧現了一批 Go 的微服務框架,如 go-micro、go-kit、Dubbo-go 等,跟微服務治理相關的組件也逐漸開始在 Go 生態發力,如 Sentinel、Hystrix 等都推出了 Go 語言版本,而作為微服務框架的核心引擎--註冊中心,也是必不可缺少的組件,市面已經有多款註冊中心支持 Go 語言,應該如何選擇呢?
  • 2019 Go 開發者路線圖,請收下這份指南!
    今天,CSDN就為大家推薦了一份來自Github的2019年Go開發者指南,幫助大家快速入門Go語言。該指南提供了詳細的進階路線圖,列出了學習Go開發所需的各類知識和技能,而且每個知識點也附上啦相應的學習資源。相信無論是零基礎的新手,還是對Go語言有一定了解的開發者,都能夠有所收穫。
  • Java微服務可以和Go一樣快嗎?
    前提我們想進行實驗,看看Java微服務是否可以像Go微服務一樣快速運行。 業界普遍認為Java是"老的","慢的"和"無聊的"。 Go是"快速","新"和"酷"。 但是我們想知道這些特性是否得到實際性能數據的保證或支持。
  • Go語言愛好者周刊:第 68 期—一道關於浮點數的題
    ;7 01:21 victoria-metrics-go-tip這期看一道關於 IEEE-754 浮點數的題,以下代碼輸出什麼?1、Micro 3.0.0 發布[3]雲原生微服務開發平臺
  • Go語言憑什麼進到2017年程式語言排行榜的前十
    Go裡面的標準庫基本上已經是非常穩定了,特別是我這裡提到的三個,網絡層、系統層的庫非常實用。6、部署方便:二進位文件、Copy部署我相信這一點是很多人選擇Go的最大理由,因為部署太方便了,所以現在也有很多人用Go開發運維程序。7、簡單的並發它包含了降低心智的並發和簡易的數據同步,我覺得這是Go最大的特色。
  • Sentinel Go0.6發布,支持Warm-Up預熱流控
    Sentinel Go 0.6.0 正式發布,該版本帶來了 Warm-Up 預熱流控特性、go-micro 框架的適配模塊,以及其它的一些特性改進。WarmUp 預熱控制的示例可以參考 qps_warm_up_example.go
  • Go實戰--微框架(Goji+Mongodb構建微服務)
    生命不止,繼續 go go go!!!文檔地址:https://godoc.org/goji.io獲取:goStar:3354獲取:go("/thing", myHandler) goji.Serve()}12345678910111213141516171819Goji+Mongodb搭建微服務
  • Spring Cloud 微服務入門教程(一):微服務介紹
    前言我的個人博客網站一直堅持每年一次大更新,但這次我決定不更新了,因為再更新就是使用微服務了,一個小網站用微服務架構就有點殺雞用牛刀了,而且維護起來比較費時費力。所以直接寫成教程文章就不再大動幹戈的去重寫我的博客了。
  • 微服務 - 如何進行服務限流和熔斷
    C又調用微服務E。假設某一時刻,微服務E變為不可用。微服務C需要等待微服務E返回結果,於是請求就會逐漸堆積在微服務C,形成阻塞。隨著微服務C堆積的請求不斷增加,微服務A也會隨之慢慢阻塞。因為伺服器所能支撐的並發數有限,所以最終會耗盡伺服器資源,從而導致調用鏈條上更多的微服務不可用,形成雪崩效應。這種由一個服務崩潰導致整條服務鏈崩潰的情況,我們就稱之為服務雪崩。
  • 高可用流控降級組件 Sentinel Go 1.0 GA 版本正式發布
    Sentinel 是阿里巴巴開源的,面向雲原生、分布式服務架構的高可用流量防護組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統自適應保護等多個維度來幫助開發者保障微服務的穩定性。