歡迎光臨
每天分享高質量文章

微服務系統下架構可視化上的探索

點擊▲關註 “資料和雲”   給公眾號標星置頂

更多精彩 第一時間直達

導讀:採用微服務架構後,瞭解服務之間的關係及依賴是一個比較有挑戰的問題。微服務改造後的實際架構模型可能與預想的架構已經存在很大的差異,架構師或系統運維人員需要精確地瞭解資源實體的構成和交互情況。阿裡巴巴在管理微服務方面具有豐富經驗,本文總結了阿裡巴巴工程師在微服務可視化方面探索。

 

為什麼需要架構可視化

隨著企業進行微服務架構改造,系統架構複雜度越來越高,架構變化日益頻繁,微服務改造後的實際架構模型可能與預期已經產生了巨大差異,架構師或系統運維人員很難準確記憶所有資源實體的構成和交互情況;其次,系統架構在動態演化過程中可能引入了一些不可靠的因素,比如弱依賴變強依賴、區域性容量不足、系統耦合過重等,給系統的穩定性帶了極大的安全隱患。所以我們每次在面對系統改造、業務大促以及穩定性治理工作之前,都會通過梳理架構圖的方式,呈現系統架構中個組件之間的交互方式,架構可視化能夠清晰的協助我們識別架構中存在的問題以及建立高可用的系統。

(Daniel Woods 在講微服務時時的一張架構圖)

 

架構可視化後,可以給我們帶來以下幾點但不局限於此的優勢:

  • 確定系統邊界

    一張好的架構圖,應該明確系統所包含的各個組件以及各個組件之間的核心呼叫關係,這些組件的集合就是系統的處理邊界,系統架構的邊界在一定程度上也反映了業務域的邊界。

  • 架構問題識別

    基於高可用的架構準則,結合可視化的架構圖,可以評估架構可能存在的安全風險,比如系統在容災、隔離以及自愈維度下的健壯性。其次,一些架構鏈路可視化工具(比如鷹眼)在實際工作中確實大大提高了開發者排查與定位問題的效率。

  • 提高系統可用性

    有了系統架構的上下游依賴關係圖,在故障發生時,開發人員可以借助依賴資料快速定位到問題的來源,極大縮短問題修複時間(MTTR)。借助架構圖,我們還可以梳理出系統中存在的強弱依賴,在業務高峰期對弱依賴進行降級,或者針對系統依賴的各個組件進行故障模擬,以評測系統整體在面對區域性故障的可靠性。

常見架構可視化的做法

我們熟知的架構圖是靜態的停留在PPT上的,很多時候我們的架構已經發生了非常大的變化,但是我們還在使用那張看上去很經典卻早已過時的架構圖。長時間使用與實際架構不符的架構圖對線上架構的認知的危害是巨大的,我們需要在腦海中不斷更新對系統架構的視圖,以保持對系統架構的敏感度。每年的大促或者重大系統改造成為我們梳理系統架構、對架構進行重新認知的機會,此刻我們需要通過各種工具查看系統的各個組件分佈以及不同組件的內部與外部的依賴關係,這種梳理架構圖的方法是最常用的方式,權且稱之為“手工繪製法”。

 

手工經常乾的事情,就有追求效率的同學使用計算機系統帶來的自動化手段幫助自己做這件事情,比如我們常常看到的基於資料埋點的微服務可視化解決方案,這類架構可視化手段通常在分佈式追蹤、APM等監控領域使用較多,下圖為某APM產品提供的應用維度架構可視化方案:

我們稱這種可視化方式為“埋點式感知法”,架構組件的識別是依賴關鍵的核心類檢測與埋點,此種方案存在以下弊端:

  • 語言相關性:只要是系統埋點,與語言相關的特征基本就拜托不了,需要針對不同語言提供不同的依賴包;

  • 不易維護:因為是對核心類的檢測,當組件包做了重大變更時,需要同步變更;

  • 不易擴展:因為是客戶端識別方案,客戶端一旦開放出去,新組件的支持只能等待用戶更新組件;

  • 規模受限:客戶端識別的另一個缺點是演算法受限,服務端進行識別,可以借助大資料分析等手段更有效準確的識別;

還有一種自動化架構感可視化方法,我們稱之為“無界架構感知”,是一種語言無關性的架構識別方案,其採用採集用戶主機上的行程和容器的元資料、監控數以及網路資料的最最基礎的資料,在服務端構建架構圖。

架構可視化還能怎麼做

為了最大限度上降低用戶進行架構可視化的成本,我們採用了應用無侵入的方式對微服務進行可視化,通過採集行程資料與網絡呼叫資料,構建行程間的網絡呼叫關係,構建微服務的架構信息。

 

如何讓架構可視化更有效?

我們同樣認為架構可視化的有效性跟人的認知層次有關,架構可視化的重點是確定該工具是否更好的支持自頂向下方法、自下而上方法或者兩者的結合。開發者更關心應用維度上的架構,架構師或者管理者更關心整體系統架構。所以需要針對不用的使用者提供不同層次的架構可視化視角。理想的架構圖需要支持宏觀維度以及不斷下鑽下的微觀視角,我們對架構進行了分層設計,目前分為行程層、容器層和主機層,後期我們可能會繼續上擴或者下鑽支持地域層或者服務層。

 

下圖為一臺阿裡雲ECS上實現架構可視化後的三層架構界面:

 

應對架構的可變性

沒有哪家科技公司的系統架構是一成不變的,系統架構會隨著系統的版本迭代不斷進行演化。所以對架構可視化操作,還需要具備隨著時間的推移可對架構信息進行自動更新已經回溯的能力。在我們提供的架構感知產品中預設架構圖會隨著時間自動掃清,同時支持對歷史的回溯,你可以選擇歷史中的某一刻查看架構信息,比如,重大版本的變更時,發佈前與發佈後的系統架構是否發生了違背一些高可用原則的問題,抑或排查是否出現了不該有的依賴問題。

 

架構可視化的核心

軟體架構可視化的核心點是尋找在軟體體系結構中有意義和有效的元素視圖以及這些元素之間的關係。我們認為一款優秀的軟體架構可視化產品應該幫助用戶排除掉不重要的信息,給用戶呈現出對他們有價值的視圖,特別是在微服務架構下龐大而複雜的呼叫關係鏈場景中。這裡面的核心點是有意義和有效,要做到這兩點,首先需要識別什麼是有意義和有效的元素和關係,我們在此領域做的事情歸納起來就是“識別”,識別機器上的每個行程是什麼,發生的網絡呼叫遠端是什麼,唯有知曉了這些元素是什麼我們才有理由和依據來判斷是否對用戶有意義以及其在用戶架構中的重要程度。

架構可視化中的元素識別

在梳理了大量架構圖,我們發現用戶關心的架構元素主要分為三類:

 

1. 自己的應用服務;

2. 應用對外部的資源依賴;

3. 服務器本身的信息。 

 

應用對外部資源的依賴通常以其它應用和通用中間件或者儲存服務兩種形式存在。故我們將需要識別的行程分為:應用服務和常見的組件服務(比如Redis、MySQL等),這些組件服務又分為用戶自建的服務和使用公有雲提供的服務,特別是對於Cloud Native應用來說,雲服務的識別顯得格外重要。

 

目前,我們已經實現了包含Redis、MySQL、Tomcat等常見的21種三方服務組件的識別,此組件庫還在不斷擴張中,目的就是最大限度的知曉架構中的元素到底是什麼。

 

(圖中展示了節點詳情的請求流向以及節點的監控等基本信息)

 

(圖中展示了識別的主機上的部分行程信息)

有了架構可視化還能做什麼

架構可視化不是目的,只是實現系統高可用性的手段。借助架構感知採集到的架構資料,在識別了使用的組件(我們對MySQL、Redis、MQ等的統稱)後,我們借助這些組件以及與組件匹配的故障庫,會自動發現這些組件可能遇到的故障,從而更方便地對組件進行各種故障的模擬與演練,以提高系統的健壯性。其次,通過架構感知識別Java Application 應用,如果發現其負載較高,配合一些限流降級組件,可以提高服務的可用性。

(如何借助架構感知進行系統限流配置)

 

架構可視化是我們給用戶提供的高效運維和管控的視窗,我們期望通過豐富的雲原生資料體系配合架構圖的可視化以及可操作性,建立起以應用為中心的運維一體化平臺。在未來,我們會在架構可視化上加入監控和容器服務,以豐富架構感知的資料維度;其次,會在資料的深度挖掘和智慧化消費上投入更多精力,真正讓資料成為企業的核心價值,讓資料成為保障業務的穩定性的利器。

 

作者簡介:嚴明明(花名:心遠),阿裡巴巴集團安全生產高可用架構組高級開發工程師,阿裡雲『應用高可用服務AHAS』研發負責人。曾創業開發跨境電商系統,2011年加入淘寶,長期關註Chaos Engineering 混沌工程。

 

 

轉載自:高可用架構

    赞(0)

    分享創造快樂