首頁  >  文章  >  後端開發  >  golang中什麼是微服務

golang中什麼是微服務

青灯夜游
青灯夜游原創
2023-01-03 10:11:544382瀏覽

在golang中,微服務(或微服務架構)是一種軟體架構風格(技術),它提倡將單一應用程式分割成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間採用輕量級的通信機制互相溝通(通常是基於HTTP的RESTful API);每個服務都圍繞著具體業務進行構建,並且能夠獨立地部署到生產環境、類生產環境等。

golang中什麼是微服務

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

什麼是微服務

微服務(Microservices Architecture)是一種軟體架構風格,服務導向的架構(SOA)架構樣式的一種變體,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運作在獨立的進程中,服務與服務間採用輕量級的通訊機制互相溝通(通常是基於HTTP的RESTful API)。每個服務都圍繞著具體業務進行構建,並且能夠獨立地部署到生產環境、類生產環境等。另外,應盡量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據上下文,選擇合適的語言、工具對其進行建構。

微服務(或微服務架構)是一種雲端原生架構方法,其中單一應用程式由許多鬆散耦合且可獨立部署的較小元件或服務組成。這些服務通常

  • 有自己的堆疊,包括資料庫和資料模型;

  • 透過REST API,事件流和訊息代理程式的組合相互通訊;

  • 它們是按業務能力組織的,分隔服務的線通常稱為有界上下文。

儘管有關微服務的許多討論都圍繞著體系結構定義和特徵展開,但它們的價值可以透過相當簡單的業務和組織收益更普遍地理解:

  • 可以更輕鬆地更新程式碼。

  • 團隊可以為不同的元件使用不同的堆疊。

  • 元件可以彼此獨立地進行縮放,從而減少了因必須縮放整個應用程式而產生的浪費和成本,因為單一功能可能面臨過多的負載。

我們為什麼要使用微服務?

這種架構有助於我們用各部分、小型模組描繪整個應用程序,使其更容易理解、開發和測試;有助於我們將各個服務視為獨立且又清晰指明其用途的服務。更進一步地,它有助於保持專案架構的一致性(最初設計的架構和實際開發完成的架構差異不大)。它還可以透過建立不同的獨立團隊來進行服務的部署和擴展,從而各團隊能夠並行地開發。在這個架構中重構程式碼更容易。它也支援連續交付和部署流程(CI/CD)。

為什麼要使用 go 建立微服務?

在深入研究這個問題之前。首先,我說一下 Golang 的優勢。雖然 Golang 是一門新的語言,但與其他語言相比,它有很多優勢。用 Golang 寫的程式更加健壯。它們能夠承受程式使用運行的服務所建構的繁重負載。 Golang 更適合多處理器系統和 web 應用程式。此外,它容易地與 GitHub 集成,管理非集中的程式碼包。微服務架構的用處大部分體現在當程式需要伸縮(scalable)。如果有一種語言可以完全符合標準,那麼它就是 Golang。原因是它繼承自 C-family 程式語言,用 Golang 編寫的元件更容易與同一家族中其他語言編寫的元件結合。

儘管 Go 出身於 C-family,但它比 C / C 更有效率。它語法比較簡單,有點像 Python。它穩定語法, 自第一次公開發布以來,它沒有太大變化,也就是說它是後向兼容的。與其他語言相比,這讓 golang 佔了上風。除此之外,Golang 的效能比 python 和 java 高出不少。錦上添花的是,它又像 C/C 簡單的同時又易於閱讀和理解,使它成為開發微服務應用的絕佳選擇。

Golang中的微服務架構框架

#下面,我們討論一下可以用於微服務架構的框架。有以下一些框架:

Go Micro

Go Micro 是目前為止我遇到的最受歡迎的RPC框架。它是一個可插拔的RPC框架。 Go Micro 為我們提供了以下功能:

  • 服務發現: 程式自動註冊到服務發現系統

  • 負載平衡: 它提供了客戶端負載平衡,這有助於平衡服務實例之間的請求

  • 同步通訊: 提供Request/Response 傳輸層

  • #非同步通訊: 具有內建的發布和訂閱功能

  • #訊息編碼: 可以利用header 中Content-Type 進行編碼和解碼

  • RPC客戶端/伺服器端: 利用上述功能並提供建置微服務所需的介面

#Go Micro 架構由三層組成。第一層抽象為服務層。第二層為 client-server 模型層。 serrver 用於編寫服務的區塊組成,而 client 為我們提供接口,其唯一目的是向 server model 中編寫的服務發出請求。

第三層有以下類型的外掛:

  • Broker: 在非同步通訊中為message broker(訊息代理程式)提供介面

  • Codec: 用於加密或解密訊息

  • Registry: 提供服務搜尋功能

  • Selector: 在register 上建置了負載均衡

  • Transport: Transport是服務與服務之間同步請求/回應的通訊介面

它還提供了一個名為Sidecar 的功能。 Sidecar 可讓您整合以Go以外的語言編寫的服務。它也為我們提供了gRPC編碼/解碼、服務註冊和HTTP 請求處理

#GO Kit

Go Kit 是一個用於建立微服務的程式設計工具包。與 Go Micro不同,它是一個可以以二進位套件匯入的庫。 Go Kit 規則很簡單。如下:

  • 沒有全域變數

  • 陳述式組合

  • 明確依賴

  • Interface as Contracts (介面合約)
  • 領域驅動設計(DDD)
  • Go Kit 提供以下程式碼套件:
  • Authentication 鑑權: BasicAuth 和JWT
  • Transport 協定: HTTP, gRPC 等
  • #Logging 日誌: 服務中的結構化日誌介面
  • Metrics 度量: CloudWatch,Statsd, Graphite等

Tracing 分散式追踪: Zipkin and Opentracing

Service discovery 服務發現: Consul, Etcd, Eureka等

  • Circuitbreaker 限流熔斷: Hystrix 在Go 語言的實現

  • Go Kit 服務架構如下

  • Gizmo
  • Gizmo 是來自《紐約時報》的微服務工具包。它提供了將伺服器守護程序和 pubsub 守護程序放在一起的套件。它公開了以下套件:
  • Server: 提供兩個伺服器實作: SimpleServer(HTTP)和RPCServer(gRPC)
  • Server/kit : 基於Go Kit的實驗碼包
  • Config 配置: 包含來自JSON檔、Consul k/v 中的JSON blob 或環境變數的組態功能

Pubsub: 提供用於從佇列中發布和使用資料的通用介面
  • #Pubsub/pubsubtest: 包含發布者和訂閱者介面的測試實作
  • #Web: 用於從請求查詢和有效負載解析類型的外部函數
  • #Pubsub套件提供了處理以下佇列的介面:
  • pubsub/aws: 用於Amazon SNS/SQS

#pubsub/gcp: 用於Google Pubsub

pubsub/ kafka: 用於Kafka topics

pubsub/http: 使用者HTTP 推送

所以,在我看來,Gizmo 介於Go Micro 和Go Kit 之間。它不像 Go Micro 那樣是一個完全的黑盒子。同時,它也不像 Go Kit 那麼原始。它提供了更高層級的建置元件,例如配置和 pubsub 套件#########Kite#########Kite 是在 Go 中開發微服務的框架。它公開RPC client 和 Server 端程式碼包。建立的服務將自動註冊到服務發現系統 Kontrol。 Kontrol 是用 Kite 寫的,它本身就是一個 Kite service。這意味著 Kite 微服務在自身的環境中運作良好。如果需要將 Kite 微服務連接到另一個服務發現系統,則需要客製化。這是我從清單中選擇Kite 並決定不介紹這個框架的重要原因之一######【相關推薦:###Go影片教學###、###程式設計教學###】## #

以上是golang中什麼是微服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn