天天看點

1.3微服務--微服務應該具備的功能微服務應該具備的功能

微服務應該具備的功能

一、重點總結

“服務”是一個獨立運作的單元元件,每個單元元件運作在獨立的程序中,元件與元件之間通常使用HTTP 這種輕量級的通信機制進行通信,微服務具備特點:

1、按照業務來劃分服務,單個服務代碼量小,業務單一,易于維護

2、每個微服務都有自己獨立的基礎元件,例如資料庫、緩存等,且運作在獨立的程序中

3、微服務之間的通信是通過HTTP 協定或者消息元件,且具有容錯能力

4、微服務有一套服務治理的解決方案,服務之間不相合,可以随時加入和剔除服務

5、單個微服務能夠叢集化部署,并且有負載均衡的能力

6、整個微服務系統應該有一個完整的安全機制,包括使用者驗證、權限驗證、資源保護等

7、整個微服務系統有鍊路追蹤的能力

8、有一套完整的實時日志系統

微服務具備功能:

1、服務的注冊和發現

2、服務的負載均衡

3、服務的容錯

4、服務網關

5、服務配置的統一管理

6、鍊路追蹤

7、實時日志

二、服務的注冊與發現

微服務系統由很多個單一職責的服務單元組成,而每一個微服務又有衆多執行個體。由于系統的服務粒度較小,服務數量衆多,服

務之間的互相依賴成網狀,是以該需要服務注冊中心來統一管理微服務執行個體, 友善檢視每一個微服務執行個體的健康狀态

服務注冊是指向服務注冊中心注冊一個服務執行個體,服務提供者将自己的服務資訊(如服務名、IP 位址等〉告知服務注冊中心

服務發現是指當服務消費者需要消費另外一個服務時,服務注冊中心能夠告知服務消費者它所要消費服務的執行個體資訊

通常情況下, 一個服務既是服務提供者,也是服務消費者。服務消費者一般使用HTTP 協定或者消息元件來進行服務消費

服務的注冊與發現如圖所示:

1.3微服務--微服務應該具備的功能微服務應該具備的功能

服務注冊巾心會提供服務的健康檢查方案,檢查被注冊的服務是否可用

三、服務的負載均衡

在微服務架構中服務之間的互相調用一般是通過HTTP 通信協定來實作,但網絡往往具有不可靠性,為了保證服務的高可用,服務單元往往是叢集化部署的,如何确定服務消費者應該調用哪個服務提供者的執行個體就需要使用服務的負載均衡

服務的負載均衡:所有的服務都向服務注冊中心注冊,服務注冊中心持有每個服務的應用名和IP 位址等資訊,同時每個服務也會擷取所有服務注冊清單資訊。服務消費者內建負載均衡元件,該元件會向服務消費者擷取服務注冊清單資訊,并每隔一段時間重新重新整理擷取該清單。當服務消費者消費服務時,負載均衡元件擷取服務提供者所有執行個體的注冊資訊,并通過一定的負載均衡政策(開發者配置),選擇一個服務提供者的執行個體,向該執行個體進行服務消費,這樣就實作了負載均衡

1.3微服務--微服務應該具備的功能微服務應該具備的功能

服務注冊中心不但需要定時接收每個服務的心跳(用來檢查服務是否可用),而且每個服務會定期擷取服務注冊清單的資訊,當服務執行個體數量很多時,服務注冊中心承擔了非常大的負載。由于服務注冊中心在微服務系統中起到了至關重要的作用,是以必須實作高可用。解決方案是将服務注冊中心叢集化,使每個服務注冊中心的資料實時同步

1.3微服務--微服務應該具備的功能微服務應該具備的功能

四、服務的容錯

微服務在實際項目中,包含的服務數量往往非常多,服務之間的互相依賴性複雜, 一個網絡請求通常需要調用多個服務才能完成。如果個服務不可用,例如網絡延遲或故障,會影響到依賴這個不可用的服務的其他服務

1.3微服務--微服務應該具備的功能微服務應該具備的功能

如圖所示,微服務系統有很多個服務, 當服務F因某些原因導緻了服務的不可用,來自使用者的網絡請求需要調用服務F,服務F無響應,使用者的請求都處于阻塞狀态,在高并發的場景下,短時間内會導緻伺服器的線程資源消耗殆盡。 另外,依賴于服務F的其他的服務, 也會等待服務F的響應而處于阻塞狀态,進而導緻它們也不可用, 最後使整個系統處于癱瘓的狀态【雪崩效應】

為了解決分布式系統的雪崩效應,分布式系統引進了熔斷器機制:

當一個服務的處理使用者請求的失敗次數在一定時間内小于設定的閥值時,熔斷器處于關閉狀态,服務正常;

當服務處理使用者請求的失敗次數大于設定的閥值時,說明服務出現了故障,打開熔斷器, 這時所有的請求會執行快速失敗, 不執行業務邏輯;

當處于打開狀态的熔斷器時, 一段時間後會處于半打開狀态, 并執行一定數量的請求,剩餘的請求會執行快速失敗,若執行的請求失敗了,則繼續打開熔斷器;若成功了, 則将熔斷器關閉;

1.3微服務--微服務應該具備的功能微服務應該具備的功能

熔斷器機制作用:

1)将資源進行隔離,如果某個服務裡的某個API接口出現了故障,隻會隔離該API接口,不會影響到其他接口;

2)服務降級的功能。當服務處于正常的狀态時,大量的請求在短時間内同時湧入,超過了服務的處理能力,這時熔斷器會被打開,将服務降級,以免伺服器因負載過高而出現故障;

3)自我修複能力。當因某個微小的故障,例如網絡服務商的問題,導緻網絡在短時間内不可用, 熔斷器被打開

五、服務網關

微服務系統通過将資源以API 接口的形式暴露給外界來提供服務,過程:

1、在微服務系統中, API接口資源通常是由服務網關(也稱API 網關)統一暴露,内部服務不直接對外提供API 資源的暴露,在一定程度上保護了微服務系統的安全;

2、API 網關通常有請求轉發的作用, 另外它可能需要負責一定的安全驗證,網關層以叢集的形式存在。在服務網關層之前,需要加上負載均衡層,通過一定的路由政策, 将請求轉發到網關層;

3、到達網關層後,經過一系列的使用者身份驗證、權限判斷, 最終轉發到具體的服務。具體的服務經過一系列的邏輯運算和資料操作,最終将結果傳回給使用者

網關層作用:

1)網關将所有服務的API 接口資源統一聚合,對外統一暴露;

2)網關可以防止非法請求操作API 接口,對内部服務起到保護作用

3)網關可以實作監控功能,實時日志輸出,對請求進行記錄

4)網關可以用來做流量監控,在高流量的情況下,對服務進行降級

5)API 接口從内部服務分離出來,友善做測試

【服務網關架構圖】:

1.3微服務--微服務應該具備的功能微服務應該具備的功能

六、服務配置的統一管理

微服務中每個服務都有大量的配置檔案,而這些配置在不同的環境中也是不一樣的;随着服務數量的增加,配置檔案的管

理也是一件非常複雜的事,故需要有統一管理配置檔案的元件,這些配置元件所實作的功能大體相同,但又有些差别;

下面以Spring Cloud Config 為例來闡述服務配置的統一管理:

1)Config Server (配置服務)讀取配置檔案倉庫的配置資訊,其中配置檔案倉庫可以存放在配置服務的本地倉庫,也可以放在遠端的Git 倉庫

2)配置服務啟動後,讀取配置檔案資訊,讀取完成的配置資訊存放在配置服務的記憶體中

3)當啟動服務A、B 時,由于服務A 、B 指定了向配置服務讀取配置資訊,服務A 、B向配置服務讀取配置資訊

4)當服務的配置資訊需要修改且修改完成後,向配置服務發送Post請求進行重新整理,這時服務A、B會向配置服務重寫讀取配置檔案

1.3微服務--微服務應該具備的功能微服務應該具備的功能

對于叢集化的服務, 可以通過使用消息總線來重新整理多個服務執行個體。如果服務數量較多,對配置中心需要考慮叢集化部署,進而使配置中心高可用,做分布式叢集

七、服務鍊路追蹤

微服務系統是一個分布式架構的系統,微服務系統按業務劃分服務單元, 一個微服務系統有很多個服務單元,由于服務單元數量很多且業務複雜,服務與服務之間的調用有可能非常複雜, 一旦出現了異常和錯誤,就會很難去定位,是以在微服務架構中,必須實作分布式鍊路追蹤,去跟進一個請求到底有哪些服務參與,參與的順序又是怎樣的,進而使每個請求鍊路清晰可見,出了問題很快就能定位

如圖所示,在微服務系統中, 一個來自使用者的請求先達到前端A ,然後通過遠端調用,達到系統的中間件B、C(如負載均衡、網關等),最後達到後端服務D 、E ;後端經過一系列的業務邏輯計算,最後将資料傳回給使用者

1.3微服務--微服務應該具備的功能微服務應該具備的功能

對于這樣一個請求, 經曆了這麼多服務, 将它的請求過程的資料記錄下來就需要用到服務鍊路追蹤;目前,常見的鍊路追蹤元件有Google 的Dapper、Twitter 的Zipkin,以及阿裡的Eagleeye等,都是非常優秀的鍊路追蹤開源元件。

————————————————————————————————————————————

内容來源---《深入了解Spring Cloud與微服務建構》