微服務最全詳解(圖文全面總結)
來源:mikechen的網際網路架構
微服務是架構的必備技能,微服務主要涉及:服務的發現、註冊、路由、熔斷、降級、分散式配置等,下面我全面的來詳解微服務
註冊中心
註冊系統中所有服務的地方,所有的服務都會註冊在這裡,如下圖所示:
關係呼叫說明:
服務生產者啟動時,向服務註冊中心註冊自己提供的服務;
服務消費者啟動時,在服務註冊中心訂閱自己所需要的服務;
消費者從提供者中呼叫服務;
服務註冊
首先服務註冊與發現是來自於微服務架構的產物。
服務註冊指的是將自身服務資訊註冊到註冊中心,服務資訊包括:服務所在主機IP、服務的埠號Port、暴露服務協議等資訊。
如下圖所示:
Service B 把自己註冊到註冊中心,這就叫 服務註冊。
當下用於服務註冊的工具非常多ZooKeeper,Consul,Etcd, 還有Netflix家的Eureka 等等。
不論使用那種工具,服務註冊一定是要確保高可用的,否則重則的是所有的服務都沒法呼叫,輕則新的服務不能上線。
服務發現
服務發現即透過註冊中心,獲取到註冊到其中的服務例項的資訊,透過這些資訊去請求它們提供的服務。
如下圖所示:
ServiceA去註冊中心獲取服務例項的資訊,這就是服務發現。
負載均衡
當多個服務提供者時,可以根據負載均衡演算法,比如:如簡單輪詢、隨機連線等,自動地選擇需要呼叫的服務地址。
例如:Spring Cloud 微服務架構中的Ribbon,客戶端會有一個伺服器地址列表,在傳送請求前透過負載均衡演算法選擇一個伺服器,然後進行訪問,在客戶端就進行負載均衡演算法分配。
如下圖所示:
總共有七種負載均衡策略可供選擇,可以根據自己的業務場景進行選擇:
輪詢RoundRobinRule:這也是Ribbon預設的策略;
隨機RandomRule;
響應時間權重ResponseTimeWeightedRule:為每個服務設定權重,響應時間越短,權重越大;
最少併發數策略BestAvailableRule;
重試策略RetryRule;
可用性敏感策略AvailabilityFilteringRule;
區域性敏感策略ZoneAvoidanceRule;
服務熔斷
服務熔斷其實可以理解為類似於電錶的保險絲,一旦某個時刻電壓過載,那麼保險絲就熔斷了。
服務熔斷的實現,大體流程如下圖所示:
對於熔斷機制的實現,設計了三種狀態:
1.熔斷關閉狀態(Closed)
服務沒有故障時,熔斷器所處的狀態,對呼叫方的呼叫不做任何限制。
2.熔斷開啟狀態(Open)
在固定時間視窗內,比如:預設10秒,介面呼叫出錯比率達到一個閾值,會進入熔斷開啟狀態,進入熔斷狀態後,後續對該服務介面的呼叫不再經過網路。
3.半熔斷狀態(Half-Open)
在進入熔斷開啟狀態一段時間之後,比如:Hystrix預設5秒,熔斷器會進入半熔斷狀態。
服務閘道器
服務閘道器也稱為API閘道器,是服務呼叫的唯一入口。
例如,在微服務架構中,Zuul是Spring Cloud中的微服務閘道器,是為微服務架構中的服務提供了統一的訪問入口。
Gateway服務閘道器主要功能,如下圖所示:
例如包含上圖中的Gateway功能:
服務路由;
安全認證;
流量控制;
日誌監控;
熔斷保護等功能。
服務跟蹤
隨著微服務架構的流行,服務按照不同的維度進行拆分,在複雜的微服務架構系統中,會形成一個複雜的分散式服務呼叫鏈路,如下圖所示:
面對複雜的呼叫鏈路就帶來一系列問題:
如何快速發現問題?
如何判斷故障影響範圍?
如何梳理服務依賴以及依賴的合理性?
如何分析鏈路效能問題以及實時容量規劃?
而鏈路追蹤的出現正是為了解決這種問題,它可以在複雜的服務呼叫中定位問題。
例如:Spring Cloud Sleuth鏈路追蹤 是 Spring Cloud的鏈路追蹤元件,實現了分散式跟蹤解決方案。
分散式配置中心
將本地化的配置資訊,比如:properties、yml等配置資訊,註冊到配置中心,實現程式包在開發、測試、生產環境的無差別性方便程式遷移。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024924/viewspace-3006576/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 負載均衡最全詳解(圖文全面總結)負載
- 分散式儲存最全詳解(圖文全面總結)分散式
- 高併發架構最全詳解(圖文全面總結)架構
- SSO單點登入最全詳解(圖文全面總結)
- DDD領域驅動最全詳解(圖文全面總結)
- 9大效能最佳化方案詳解(圖文全面總結)
- Java泛型詳解,史上最全圖文詳解!Java泛型
- 微服務 Zipkin 鏈路追蹤原理(圖文詳解)微服務
- 最全總結 JavaScript Array 方法詳解JavaScript
- 圖文詳解:如何給女朋友解釋什麼是微服務?微服務
- 最全面的 MySQL 索引詳解MySql索引
- 微服務架構中的分散式事務全面詳解 -DZone微服務微服務架構分散式
- 一文詳解微服務架構微服務架構
- ZooKeeper最全詳解(萬字圖文總結)
- 最全面的JavaScript除錯技巧總結JavaScript除錯
- 一文讀懂微服務架構——【詳解】微服務架構
- MySQL 事務最全詳解MySql
- 微服務學習與思考(03):微服務總體架構圖解微服務架構圖解
- Kafka 架構和原理機制 (圖文全面詳解)Kafka架構
- 事務隔離級別(圖文詳解)
- 可能是最全面的 python 字串拼接總結Python字串
- 可能是最全面的python字串拼接總結Python字串
- 最全面的C/C++編碼規範總結C++
- Flutter學習總結系列----Flutter基礎全面詳解Flutter
- 訊息佇列MQ最全詳解(萬字圖文總結)佇列MQ
- 一文詳解微服務架構的資料設計微服務架構
- 最全的微服務知識科普微服務
- Java單連結串列反轉圖文詳解Java
- Canvas類的最全面詳解 - 自定義View應用系列CanvasView
- 最全面最詳細的字符集講解來了!
- 擴散模型 (Diffusion Model) 之最全詳解圖解模型圖解
- 史上最全的微服務知識科普微服務
- 一文帶你瞭解微服務架構和設計(多圖)微服務架構
- 史上最全 Redis 高可用解決方案總結Redis
- 高併發下的資料一致性保障(圖文全面總結)
- PopClip使用教程圖文詳解
- Git使用教程圖文詳解Git
- 微服務閘道器Gateway實踐總結微服務Gateway