微服務最全詳解(圖文全面總結)

碼農談IT發表於2024-02-07

來源:mikechen的網際網路架構


微服務是架構的必備技能,微服務主要涉及:服務的發現、註冊、路由、熔斷、降級、分散式配置等,下面我全面的來詳解微服務


註冊中心

註冊系統中所有服務的地方,所有的服務都會註冊在這裡,如下圖所示:

微服務最全詳解(圖文全面總結)

關係呼叫說明:

  •  服務生產者啟動時,向服務註冊中心註冊自己提供的服務;

  •  服務消費者啟動時,在服務註冊中心訂閱自己所需要的服務;

  •  消費者從提供者中呼叫服務;

 

服務註冊

首先服務註冊與發現是來自於微服務架構的產物。

服務註冊指的是將自身服務資訊註冊到註冊中心,服務資訊包括:服務所在主機IP、服務的埠號Port、暴露服務協議等資訊。



如下圖所示:

微服務最全詳解(圖文全面總結)

Service B 把自己註冊到註冊中心,這就叫 服務註冊。



當下用於服務註冊的工具非常多ZooKeeper,Consul,Etcd, 還有Netflix家的Eureka 等等。

不論使用那種工具,服務註冊一定是要確保高可用的,否則重則的是所有的服務都沒法呼叫,輕則新的服務不能上線。

 

服務發現

服務發現即透過註冊中心,獲取到註冊到其中的服務例項的資訊,透過這些資訊去請求它們提供的服務。

如下圖所示:

微服務最全詳解(圖文全面總結)

ServiceA去註冊中心獲取服務例項的資訊,這就是服務發現。

 

負載均衡

當多個服務提供者時,可以根據負載均衡演算法,比如:如簡單輪詢、隨機連線等,自動地選擇需要呼叫的服務地址。

例如:Spring Cloud 微服務架構中的Ribbon,客戶端會有一個伺服器地址列表,在傳送請求前透過負載均衡演算法選擇一個伺服器,然後進行訪問,在客戶端就進行負載均衡演算法分配。

如下圖所示:

微服務最全詳解(圖文全面總結)

總共有七種負載均衡策略可供選擇,可以根據自己的業務場景進行選擇:

  1. 輪詢RoundRobinRule:這也是Ribbon預設的策略

  2. 隨機RandomRule;

  3. 響應時間權重ResponseTimeWeightedRule:為每個服務設定權重,響應時間越短,權重越大;

  4. 最少併發數策略BestAvailableRule;

  5. 重試策略RetryRule;

  6. 可用性敏感策略AvailabilityFilteringRule;

  7. 區域性敏感策略ZoneAvoidanceRule;

 

服務熔斷

服務熔斷其實可以理解為類似於電錶的保險絲,一旦某個時刻電壓過載,那麼保險絲就熔斷了。

服務熔斷的實現,大體流程如下圖所示:

微服務最全詳解(圖文全面總結)

對於熔斷機制的實現,設計了三種狀態:

1.熔斷關閉狀態(Closed)

服務沒有故障時,熔斷器所處的狀態,對呼叫方的呼叫不做任何限制。

2.熔斷開啟狀態(Open)

在固定時間視窗內,比如:預設10秒,介面呼叫出錯比率達到一個閾值,會進入熔斷開啟狀態,進入熔斷狀態後,後續對該服務介面的呼叫不再經過網路。

3.半熔斷狀態(Half-Open)

在進入熔斷開啟狀態一段時間之後,比如:Hystrix預設5秒,熔斷器會進入半熔斷狀態。

 

服務閘道器

服務閘道器也稱為API閘道器,是服務呼叫的唯一入口。

例如,在微服務架構中,Zuul是Spring Cloud中的微服務閘道器,是為微服務架構中的服務提供了統一的訪問入口。

微服務最全詳解(圖文全面總結)

Gateway服務閘道器主要功能,如下圖所示:

微服務最全詳解(圖文全面總結)

例如包含上圖中的Gateway功能:

  1. 服務路由;

  2. 安全認證;

  3. 流量控制;

  4. 日誌監控;

  5. 熔斷保護等功能。

 

服務跟蹤

隨著微服務架構的流行,服務按照不同的維度進行拆分,在複雜的微服務架構系統中,會形成一個複雜的分散式服務呼叫鏈路,如下圖所示:

微服務最全詳解(圖文全面總結)

面對複雜的呼叫鏈路就帶來一系列問題:

  • 如何快速發現問題?

  • 如何判斷故障影響範圍?

  • 如何梳理服務依賴以及依賴的合理性?

  • 如何分析鏈路效能問題以及實時容量規劃?

而鏈路追蹤的出現正是為了解決這種問題,它可以在複雜的服務呼叫中定位問題。

例如:Spring Cloud Sleuth鏈路追蹤 是 Spring Cloud的鏈路追蹤元件,實現了分散式跟蹤解決方案。

 

分散式配置中心

將本地化的配置資訊,比如:properties、yml等配置資訊,註冊到配置中心,實現程式包在開發、測試、生產環境的無差別性方便程式遷移。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024924/viewspace-3006576/,如需轉載,請註明出處,否則將追究法律責任。

相關文章