您好,登錄后才能下訂單哦!
這篇文章主要介紹“golang微服務指的是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“golang微服務指的是什么”文章能幫助大家解決問題。
在golang中,微服務(或微服務架構)是一種軟件架構風格(技術),它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通(通常是基于HTTP的RESTful API);每個服務都圍繞著具體業務進行構建,并且能夠獨立地部署到生產環境、類生產環境等。
什么是微服務
微服務(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 并決定不介紹這個框架的重要原因之一。
關于“golang微服務指的是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。