摘要:所以需要針對(duì)不用的使用者提供不同層次的架構(gòu)可視化視角。我們對(duì)架構(gòu)可視化的定位架構(gòu)可視化不是目的,只是實(shí)現(xiàn)系統(tǒng)高可用性的手段。
為什么需要架構(gòu)可視化
隨著企業(yè)進(jìn)行微服務(wù)架構(gòu)改造,系統(tǒng)架構(gòu)復(fù)雜度越來(lái)越高,架構(gòu)變化日益頻繁,微服務(wù)改造后的實(shí)際架構(gòu)模型可能與預(yù)期已經(jīng)產(chǎn)生了巨大差異,架構(gòu)師或系統(tǒng)運(yùn)維人員很難準(zhǔn)確記憶所有資源實(shí)例的構(gòu)成和交互情況;其次,系統(tǒng)架構(gòu)在動(dòng)態(tài)演化過(guò)程中可能引入了一些不可靠的因素,比如弱依賴變強(qiáng)依賴、局部容量不足、系統(tǒng)耦合過(guò)重等,給系統(tǒng)的穩(wěn)定性帶了極大的安全隱患。所以我們每次在面對(duì)系統(tǒng)改造、業(yè)務(wù)大促以及穩(wěn)定性治理工作之前,都會(huì)通過(guò)梳理架構(gòu)圖的方式,呈現(xiàn)系統(tǒng)架構(gòu)中個(gè)組件之間的交互方式,架構(gòu)可視化能夠清晰的協(xié)助我們識(shí)別架構(gòu)中存在的問(wèn)題以及建立高可用的系統(tǒng)。
架構(gòu)可視化后,可以給我們帶來(lái)以下幾點(diǎn)但不局限于此的優(yōu)勢(shì):
確定系統(tǒng)邊界
一張好的架構(gòu)圖,應(yīng)該明確系統(tǒng)所包含的各個(gè)組件以及各個(gè)組件之間的核心調(diào)用關(guān)系,這些組件的集合就是系統(tǒng)的處理邊界,系統(tǒng)架構(gòu)的邊界在一定程度上也反映了業(yè)務(wù)域的邊界。
架構(gòu)問(wèn)題識(shí)別
基于高可用的架構(gòu)準(zhǔn)則,結(jié)合可視化的架構(gòu)圖,可以評(píng)估架構(gòu)可能存在的安全風(fēng)險(xiǎn),比如系統(tǒng)在容災(zāi)、隔離以及自愈維度下的健壯性。其次,一些架構(gòu)鏈路可視化工具(比如鷹眼)在實(shí)際工作中確實(shí)大大提高了開(kāi)發(fā)者排查與定位問(wèn)題的效率。
提高系統(tǒng)可用性
有了系統(tǒng)架構(gòu)的上下游依賴關(guān)系圖,在故障發(fā)生時(shí),開(kāi)發(fā)人員可以借助依賴數(shù)據(jù)快速定位到問(wèn)題的來(lái)源,極大縮短問(wèn)題修復(fù)時(shí)間(MTTR)。借助架構(gòu)圖,我們還可以梳理出系統(tǒng)中存在的強(qiáng)弱依賴,在業(yè)務(wù)高峰期對(duì)弱依賴進(jìn)行降級(jí),或者針對(duì)系統(tǒng)依賴的各個(gè)組件進(jìn)行故障模擬,以評(píng)測(cè)系統(tǒng)整體在面對(duì)局部故障的可靠性。
常見(jiàn)架構(gòu)可視化的做法我們熟知的架構(gòu)圖是靜態(tài)的停留在PPT上的,很多時(shí)候我們的架構(gòu)已經(jīng)發(fā)生了非常大的變化,但是我們還在使用那張看上去很經(jīng)典卻早已過(guò)時(shí)的架構(gòu)圖。長(zhǎng)時(shí)間使用與實(shí)際架構(gòu)不符的架構(gòu)圖對(duì)線上架構(gòu)的認(rèn)知的危害是巨大的,我們需要在腦海中不斷更新對(duì)系統(tǒng)架構(gòu)的視圖,以保持對(duì)系統(tǒng)架構(gòu)的敏感度。每年的大促或者重大系統(tǒng)改造成為我們梳理系統(tǒng)架構(gòu)、對(duì)架構(gòu)進(jìn)行重新認(rèn)知的機(jī)會(huì),此刻我們需要通過(guò)各種工具查看系統(tǒng)的各個(gè)組件分布以及不同組件的內(nèi)部與外部的依賴關(guān)系,這種梳理架構(gòu)圖的方法是最常用的方式,權(quán)且稱之為“__手工繪制法__”。
手工經(jīng)常干的事情,就有追求效率的同學(xué)使用計(jì)算機(jī)系統(tǒng)帶來(lái)的自動(dòng)化手段幫助自己做這件事情,比如我們常常看到的基于數(shù)據(jù)埋點(diǎn)的微服務(wù)可視化解決方案,這類架構(gòu)可視化手段通常在分布式追蹤、APM等監(jiān)控領(lǐng)域使用較多,下圖為某APM產(chǎn)品提供的應(yīng)用維度架構(gòu)可視化方案:
我們稱這種可視化方式為“__埋點(diǎn)式感知法__”,架構(gòu)組件的識(shí)別是依賴關(guān)鍵的核心類檢測(cè)與埋點(diǎn),此種方案存在以下弊端:
語(yǔ)言相關(guān)性:只要是系統(tǒng)埋點(diǎn),與語(yǔ)言相關(guān)的特征基本就拜托不了,需要針對(duì)不同語(yǔ)言提供不同的依賴包;
不易維護(hù):因?yàn)槭菍?duì)核心類的檢測(cè),當(dāng)組件包做了重大變更時(shí),需要同步變更;
不易擴(kuò)展:因?yàn)槭强蛻舳俗R(shí)別方案,客戶端一旦開(kāi)放出去,新組件的支持只能等待用戶更新組件;
規(guī)模受限:客戶端識(shí)別的另一個(gè)缺點(diǎn)是算法受限,服務(wù)端進(jìn)行識(shí)別,可以借助大數(shù)據(jù)分析等手段更有效準(zhǔn)確的識(shí)別;
還有一種自動(dòng)化架構(gòu)感可視化方法,我們稱之為“__無(wú)界架構(gòu)感知__”,是一種語(yǔ)言無(wú)關(guān)性的架構(gòu)識(shí)別方案,其采用采集用戶主機(jī)上的進(jìn)程和容器的元數(shù)據(jù)、監(jiān)控?cái)?shù)以及網(wǎng)路數(shù)據(jù)的最最基礎(chǔ)的數(shù)據(jù),在服務(wù)端構(gòu)建架構(gòu)圖。
我們?cè)O(shè)計(jì)架構(gòu)可視化的理念為了最大限度上降低用戶進(jìn)行架構(gòu)可視化的成本,我們采用了無(wú)界架構(gòu)感知-應(yīng)用無(wú)侵入的方式微服務(wù)進(jìn)行可視化,通過(guò)采集進(jìn)程數(shù)據(jù)與網(wǎng)絡(luò)調(diào)用數(shù)據(jù),構(gòu)建進(jìn)程間的網(wǎng)絡(luò)調(diào)用關(guān)系,構(gòu)建微服務(wù)的架構(gòu)信息。用戶只需要安裝我們AHAS Agent探針,即可完成架構(gòu)可視化操作;對(duì)于阿里云云原生系統(tǒng),我們提供了自動(dòng)化安裝方式,而無(wú)需登錄機(jī)器。
核心本質(zhì)軟件架構(gòu)可視化的核心點(diǎn)是尋找在軟件體系結(jié)構(gòu)中有意義和有效的元素視圖以及這些元素之間的關(guān)系。我們認(rèn)為一款優(yōu)秀的軟件架構(gòu)可視化產(chǎn)品應(yīng)該幫助用戶排除掉不重要的信息,給用戶呈現(xiàn)出對(duì)他們有價(jià)值的視圖,特別是在微服務(wù)架構(gòu)下龐大而復(fù)雜的調(diào)用關(guān)系鏈場(chǎng)景中。這里面的核心點(diǎn)是__有意義__和__有效__,要做到這兩點(diǎn),首先需要識(shí)別什么是有意義和有效的元素和關(guān)系,我們?cè)诖祟I(lǐng)域做的事情歸納起來(lái)就是“__識(shí)別__”,識(shí)別機(jī)器上的每個(gè)進(jìn)程是什么,發(fā)生的網(wǎng)絡(luò)調(diào)用遠(yuǎn)端是什么,唯有知曉了這些元素是什么我們才有理由和依據(jù)來(lái)判斷是否對(duì)用戶有意義以及其在用戶架構(gòu)中的重要程度。
在梳理了大量架構(gòu)圖,我們發(fā)現(xiàn)用戶關(guān)心的架構(gòu)元素主要分為三類:
自己的應(yīng)用服務(wù);
應(yīng)用對(duì)外部的資源依賴;
服務(wù)器本身的信息。
應(yīng)用對(duì)外部資源的依賴通常以其它應(yīng)用和通用中間件或者存儲(chǔ)服務(wù)兩種形式存在。故我們將需要識(shí)別的進(jìn)程分為:應(yīng)用服務(wù)和常見(jiàn)的組件服務(wù)(比如redis、mysql等),這些組件服務(wù)又分為用戶自建的服務(wù)和使用公有云提供的服務(wù),特別是對(duì)于Cloud Native應(yīng)用來(lái)說(shuō),云服務(wù)的識(shí)別顯得格外重要。
目前,我們提供了20種阿里云云服務(wù)的識(shí)別以及包含mysql、redis、Tomcat等常見(jiàn)的21種三方服務(wù)組件,此組件庫(kù)還在不斷擴(kuò)張中,目的就是最大限度的知曉架構(gòu)中的元素到底是什么。
(圖中展示了節(jié)點(diǎn)詳情的請(qǐng)求流向以及節(jié)點(diǎn)的監(jiān)控等基本信息)
我們同樣認(rèn)為架構(gòu)可視化的有效性跟人的認(rèn)知層次有關(guān),架構(gòu)可視化的重點(diǎn)是確定該工具是否更好的支持自頂向下方法、自下而上方法或者兩者的結(jié)合。開(kāi)發(fā)者更關(guān)心應(yīng)用維度上的架構(gòu),架構(gòu)師或者管理者更關(guān)心整體系統(tǒng)架構(gòu)。所以需要針對(duì)不用的使用者提供不同層次的架構(gòu)可視化視角。理想的架構(gòu)圖需要支持宏觀維度以及不斷下鉆下的微觀視角,我們對(duì)架構(gòu)進(jìn)行了分層設(shè)計(jì),目前分為進(jìn)程層、容器層和主機(jī)層,后期我們可能會(huì)繼續(xù)上擴(kuò)或者下鉆支持地域?qū)踊蛘叻?wù)層。
架構(gòu)回溯沒(méi)有哪個(gè)系統(tǒng)的架構(gòu)是一成不變的,系統(tǒng)架構(gòu)會(huì)隨著系統(tǒng)的版本迭代不斷進(jìn)行演化。所以對(duì)架構(gòu)可視化操作,還需要具備隨著時(shí)間的推移可對(duì)架構(gòu)信息進(jìn)行自動(dòng)更新已經(jīng)回溯的能力。在我們提供的架構(gòu)感知產(chǎn)品中默認(rèn)架構(gòu)圖會(huì)隨著時(shí)間自動(dòng)刷新,同時(shí)支持對(duì)歷史的回溯,你可以選擇歷史中的某一刻查看架構(gòu)信息,比如,重大版本的變更時(shí),發(fā)布前與發(fā)布后的系統(tǒng)架構(gòu)是否發(fā)生了違背一些高可用原則的問(wèn)題,抑或排查是否出現(xiàn)了不該有的依賴問(wèn)題。
可見(jiàn)可得架構(gòu)可視化解決了可見(jiàn)的問(wèn)題,但當(dāng)我們從架構(gòu)圖中發(fā)現(xiàn)了問(wèn)題需要解決時(shí),架構(gòu)圖還應(yīng)該給我們提供便利的可交互操作入口,讓我們可以完成問(wèn)題發(fā)現(xiàn)與解決的閉環(huán)。比如通過(guò)架構(gòu)感知監(jiān)控到了某個(gè)應(yīng)用的流量非常大,我們需要對(duì)應(yīng)用進(jìn)行限流或者預(yù)案,那么通過(guò)架構(gòu)圖,我們應(yīng)該是可以完成我們期望執(zhí)行的操作。在架構(gòu)圖中融入可以交互的運(yùn)維操作,讓我們從看到到操作,再到問(wèn)題恢復(fù)后體現(xiàn)在圖中,這就像計(jì)算機(jī)發(fā)展史上從命令行視圖到窗口視圖的轉(zhuǎn)變。
我們對(duì)架構(gòu)可視化的定位__架構(gòu)可視化不是目的,只是實(shí)現(xiàn)系統(tǒng)高可用性的手段__。借助架構(gòu)感知采集到的架構(gòu)數(shù)據(jù),在識(shí)別了用戶使用的組件(我們對(duì)mysql、redis、mq等的統(tǒng)稱)后,我們借助這些組件以及與組件匹配的故障庫(kù),可以給用戶自動(dòng)推薦這些組件可能遇到的故障,配合我們提供的評(píng)測(cè)服務(wù)讓用戶更方便地對(duì)組件進(jìn)行各種故障的模擬與演練,以提高系統(tǒng)的健壯性。其次,通過(guò)架構(gòu)感知識(shí)別Java Application 應(yīng)用,如果發(fā)現(xiàn)其負(fù)載較高,配合我們提供的限流降級(jí)(阿里巴巴開(kāi)源的Sentinel商業(yè)版)功能,為服務(wù)的持續(xù)可用性保駕護(hù)航。
我們對(duì)AHAS的定位是一款數(shù)據(jù)分析型的高可用保障產(chǎn)品,幫助云原生架構(gòu)系統(tǒng)實(shí)現(xiàn)高可用能力的提升。架構(gòu)可視化是我們給用戶提供的高效運(yùn)維和管控的窗口,我們期望通過(guò)豐富的云原生數(shù)據(jù)體系配合架構(gòu)圖的可視化以及可操作性,建立起以應(yīng)用為中心的運(yùn)維一體化平臺(tái)。在未來(lái),我們會(huì)加強(qiáng)與其它云服務(wù)的集成,比如監(jiān)控、容器服務(wù),以豐富架構(gòu)感知的數(shù)據(jù)維度;其次,會(huì)在數(shù)據(jù)的深度挖掘和智能化消費(fèi)上投入更多精力,真正讓數(shù)據(jù)成為企業(yè)的核心價(jià)值,讓數(shù)據(jù)成為保障業(yè)務(wù)的穩(wěn)定性的利器。
產(chǎn)品體驗(yàn)連接:https://www.aliyun.com/product/ahas
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/11946.html
摘要:平臺(tái)上的微服務(wù)架構(gòu)應(yīng)用再來(lái)看一下我眼中的基于當(dāng)前最流行的微服務(wù)架構(gòu)的設(shè)計(jì)是什么樣的,即我們平臺(tái)上要運(yùn)行的典型應(yīng)用是什么樣的。 showImg(https://segmentfault.com/img/remote/1460000010900878); 8月19日的數(shù)人云Container Meetup上,張龍老師做了《基于Kubernetes的PaaS平臺(tái)的設(shè)計(jì)和思考》的精彩分享,分別...
摘要:個(gè)推整體的微服務(wù)架構(gòu),主要是基于和進(jìn)行實(shí)踐的。在構(gòu)建整個(gè)微服務(wù)體系時(shí),個(gè)推選擇了研發(fā)自己的網(wǎng)關(guān)。在研發(fā)方面,也能夠使中間數(shù)據(jù)可見(jiàn)能力增強(qiáng)。 對(duì)于架構(gòu)師而言,技術(shù)的發(fā)展是無(wú)盡的,在搭建和實(shí)踐智能數(shù)據(jù)架構(gòu)的過(guò)程中,架構(gòu)師們都會(huì)或多或少地遇到一些疑惑和挑戰(zhàn),如何解決在架構(gòu)建設(shè)中遇到的某些問(wèn)題?架構(gòu)建設(shè)的領(lǐng)域又有什么新的行業(yè)動(dòng)態(tài)和技術(shù)方法? 近日,在個(gè)推TechDay全國(guó)沙龍北京站的現(xiàn)場(chǎng),幾位...
閱讀 916·2021-11-25 09:43
閱讀 1283·2021-11-17 09:33
閱讀 2999·2019-08-30 15:44
閱讀 3301·2019-08-29 17:16
閱讀 472·2019-08-28 18:20
閱讀 1625·2019-08-26 13:54
閱讀 547·2019-08-26 12:14
閱讀 2166·2019-08-26 12:14