大神講解微服務治理的技術演進和架構實踐

技術瑣話發表於2019-04-28

摘要:隨著業務的發展,規模擴大,服務越來越多,需要協調線上執行的各個服務,保障服務的SLA;基於服務呼叫的效能KPI資料進行容量管理,合理分配各服務的資源佔用;對故障業務做服務降級、流量控制、流量遷移等快速恢復業務。怎樣的服務治理框架能滿足需求?

大神講解微服務治理的技術演進和架構實踐
李林鋒
華為PaaS平臺架構師,8年Java NIO通訊框架、平臺中介軟體架構設計和開發經驗,開源框架Netty中國推廣者。精通Netty、Mina、RPC框架、企業ESB匯流排、分散式服務框架、雲端計算等技術,《Netty權威指南》、《分散式服務框架原理與實踐》作者,公司總裁技術創新獎獲得者

我今天分享的主題是《微服務治理的技術演進和架構實踐》

本次分享,將分為三個部分。

  1. 為什麼需要服務治理

  2. 服務治理的技術演進歷程

  3. 雲端微服務治理框架設計

為什麼需要服務治理?

第一、業務需求

隨著業務的發展,服務越來越多,如何協調線上執行的各個服務,保障服務的SLA,對服務架構和運維人員是一個很大的挑戰。隨著業務規模的不斷擴大,小服務資源浪費等問題逐漸顯現,需要能夠基於服務呼叫的效能KPI資料進行容量管理,合理分配各個服務的資源佔用,提高機器的利用率。線上業務發生故障時,需要對故障業務做服務降級、流量控制、流量遷移等,快速恢復業務。

著開發團隊的不斷擴大,服務的上線越來越隨意,甚至發生功能相同、服務名不同的服務同時上線。上線容易下線難,為了規範服務的上線和下線,在服務釋出前,需要走服務預釋出流程,由架構師或者專案經理對需要上線的服務做釋出稽核,稽核通過的才能夠上線。為了滿足服務線下管控、保障線上高效執行,需要有一個統一的服務治理框架對服務進行統一、有效管控,保障服務的高效、健康執行。

第二、技術需求

大部分服務化框架的服務屬性通過XML配置或者Java註解的方式進行定義,以服務端流量控制為例:

大神講解微服務治理的技術演進和架構實踐

服務釋出的XML檔案通常會打包到服務提供者的jar包中,部署在Java Web或者Java Container容器中,儲存在服務端的本地磁碟中。

大神講解微服務治理的技術演進和架構實踐

無論採用註解還是XML配置的方式,如果需要在執行態動態修改服務提供者的流控閾值,都需要在本地修改配置或者修改原始碼,重新打包部署並升級應用。無法實現線上、配置化的修改和動態生效。由於諸如流控閾值、服務的超時時間等無法預測出最優值,需要修改之後上線驗證,根據服務執行效果決定是否再做調整,因此經常需要反覆調整,採用修改原始碼-重新打包部署-應用升級的方式進行服務治理,效率低下。因此,在技術上需要一個服務治理框架,提供Web Portal,微服務運維或者治理人員通過線上配置化的方式修改服務提供者或者消費者的屬性,可以實時動態生效。

服務治理的技術演進歷程

第一代服務治理 SOA Governance: 以IBM為首的SOA解決方案提供商推出的針對企業IT系統的服務治理框架,它主要聚焦在對企業IT系統中異構服務的質量管理、服務釋出審批流程管理和服務建模、開發、測試以及執行的全生命週期管理。

第二代以分散式服務框架為中心的服務治理:隨著電商和移動網際網路的快速發展,基於電商平臺的統一分散式服務框架的全新服務治理理念誕生,它聚焦於對內部同構服務的線上治理,保障線上服務的執行質量。相比於傳統IT架構的服務治理,由於服務的開發模式、部署規模、組網型別、業務特點等差異巨大,因此服務治理的重點也從線下轉移到了線上服務質量保障。

第三代以雲化為核心的雲端微服務治理架構:2013年至今,隨著雲端計算和微服務架構的發展,以AWS為首的基於微服務架構   雲服務化的雲端服務治理體系誕生,它的核心理念是服務微自治,利用雲排程的彈性和敏捷,逐漸消除人工治理。微服務架構可以實現服務一定程度的自治,例如服務獨立打包、獨立部署、獨立升級和獨立擴容。通過雲端計算的彈性伸縮、單點故障遷移、服務健康度管理和自動容量規劃等措施,結合微服務治理,逐步實現微服務的自治。

第一代 SOA Governance服務治理

第一代SOA Service GovernanceSOA Governance的定位:面向企業IT系統異構服務的治理和服務生命週期管理,它治理的服務通常是SOA服務。傳統的SOA Governance包含四部分內容:1.服務建模:驗證功能需求與業務需求,發現和評估當前服務,服務建模和效能需求,開發治理規劃。2.服務組裝:建立服務更新計劃,建立和修改服務以滿足所有業務需求,根據治理策略評估服務,批准組裝完成。3.服務部署:確保服務的質量,措施包括功能測試、效能測試和滿足度測試,批准服務部署。4.服務管理:在整個生命週期內管理和監控服務,跟蹤服務登錄檔中的服務,根據服務質量等級協議(SLA)上報服務的效能KPI資料進行服務質量管理。

SOA Governance 工作原理圖如下所示:

大神講解微服務治理的技術演進和架構實踐

傳統SOA Governance的主要缺點如下:1.分散式服務框架的發展,內部服務框架需要統一,服務治理也需要適應新的架構,能夠由表及裡,對服務進行細粒度的管控。2.微服務架構的發展和業務規模的擴大,導致服務規模量變引起質變,服務治理的特點和難點也隨之發生變化。3.缺少服務執行時動態治理能力,面對突發的流量高峰和業務衝擊,傳統的服務治理在響應速度、故障快速恢復等方面存在不足,無法更敏捷應對業務需求。

第二代分散式服務框架服務治理

分散式服務框架的服務治理定位:面向網際網路業務的服務治理,聚焦在對內部採用統一服務框架服務化的業務執行態、細粒度的敏捷治理體系。

治理的物件:基於統一分散式服務框架開發的業務服務,與協議本身無關,治理的可以是SOA服務,也可以是基於內部服務框架私有協議開發的各種服務。

治理策略:針對網際網路業務的特點,例如突發的流量高峰、網路延時、機房故障等,重點針對大規模跨機房的海量服務進行執行態治理,保障線上服務的高SLA,滿足使用者的體驗。常用的治理策略包括服務的限流降級、服務遷入遷出、服務動態路由和灰度釋出等。

分散式服務框架典型的服務治理體系如下所示:

大神講解微服務治理的技術演進和架構實踐

第三代雲端微服務治理

隨著雲端計算的發展,Dev&Ops逐漸流行起來,基礎設施服務化(IaaS)為大規模、批量流水線式軟體交付提供了便利,AWS做為全球最大的雲端計算解決方案提供商,在微服務雲化開發和治理方面積累了非常多的經驗,具體總結如下

  1. 全公司統一服務化開發環境,統一簡單化服務框架(Coral Service),統一執行平臺,快速高效服務開發;

  2. 所有後端應用服務化,系統由多項服務化元件構成。

  3. 服務共享、原子化、重用。

  4. 服務由小研發團隊(2 Pizza Team)負責服務開發、測試、部署和治理,運維整個生命週期支撐。

  5. 高度自動化和Dev&Ops支援,一鍵式服務部署和回退。

  6. 超大規模支援:後臺幾十萬個服務,成千上萬開發者同時使用,平均每秒鐘有1-2個服務部署。

  7. 嘗試基於Docker容器部署微服務。

8.服務治理是核心:服務效能KPI統計、告警、服務健康度管理、靈活的彈性伸縮策略、故障自動遷移、服務限流和服務降級等多種治理手段,保障服務高質量執行。

雲端微服務治理架構設計

雲端微服務治理架構設計的目標如下:

  1. 防止業務服務架構腐化:通過服務註冊中心對服務強弱依賴進行分析,結合執行時服務呼叫鏈關係分析,梳理不合理的依賴和呼叫路徑,優化服務化架構,防止程式碼腐化。

  2. 快速故障定界定位:通過Flume等分散式日誌採集框架,實時收集服務呼叫鏈日誌、服務效能KPI資料、服務介面日誌、執行日誌等,實時彙總和線上分析,集中儲存和展示,實現故障的自動發現、自動分析和線上條件檢索,方便運維人員、研發人員進行實時故障診斷。

  3. 服務微管控:細粒度的執行期服務治理,包括限流降級、服務遷入遷出、服務超時控制、智慧路由、統一配置、優先順序排程和流量遷移等,提供方法級治理和動態生效功能,通過一系列細粒度的治理策略,在故障發生時可以多管齊下,線上調整,快速恢復業務。

  4. 服務生命週期管理:包括服務的上線審批、下線通知,服務的線上升級,以及線上和線下服務文件庫的建設。

  5. 靈活的資源排程:基於Docker容器,可以實現微服務的獨立部署和細粒度的資源隔離。基於雲端的彈性伸縮,可以實現微服務級別的按需伸縮和故障隔離。

雲端微服務治理架構設計雲端微服務治理從架構上可以分為三層:

大神講解微服務治理的技術演進和架構實踐

  • 第一層:微服務治理展示層,它的實現為微服務治理Portal,主要面向系統運維人員或者治理人員,提供線上、配置化的治理介面。

  • 第二層:微服務治理SDK,向服務治理提供治理後設資料、治理介面、以及客戶端的治理類庫。

  • 第三層:微服務治理服務實現層,微服務治理服務,通過服務註冊中心,重新整理服務治理屬性,同時通知服務提供者和消費者叢集各節點重新整理記憶體,使服務治理Portal下發的服務治理策略動態生效。

1.  微服務治理Portal

微服務治理Portal是微服務治理的門戶,它提供服務治理操作介面,供系統運維人員或者測試人員對線上執行的微服務進行動態治理,以保障服務的SLA。

Portal框架可以基於AngularJS等Web框架進行開發,它的門戶介面如下所示:可以支援同時配置多個服務註冊中心叢集,對不同的微服務叢集進行治理。

大神講解微服務治理的技術演進和架構實踐

選擇某個微服務叢集之後,就可以對該叢集的微服務進行治理,介面示例如下:

大神講解微服務治理的技術演進和架構實踐

點選檢視,可以檢視微服務的狀態,以及各種效能指標。點選治理,彈出選擇選單,可以對選擇的微服務進行相關的治理操作。

2.  微服務治理SDK

服務治理SDK層,它主要由如下幾部分組成:

  1. 服務治理後設資料:服務治理後設資料主要包括服務治理實體物件,包括服務模型、應用模型、治理組織模型、使用者許可權模型、資料展示模型等。後設資料模型通過Data Mapper和模型擴充套件,向上層介面遮蔽底層服務框架的資料模型,實現展示層和服務框架的解耦,後設資料也可以用於展示介面的定製擴充套件;

  2. 服務治理介面:服務治理Portal呼叫服務治理介面,實現服務治理。例如服務降級介面、服務流控介面、服務路由權重調整介面、服務遷移介面等。服務介面與具體的協議無關,它通常基於分散式服務框架自身實現,可以是Restful介面,也可以是內部的私有協議;

  3. 服務治理客戶端類庫:由於服務治理服務本身通常也是基於分散式服務框架開發,因此服務治理Portal需要整合分散式服務框架的客戶端類庫,實現服務的自動發現和呼叫;

  4. 呼叫示例:客戶端SDK需要提供服務治理介面的引數說明、注意事項以及給出常用的呼叫示例,方便前端開發人員使用;

  5. 整合開發指南:服務治理SDK需要提供整合開發指南,指導使用者如何在開發環境中搭建、整合和使用服務治理SDK。

3.  線上服務治理

線上服務治理包含多種策略,例如:流量控制、服務降級、優先順序排程等。微服務啟動的時候,將XML或者註解的服務提供者或者消費者屬性註冊到服務註冊中心,由運維人員通過服務治理Portal進行線上修改,註冊中心通知服務提供者和消費者重新整理記憶體,動態生效。

下面就這幾種典型的治理策略進行說明。

第一、流量控制

當資源成為瓶頸時,服務框架需要對消費者做限流,啟動流控保護機制。流量控制有多種策略,比較常用的有:針對訪問速率的靜態流控、針對資源佔用的動態流控、針對消費者併發連線數的連線控制和針對並行訪問數的併發控制。

  • 靜態流控主要針對客戶端訪問速率進行控制,它通常根據服務質量等級協定(SLA)中約定的QPS做全域性流量控制,例如訂單服務的靜態流控閾值為100 QPS,則無論叢集有多少個訂單服務例項,它們總的處理速率之和不能超過100 QPS。

  • 動態流控:它的最終目標是為了保命,並不是對流量或者訪問速度做精確控制。當系統負載壓力非常大時,系統進入過負載狀態,可能是CPU、記憶體資源已經過載,也可能是應用程式內部的資源幾乎耗盡,如果繼續全量處理業務,可能會導致長時間的Full GC、訊息嚴重積壓或者應用程式當機,最終將壓力轉移到叢集其它節點,引起級聯故障。觸發動態流控的因子是資源,資源又分為系統資源和應用資源兩大類,根據不同的資源負載情況,動態流控又分為多個級別,每個級別流控係數都不同,也就是被拒絕掉的訊息比例不同。每個級別都有相應的流控閾值,這個閾值通常支援線上動態調整。

  • 併發控制:針對執行緒的併發執行數進行控制,它的本質是限制對某個服務或者服務的方法過度消費,耗用過多的資源而影響其它服務的正常執行。併發控制有兩種形式:針對服務提供者的全域性控制和針對服務消費者的區域性控制。

  • 連線控制:通常分散式服務框架服務提供者和消費者之間採用長連線私有協議,為了防止因為消費者連線數過多導致服務端負載壓力過大,系統需要支援針對連線數進行流控。

4.  服務降級

大促或者業務高峰時,為了保證核心服務的SLA,往往需要停掉一些不太重要的業務,例如商品評論、論壇或者粉絲積分等。

另外一種場景就是某些服務因為某種原因不可用,但是流程不能直接失敗,需要本地Mock服務端實現,做流程放通。以圖書閱讀為例,如果使用者登入餘額鑑權服務不能正常工作,需要做業務放通,記錄消費話單,允許使用者繼續閱讀,而不是返回失敗。

通過服務治理的服務降級功能,即可以滿足上述兩種場景的需求。服務降級主要包括遮蔽降級和容錯降級兩種策略:

  • 遮蔽降當外界的觸發條件達到某個臨界值時,由運維人員/開發人員決策,對某類或者某個服務進行強制降級。

它的處理流程如下所示:

大神講解微服務治理的技術演進和架構實踐

第1步:運維人員以管理員身份登入服務治理控制檯,管理員具備服務治理的全套許可權。

第2步:運維人員選擇服務降級選單,在服務降級介面中選擇遮蔽降級。

第3步:通過服務查詢介面選擇需要降級的服務,注意服務的分組和版本資訊,指定具體的降級策略:返回null、返回指定異常還是執行本地Mock介面實現。第4步:服務治理Portal通過服務註冊中心客戶端SDK,將遮蔽降級指令和相關資訊傳送到服務註冊中心。

第5、6步:服務註冊中心接收到遮蔽降級訊息後,以事件的形式下分別群發給服務提供者叢集和服務消費者叢集。

第7步:服務消費者接收到遮蔽降級事件通知之後,獲取相關內容,更新本地快取的服務訂閱資訊。當發起遠端服務呼叫時,需要與遮蔽降級策略做匹配,如果匹配成功,則執行遮蔽降級邏輯,不發起遠端服務呼叫。

第8步:服務提供者叢集接收到遮蔽降級事件通知之後,獲取相關內容,更新本地的服務釋出快取資訊,將對應的服務降級屬性修改為遮蔽降級。

第9步:操作成功之後,服務註冊中心返回降級成功的應答訊息,由服務治理Portal介面展示。

第10步:運維人員查詢服務提供者列表,檢視服務狀態。

第11步:服務註冊中心返回服務狀態為遮蔽降級狀態。

  • 容錯降級:當非核心服務不可用時,可以對故障服務做業務邏輯放通,以保障核心服務的執行。容錯降級的工作原理如下所示:

大神講解微服務治理的技術演進和架構實踐

5.  服務優先順序排程

當系統當前資源非常有限時,為了保證高優先順序的服務能夠正常執行,保障服務SLA,需要降低一些非核心服務的排程頻次,釋放部分資源佔用,保障系統的整體執行平穩。

服務在釋出的時候,可以指定服務的優先順序,如果使用者沒有指定,採用預設優先順序策略,它的配置如下所示:

大神講解微服務治理的技術演進和架構實踐

服務的優先順序可以採用傳統的低、中、高三級配置策略,每個級別的執行比例可以靈活配置,如下所示:

大神講解微服務治理的技術演進和架構實踐

服務釋出通過擴充套件priority屬性的方式指定優先順序,服務提供者將優先順序屬性註冊到服務註冊中心並通知消費者,由消費者快取服務的優先順序,根據不同的優先順序策略進行排程。服務治理Portal通過動態修改註冊中心指定服務priority屬性的方式,實現執行態動態調整微服務的優先順序。

總結除了上面介紹的幾種常用線上治理策略,比較重要的微服務治理策略還包括:

微服務超時控制:由於微服務呼叫通常使用RPC方式,是同步阻塞的,因此需要設定服務呼叫超時時間,防止對端長時間不響應導致的應用執行緒掛死。超時控制支援在服務端或者消費端配置,需要支援方法級超時控制。

微服務路由策略:負載均衡策略是服務治理的重要特性,分散式服務框架通常會提供多種負載均衡策略,同時支援使用者擴充套件負載均衡策略。常用的路由策略包括:

  1. 隨機:採用隨機演算法進行負載均衡,通常在對等叢集組網中,隨機路由演算法訊息分發還是比較均勻的。

  2. 輪循:按公約後的權重設定輪循比率,到達邊界之後,繼續繞接。

  3. 服務呼叫時延:消費者快取所有服務提供者的服務呼叫時延,週期性的計算服務呼叫平均時延,然後計算每個服務提供者服務呼叫時延與平均時延的差值,根據差值大小動態調整權重,保證服務時延大的服務提供者接收更少的訊息,防止訊息堆積。

  4. 一致性Hash:相同引數的請求總是發到同一個服務提供者,當某一臺提供者當機時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。

  5. 粘滯連線:粘滯連線用於有狀態服務,儘可能讓客戶端總是向同一提供者發起服務呼叫,除非該提供者當機,再連線另一臺。

叢集容錯策略:消費者根據配置的路由策略選擇某個目標地址之後,發起遠端服務呼叫,在此期間如果發生了遠端服務呼叫異常,則需要服務框架進行叢集容錯,重新進行選路和呼叫。叢集容錯是系統自動執行的,上層使用者並不需要關心底層的服務呼叫過程。叢集容錯和路由策略的關係如下所示:

大神講解微服務治理的技術演進和架構實踐

常用的叢集容錯策略如下:

  1. Failover策略:服務呼叫失敗自動切換策略指的是當發生RPC呼叫異常時,重新選路,查詢下一個可用的服務提供者。通常可以配置失敗切換的最大次數和間隔週期,以防止E2E服務呼叫時延過大。

  2. Failback策略:在很多業務場景中,消費者需要能夠獲取到服務呼叫失敗的具體資訊,通過對失敗錯誤碼等異常資訊的判斷,決定後續的執行策略,例如非冪等性的服務呼叫。

  3. Failcache策略:Failcache策略是失敗自動恢復的一種,在實際專案中它的應用場景如下:- 服務有狀態路由,必須定點傳送到指定的服務提供者。當發生鏈路中斷、流控等服務暫時不可用時,服務框架將訊息臨時快取起來,等待週期T,重新傳送,直到服務提供者能夠正常處理該訊息。- 對時延要求不敏感的服務。系統服務呼叫失敗,通常是鏈路暫時不可用、服務流控、GC掛住服務提供者程式等,這種失敗不是永久性的失敗,它的恢復是可預期的。如果消費者對服務呼叫時延不敏感,可以考慮採用自動恢復模式,即先快取,再等待,最後重試。-通知類服務。例如通知粉絲積分增長、記錄介面日誌等,對服務呼叫的實時性要求不高,可以容忍自動恢復帶來的時延增加。

  4. Failfast策略:在業務高峰期,對於一些非核心的服務,希望只呼叫一次,失敗也不再重試,為重要的核心服務節約寶貴的執行資源。此時,快速失敗是個不錯的選擇。

服務灰度釋出:灰度釋出是指在黑與白之間,能夠平滑過渡的一種釋出方式。AB test就是一種灰度釋出方式,讓一部使用者繼續用A,一部分使用者開始用B,如果使用者對B沒有什麼反對意見,那麼逐步擴大範圍,把所有使用者都遷移到B上面來。灰度釋出可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度。

基於微服務的多版本管理機制   灰度路由策略,即可實現基於業務規則的灰度釋出。

多版本管理:服務上線之後,隨著業務的發展,需要對功能進行變更,或者修復線上的BUG,服務升級之後,往往需要對服務做多版本管理。服務多版本管理是分散式服務框架的重要特性,它涉及到服務的開發、部署、線上升級和服務治理。

呼叫分組管理:可以對服務按照業務領域、部署的DC資訊、服務提供商等角度對微服務進行群組化管理,同群組之間的微服務可以自由呼叫,跨群組的微服務需要進行審批和授權,以實現不同分組之間的微服務隔離。不同分組之間可以有同名同介面的微服務的不同實現,分組資訊也是服務路由的一個因子。

全線上服務文件

相對於平臺產品,業務服務的升級和修改非常頻繁,傳統依靠Java DOC進行介面說明和傳遞的方式,往往會因為缺乏文件建設或API DOC沒有及時重新整理,導致消費者拿到的介面定義說明不準確。相比於沒有文件,拿到過時、錯誤的API DOC文件對使用者的危害更大。

為了解決這個問題,需要建立服務文件中心,方便線上運維人員檢視和多團隊之間的協作,它的工作原理如下:

大神講解微服務治理的技術演進和架構實踐

可以基於Swagger UI,構建微服務線上文件庫,如下所示:

大神講解微服務治理的技術演進和架構實踐

可以參考如下連結:https://github.com/swagger-api/swagger-ui

服務上線審批下線通知機制

當團隊規模擴大之後,會劃分成平臺基線組、業務定製組等不同研發團隊,一些團隊甚至跨多地協同開發和運維。服務的上線和下線必須要嚴格管控起來,一旦不合格的服務上線並被消費者訊息,再想下線就非常困難了。

對於需要下線的服務管控也很重要,有些服務雖然呼叫頻次不高,業務量也不大。但是如果貿然下線,很有可能導致依賴它的消費者業務呼叫失敗,這會違反服務的SLA協定,給服務提供商造成損失。

服務的上線審批、下線通知機制需要建立完善起來,它的工作原理如下所示:

大神講解微服務治理的技術演進和架構實踐

除了以上介紹的常用服務治理措施,線下服務治理還包括:1.業務的梳理、服務劃分原則和方法論;2.服務跨團隊協作流程、準則、工具和方法論;3.服務的介面相容性原則和規範;4.其它...線下服務治理依團隊和業務不同,需求也不同,需要業務團隊和服務框架團隊長期梳理、實踐和優化,才能夠提升線下服務治理的效率,它的建設是個長期過程,並非一蹴而就。

雲端自治理

微服務彈性伸縮

基於PaaS雲化平臺或者Docker容器服務,可以實現基於負載的微服務彈性伸縮。

基於PaaS平臺部署微服務架構示例如下:

大神講解微服務治理的技術演進和架構實踐

基於Docker容器部署微服務示例如下:

大神講解微服務治理的技術演進和架構實踐

基於雲的動態資源排程,可以實現微服務的彈性伸縮:基於CPU、記憶體、磁碟、網路頻寬等資源佔用率的彈性伸縮策略。當VM或者容器的資源佔用達到設定的閾值之後,自動執行擴容策略,動態建立微服務的執行環境,部署並執行新的微服務例項。基於業務指標的彈性伸縮策略。例如微服務的平均時延、吞吐量、成功率等。通過對微服務的效能指標進行分散式採集、彙總和計算,判斷業務指標是否達到伸縮閾值,如果達到,則自動觸發微服務的伸縮流程,執行彈性伸縮。使用者自定義的彈性伸縮策略。可以對基於資源佔用率的伸縮策略和基於業務指標的伸縮策略做組合,實現更復雜的彈性伸縮。基於雲平臺的微服務彈性伸縮流程如下所示:

大神講解微服務治理的技術演進和架構實踐

E2E微服務生命週期管理

利用雲平臺對資源的動態編排和排程,可以實現基礎設施自動化。利用ALM(應用生命週期管理)可以實現微服務的E2E生命週期管理。

基於Docker容器的微服務基礎設施自動化流程如下所示:

大神講解微服務治理的技術演進和架構實踐

微服務上線執行之後,利用雲平臺的ALM服務,可以對微服務進行上下線、升級、回滾等生命週期管理操作:

大神講解微服務治理的技術演進和架構實踐

基於雲平臺提供的微服務生命週期管理服務,可以實現海量微服務的高效部署、升級和管理,而不需要關心物理基礎設施的環境準備和安裝,以及資源規劃等,極大的提升了微服務的上線執行效率,降低了微服務的管理成本。

微服務治理全景圖

大神講解微服務治理的技術演進和架構實踐

微服務治理涵蓋的範圍非常廣,很多治理手段也需要業務在實際開發中積累和沉澱,並沒有統一的標準,這就是實施微服務治理的困難之處。

在微服務治理髮展的同時,雲化和容器化革命也正在進行,結合雲平臺的敏捷性和彈性資源排程,微服務治理將逐步由人工治理向自動化治理演進。

微服務治理總體結構圖如下所示:

大神講解微服務治理的技術演進和架構實踐

Q&A

Q1:請問在實際使用時,前端閘道器有什麼來源框架,還有分散式跟蹤系統,有推薦嗎?

A1: 前端閘道器,開源的有WSO2,基於Java語言的,GO語言的有Tyk。

Q2:能展開講一下優先順序排程麼

A1:分散式跟蹤系統列印 埋點日誌比較簡單,但是複雜的是後端的大資料分析。採集可以基於FLume等,後端的分析可以基於HBase   Spark

Q3:請教一下,對應用層擴容很容易,很多時候一個服務慢了,根本原因是依賴的儲存  資料庫  外部介面的原因,這個時候對應用層擴容解決不了問題,paas的擴容還有什麼意義呢?資料庫擴容  涉及資料遷移,應用層連線池更新等等  paas不能簡單擴容

A3:PaaS層的擴容通常會有幾種策略:

1、基於資源使用率的擴容;

2、基於服務效能指標的擴容;

3、混合模式;

4、業務自定義擴容策略,這種場景通常是級聯擴容,也就是應用依賴的服務也需要同時做擴容,例如快取、MQ等。但是,不是所有的PaaS都支援策略4。

Q4:怎樣從傳統的系統轉化到雲服務上,在系統設計及技術架構有什麼需要注意點。

A4: 不知道你講的傳統系統是不是指的非雲系統。非雲應用轉到雲化服務有幾點設計考慮:1、服務化;2、利用雲的動態性,例如彈性伸縮等;3、統一配置,使用雲化的統一配置服務。

Q5:那mq 快取 資料庫的client都要改造  支援後端自動發現了,好多中間價的client都是配置死的,有可分享的開源實現麼

A5:包括前端的URL地址,MQ服務端的URL等,雲化之後,MQ等服務也是一種雲化服務,例如AWS的S3服務。在我們的實踐中,原來的本地配置都統一放到了配置服務上,它是基於ZK的雲化統一配置服務,地址都是從註冊中心讀取的,而不是本地配置。這樣,就可以支援動態發現。

Q6:應用服務化後,涉及服務與服務之間的遠端rpc,請問資料傳輸過程中一般採用哪種系列化方式,之間的優缺點都有哪些?還有場景

A6:幾種場景考量:1、如果服務看中的是標準化、開放性,對效能要求不是特別苛刻。則建議採用 Restful   JSON的方式;2、如果是內部各模組之間的服務化呼叫,對效能、時延要求非常高,則建議採用二進位制   私有協議的方式,例如可以參考或者選擇ProtocolBuf、Thrift等。通常而言,服務跟協議是解耦的,也就是說某個服務,可以同時釋出成多種協議。

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

相關文章