隨著企業進行微服務架構改造,系統架構複雜度越來越高,架構變化日益頻繁,微服務改造後的實際架構模型可能與預期已經產生了巨大差異,架構師或系統運維人員很難準確記憶所有資源例項的構成和互動情況;其次,系統架構在動態演化過程中可能引入了一些不可靠的因素,比如弱依賴變強依賴、區域性容量不足、系統耦合過重等,給系統的穩定性帶了極大的安全隱患。所以我們每次在面對系統改造、業務大促以及穩定性治理工作之前,都會通過梳理架構圖的方式,呈現系統架構中個元件之間的互動方式,架構視覺化能夠清晰的協助我們識別架構中存在的問題以及建立高可用的系統。
( daniel woods 在講微服務時時的一張架構圖)
架構視覺化後,可以給我們帶來以下幾點但不侷限於此的優勢:
我們熟知的架構圖是靜態的停留在ppt上的,很多時候我們的架構已經發生了非常大的變化,但是我們還在使用那張看上去很經典卻早已過時的架構圖。長時間使用與實際架構不符的架構圖對線上架構的認知的危害是巨大的,我們需要在腦海中不斷更新對系統架構的檢視,以保持對系統架構的敏感度。每年的大促或者重大系統改造成為我們梳理系統架構、對架構進行重新認知的機會,此刻我們需要通過各種工具檢視系統的各個元件分布以及不同元件的內部與外部的依賴關係,這種梳理架構圖的方法是最常用的方式,權且稱之為「手工繪製法」。
手工經常幹的事情,就有追求效率的同學使用計算機系統帶來的自動化手段幫助自己做這件事情,比如我們常常看到的基於資料埋點的微服務視覺化解決方案,這類架構視覺化手段通常在分布式追蹤、apm等監控領域使用較多,下圖為某apm產品提供的應用維度架構視覺化方案:
我們稱這種視覺化方式為「埋點式感知法」,架構元件的識別是依賴關鍵的核心類檢測與埋點,此種方案存在以下弊端:
不易維護:因為是對核心類的檢測,當元件包做了重大變更時,需要同步變更;
不易擴充套件:因為是客戶端識別方案,客戶端一旦開放出去,新元件的支援只能等待使用者更新元件;
規模受限:客戶端識別的另乙個缺點是演算法受限,服務端進行識別,可以借助大資料分析等手段更有效準確的識別;
還有一種自動化架構感視覺化方法,我們稱之為「無界架構感知」,是一種語言無關性的架構識別方案,其採用採集使用者主機上的程序和容器的元資料、監控數以及網路資料的最最基礎的資料,在服務端構建架構圖。
為了最大限度上降低使用者進行架構視覺化的成本,我們採用了無界架構感知-應用無侵入的方式微服務進行視覺化,通過採集程序資料與網路呼叫資料,構建程序間的網路呼叫關係,構建微服務的架構資訊。使用者只需要安裝我們ahas agent探針,即可完成架構視覺化操作;對於阿里云云原生系統,我們提供了自動化安裝方式,而無需登入機器。
核心本質
軟體架構視覺化的核心點是尋找在軟體體系結構中有意義和有效的元素檢視以及這些元素之間的關係。我們認為一款優秀的軟體架構視覺化產品應該幫助使用者排除掉不重要的資訊,給使用者呈現出對他們有價值的檢視,特別是在微服務架構下龐大而複雜的呼叫關係鏈場景中。這裡面的核心點是__有意義__和__有效__,要做到這兩點,首先需要識別什麼是有意義和有效的元素和關係,我們在此領域做的事情歸納起來就是「識別」,識別機器上的每個程序是什麼,發生的網路呼叫遠端是什麼,唯有知曉了這些元素是什麼我們才有理由和依據來判斷是否對使用者有意義以及其在使用者架構中的重要程度。
在梳理了大量架構圖,我們發現使用者關心的架構元素主要分為三類:
自己的應用服務;
應用對外部的資源依賴;
伺服器本身的資訊。
應用對外部資源的依賴通常以其它應用和通用中介軟體或者儲存服務兩種形式存在。故我們將需要識別的程序分為:應用服務和常見的元件服務(比如redis、mysql等),這些元件服務又分為使用者自建的服務和使用公有雲提供的服務,特別是對於cloud native應用來說,雲服務的識別顯得格外重要。
目前,我們提供了20種阿里云云服務的識別以及包含mysql、redis、tomcat等常見的21種三方服務元件,此元件庫還在不斷擴張中,目的就是最大限度的知曉架構中的元素到底是什麼。
(圖中展示了 通過識別服務識別出來的nginx、redis元件以及阿里雲中的mysql服務和ahas服務)
(圖中展示了節點詳情的請求流向以及節點的監控等基本資訊)
(圖中展示了識別的主機上的部分程序資訊)
架構分層
我們同樣認為架構視覺化的有效性跟人的認知層次有關,架構視覺化的重點是確定該工具是否更好的支援自頂向下方法、自下而上方法或者兩者的結合。開發者更關心應用維度上的架構,架構師或者管理者更關心整體系統架構。所以需要針對不用的使用者提供不同層次的架構視覺化視角。理想的架構圖需要支援巨集觀維度以及不斷下鑽下的微觀視角,我們對架構進行了分層設計,目前分為程序層、容器層和主機層,後期我們可能會繼續上擴或者下鑽支援地域層或者服務層。
架構回溯
沒有哪個系統的架構是一成不變的,系統架構會隨著系統的版本迭代不斷進行演化。所以對架構視覺化操作,還需要具備隨著時間的推移可對架構資訊進行自動更新已經回溯的能力。在我們提供的架構感知產品中預設架構圖會隨著時間自動重新整理,同時支援對歷史的回溯,你可以選擇歷史中的某一刻檢視架構資訊,比如,重大版本的變更時,發布前與發布後的系統架構是否發生了違背一些高可用原則的問題,抑或排查是否出現了不該有的依賴問題。
可見可得
架構視覺化解決了可見的問題,但當我們從架構圖中發現了問題需要解決時,架構圖還應該給我們提供便利的可互動操作入口,讓我們可以完成問題發現與解決的閉環。比如通過架構感知監控到了某個應用的流量非常大,我們需要對應用進行限流或者預案,那麼通過架構圖,我們應該是可以完成我們期望執行的操作。在架構圖中融入可以互動的運維操作,讓我們從看到到操作,再到問題恢復後體現在圖中,這就像計算機發展史上從命令列檢視到視窗檢視的轉變。
(白屏化安裝ahas探針)
(如何借助架構感知進行系統限流配置)
我們對ahas的定位是一款資料分析型的高可用保障產品,幫助雲原生架構系統實現高可用能力的提公升。架構視覺化是我們給使用者提供的高效運維和管控的視窗,我們期望通過豐富的雲原生資料體系配合架構圖的視覺化以及可操作性,建立起以應用為中心的運維一體化平台。在未來,我們會加強與其它雲服務的整合,比如監控、容器服務,以豐富架構感知的資料維度;其次,會在資料的深度挖掘和智慧型化消費上投入更多精力,真正讓資料成為企業的核心價值,讓資料成為保障業務的穩定性的利器。
產品體驗連線:
微服務架構視覺化平台實踐
隨著企業進行微服務架構改造,系統架構複雜度越來越高,架構變化日益頻繁,微服務改造後的實際架構模型可能與預期已經產生了巨大差異,架構師或系統運維人員很難準確記憶所有資源例項的構成和互動情況 其次,系統架構在動態演化過程中可能引入了一些不可靠的因素,比如弱依賴變強依賴 區域性容量不足 系統耦合過重等,給...
3DGIS視覺化平台架構
1.1.系統描述 本專案建設的分布式3dgis平台採用了客戶 伺服器結構 物件關聯式資料庫儲存和com構件庫封裝等技術,同時採用了快取和索引技術,成功地解決了資料訪間的效率間題。可以說,系統是本著如下的思想來設計的 完全整合的資料模型 空間資料和屬性資料都統一儲存在乙個物件關聯式資料庫中,可以保證兩...
作為web微服務的科學計算視覺化
今天閱讀 vis 2019 會議大資料與降維領域的 scientific visualization as a microservice 作者是田納西大學電氣工程與電腦科學系的mohammad raji alok hota tanner hobson 和 jian huang。傳統的科學視覺化通常是...