十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
作者:陳成禧 2023-07-28 07:22:55
云計算
云原生 一般來說,企業(yè)應(yīng)用服務(wù)建設(shè)初期都是快速啟動、快速試錯,隨著業(yè)務(wù)規(guī)模擴大再從單體架構(gòu)遷移傳統(tǒng)的SOA架構(gòu)。隨著現(xiàn)在K8s的出現(xiàn),微服務(wù)、容器化、服務(wù)網(wǎng)格等云原生的架構(gòu)概念也逐漸在企業(yè)應(yīng)用中流行。

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計制作、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)云縣,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
一般來說,企業(yè)應(yīng)用服務(wù)建設(shè)初期都是快速啟動、快速試錯,隨著業(yè)務(wù)規(guī)模擴大再從單體架構(gòu)遷移傳統(tǒng)的SOA架構(gòu)。隨著現(xiàn)在K8s的出現(xiàn),微服務(wù)、容器化、服務(wù)網(wǎng)格等云原生的架構(gòu)概念也逐漸在企業(yè)應(yīng)用中流行。
圖片
架構(gòu)的發(fā)展進程不是跳躍式的,而是不斷演進、新舊共存的。為了在云原生時代里避免單云的故障,同時不被單云綁定,我們更多采取多云、多區(qū)、多集群架構(gòu)的方式。但在過渡到云原生時代的過程中,我們發(fā)現(xiàn)了以下挑戰(zhàn):
1、多樣性:主要表現(xiàn)在異構(gòu)語言、多云、多區(qū)、傳統(tǒng)與云原生共存;
2、動態(tài)化:容器化、服務(wù)快速部署和銷毀、彈性擴縮容;
3、大規(guī)模:數(shù)千個服務(wù)、萬級容器、億級指標(biāo);
在這三大挑戰(zhàn)下,我們?nèi)绾谓ㄔO(shè)好可觀測體系呢?
圖片
從我們SRE穩(wěn)定性治理的全景來看,我們要降低故障頻次,同時在故障發(fā)生的時候,要盡量縮短故障時長MTTR,整體來說要做好故障預(yù)防、故障感知、故障定位、故障恢復(fù)和故障改造。
而建設(shè)可觀測性的重點,就是為穩(wěn)定性治理提供故障感知和故障定位能力,核心或基礎(chǔ)就是做好采集、處理、存儲、關(guān)聯(lián)分析等。
可觀測性主要包含三大塊:Traces/Logs/Metrics,在這三塊能力建設(shè)的基礎(chǔ)上,我們的還多加了Events(事件)。我們從各種復(fù)雜、多變的資源中采集調(diào)用鏈、日志、指標(biāo)、事件,然后對數(shù)據(jù)進行處理、存儲、關(guān)聯(lián)、智能分析。
單一的指標(biāo)或事件分析的價值是不大的,只有以應(yīng)用為中心去關(guān)聯(lián)數(shù)據(jù),才能發(fā)揮數(shù)據(jù)的價值,從而打造我們的故障感知、故障定位能力。
云原生時代下,如何去管理多樣性、動態(tài)化的資源呢?
圖片
建設(shè)以應(yīng)用為中心的CMDB經(jīng)歷了以下幾個階段:
目前趣丸科技處于3.0的階段,前面提到我們建設(shè)可觀測性是以應(yīng)用為中心去做關(guān)聯(lián)分析,這些關(guān)聯(lián)關(guān)系就是以CMDB 3.0為基礎(chǔ)的,運維場景需要將什么資源納入管理,我們就去管理什么資源;運維場景需要將什么資源關(guān)聯(lián)起來,我們就去實現(xiàn)自動關(guān)聯(lián)。
CMDB的下一個階段——CMDB 4.0,是運維世界必不可少的數(shù)字地圖,可以幫助運維人員快速找到他們需要的信息,理解IT環(huán)境的復(fù)雜性,能有效地進行事故管理、問題管理、變更管理等運維工作,是運維人員進行IT環(huán)境管理不可缺失的工具。同時CMDB4.0也是智能運維的基石,除了傳統(tǒng)的資產(chǎn)外,我們也會將指標(biāo)、算法都放進CMDB進行管理,通過CMDB建立各種關(guān)聯(lián)關(guān)系,最終實現(xiàn)根因分析、影響分析、告警收斂等智能運維場景。
在做好CMDB的同時,我們同步還在建設(shè)去中心化的采集和存儲能力。在多云、多Region的背景下,如何管理大規(guī)模、海量的指標(biāo)呢?
Prometheus當(dāng)前基本成為了云原生監(jiān)控的標(biāo)準(zhǔn),包括我們運行基座K8S等多數(shù)的應(yīng)用,都按照Prometheus的標(biāo)準(zhǔn)提供metries接口,來暴露自身的指標(biāo)讓Prometheus去采集的。
但是,因為我們是多云、多Region,K8S集群也非常多,Prometheus單機部署又存在單點故障的風(fēng)險,因此不能進行中心化。
圖片
因此,我們采用了Thanos+Prometheus的模式,實現(xiàn)指標(biāo)采集存儲去中心化,讓各個云、各個集群通過它們自己的Prometheus去采集、存儲指標(biāo),實現(xiàn)自治;查詢指標(biāo)時,Thanos通過Prometheus的sidecar去同時查詢數(shù)據(jù),然后聚合去重,達到統(tǒng)一查詢?nèi)肟凇⑷ブ行牟杉痛鎯Φ男Ч?、這也是我們整個可觀測性體系的基礎(chǔ)。
圖片
在去中心化的采集模式下,資源分散在多云、多區(qū),我們的Prometheus也一樣分散在各云各區(qū),當(dāng)前我們大概有150套Prometheus。
那么,我們的Prometheus如何發(fā)現(xiàn)資源?由哪個Prometheus去采集呢?基于這個問題,我們建立了一個資源發(fā)現(xiàn)和采集調(diào)試的組件——Solo(搜羅)。Solo通過與CMDB交互發(fā)現(xiàn)資源,然后根據(jù)資源屬性、所在區(qū)調(diào)度相應(yīng)的Prometheus去采集,實現(xiàn)自動發(fā)現(xiàn)可監(jiān)控資源,并自動補充指標(biāo)的關(guān)鍵label,如區(qū)域、CMDB ID等。
在微服務(wù)、云原生架構(gòu)下,我們還會面臨高基指標(biāo)問題。
什么是高基?高基就是高基數(shù),即同一個指標(biāo)、標(biāo)簽的總體數(shù)值的計數(shù),即每個標(biāo)簽的值范圍相成的總數(shù)。
圖片
如上圖是Istio的一個指標(biāo),這個指標(biāo)是用來統(tǒng)計請求耗時的,就是平常類似于P99、P90的指標(biāo)。經(jīng)過指標(biāo)統(tǒng)計,我們發(fā)現(xiàn)這里面有56個標(biāo)簽,單單抽取幾個重要的指標(biāo),它的指標(biāo)基數(shù)是50*50*3*5*50*20(結(jié)果是3750萬個基數(shù))。一般情況下,一個指標(biāo)有1萬個基數(shù)就認為是高基了,但是現(xiàn)在我們可能達到了千萬級別。
需要注意的是,高基指標(biāo)會導(dǎo)致監(jiān)控變慢,還可能會無法加載甚至崩潰,計算資源開銷也會變得非常大,經(jīng)常出現(xiàn)OOM問題。
那么,如何解決高基問題呢?
圖片
總的來說,就是降基數(shù)、降維度。
這里我們引用了VictoriaMetrics的流計算能力。當(dāng)然,用Flink也可能做到,但需要人工寫很多邏輯處理,而victoriaMetrics的vmagnet組件自帶這個功能,只需要配置即可。同時,我們使用的是VM社區(qū)版,不支持集群方式,因此我們自研了VM網(wǎng)關(guān),去調(diào)整后面的各個vmagent。
整個流程就是指標(biāo)先到Promethues,然后遠程寫到路由網(wǎng)關(guān),由網(wǎng)關(guān)調(diào)度分析任務(wù),再經(jīng)過VM進行流計算集群處理,生成新指標(biāo)再寫回Prometheus中。
效果:之前在P99等請求耗時的指標(biāo)里,我們有時15分鐘內(nèi)的數(shù)據(jù)都無法查詢,現(xiàn)在基本上能在500ms查詢出來,1小時內(nèi)的數(shù)據(jù)1s內(nèi)就可以查詢出來,極大利用了流計算的能力。
圖片
在采用VM流計算能力之前,我們的方案是引用了列式數(shù)據(jù)庫ClickHouse,利用不一樣的存儲方式,同時通過CK的物化視圖進行預(yù)聚合,構(gòu)建流計算能力,整個查詢性能效果也更加明顯、整體處理流程也更加簡潔,這也是我們可觀測性平臺在用的另一種方案。
在解決指標(biāo)的采集、存儲,及高基指標(biāo)問題后,我們還需要打造最基礎(chǔ)的告警能力、主動感知能力,基于告警我們做了以下幾個實踐:
1)告警網(wǎng)關(guān)(告警系統(tǒng)的開放能力):提升API給業(yè)務(wù)調(diào)用,實現(xiàn)它們的自定義告警,同時用來作為云商告警的回調(diào)。接收到云商告警之后,再將這些告警轉(zhuǎn)化為內(nèi)部的告警,方便我們進行統(tǒng)一管理、分析。
2)告警處理器:告警信息通過告警網(wǎng)關(guān)后,我們的告警處理器會通過CMDB找到資源負責(zé)人,誰負責(zé)的資源和應(yīng)用,誰就會收到告警,不需要主動去訂閱。同時,我們還做了告警抑制,實現(xiàn)有效標(biāo)記、認領(lǐng)等功能。
3)告警通知:我們目前將告警推送到飛書上,但因為飛書機器人有頻率控制,因此,我們增加了一個智能調(diào)度功能,每個告警群會增加多個飛書機器人,通過調(diào)度器決定哪個飛書機器人去發(fā)送告警,解決了頻控問題。
4)告警升級:主要補充飛書告警信息被忽略或長時間未解決告警問題,進行電話升級,如果15分還沒有人介入處理,告警會自動通過電話通知服務(wù)開發(fā)人員和業(yè)務(wù)運維,如超過一定時間沒處理好的問題,則會自動電話通知再上一級的負責(zé)人。
5)告警收斂:主要目的是減少大量的冗余告警,讓運維人員更快地定位和解決問題,當(dāng)前我們這塊做得也還不是很深入,業(yè)界常用的一些收斂做法包括:
構(gòu)建好故障感知能力之后,如何構(gòu)建故障定位能力,實現(xiàn)快速定位問題呢?
我們認為,核心還是要提升關(guān)聯(lián)分析能力。因此,我們做了一個以應(yīng)用為中心的可觀測性平臺,以應(yīng)用為視角去關(guān)聯(lián)數(shù)據(jù)庫、緩存、消息隊列等中間件,同時還支持多觀測視角,服務(wù)端視角、客戶端視角、服務(wù)實例視角、服務(wù)接口視角、服務(wù)拓撲等,當(dāng)某個服務(wù)有告警時,可以從不同視角快速發(fā)現(xiàn)是某個實例的問題,還是單個接口的問題,還是依賴下游服務(wù)的問題。
圖片
如何量化整體服務(wù)水平?如何管理和持續(xù)改進服務(wù)質(zhì)量?如何提升業(yè)務(wù)方的滿意度?帶著這幾個問題,我們建設(shè)了SLA、SLO體系。
圖片
首先,我們從業(yè)務(wù)模塊和服務(wù)的監(jiān)控指標(biāo)中抽取核心、關(guān)鍵的指標(biāo)形成SLI,并為這些關(guān)鍵指標(biāo)設(shè)定合理組合閾值,組成一個SLO,以分鐘為粒度,根據(jù)SLI是否達標(biāo)來反映當(dāng)時整體SLO是否可用,并為其設(shè)置了三個9之類的整體可用性目標(biāo),還會根據(jù)設(shè)置的目標(biāo)進行承諾,并與業(yè)務(wù)方簽訂協(xié)議,生成我們的SLA。
我們建設(shè)SLA體系的整體方向是,通過量化目標(biāo),制定承諾去推進質(zhì)量持續(xù)改進,整體提升用戶滿意度。
現(xiàn)在SLA體系上線才一個季度,整體的落地效果十分顯著。我們劃分了27個業(yè)務(wù)場景,選取422多個SLI,暫時設(shè)定了46個SLO,大部分SLO有30%-100%的改善,我們還會通過SLA周會,對齊每周的服務(wù)質(zhì)量情況,持續(xù)推進優(yōu)化改善。
下面是我們落地的產(chǎn)品圖:
圖片
上面展示我們?nèi)绾味ㄖ埔粋€SLO,可以由多個SLI或多個下級SLO組合成一個新的O。
圖片
上面是SLO的燃盡圖,明確地展示我們當(dāng)前這個O離目標(biāo)還可以有多少時間可以消耗。
在可觀測平臺建設(shè)的初期,遇到了監(jiān)控系統(tǒng)不好用、需求響應(yīng)慢甚至不響應(yīng)等問題。造成這些問題的原因我認為有三方面:
1)閉門造車:只埋頭做自己認為好用、有用的功能;
2)需求管理混亂:用戶提了需求后缺少跟蹤管理;
3)重功能、輕運營:只關(guān)注完成開發(fā),不重視后續(xù)的產(chǎn)品維護。
針對研發(fā)階段,我們進行了產(chǎn)品化的治理,其中包括:
1)規(guī)劃階段治理:定期做競品分析、更新產(chǎn)品藍圖,及時確定產(chǎn)品路線、管理產(chǎn)品需求、確認研發(fā)優(yōu)先級等;
2)研發(fā)階段治理:增加需求、技術(shù)方案、任務(wù)管理評審環(huán)節(jié)等;
3)運營階段管理:增加產(chǎn)品培訓(xùn),強調(diào)使用說明等。
經(jīng)過階段性的治理工作后,我們整個可觀測性平臺的用戶滿意度得到了較大的提升,因此,實施產(chǎn)品化管理,是工具平臺建設(shè)成功的關(guān)鍵。
未來,我們需要去重點關(guān)注的問題是:如何覆蓋更多觀測面?如何更高效、更準(zhǔn)確地感知故障和定位問題?
1、如何覆蓋更多觀測面?
以前,兩個服務(wù)間的調(diào)用經(jīng)過兩個主機網(wǎng)絡(luò)就可以了。但是在云原生環(huán)境下,應(yīng)用間的調(diào)用越來越復(fù)雜,需要經(jīng)過容器網(wǎng)格、sidecar、Node節(jié)點等。
所以如果遇到服務(wù)性能問題,如何分析是服務(wù)本身的問題還是網(wǎng)絡(luò)問題?以及服務(wù)偶爾抖動如何定位根因?pod的性能不達標(biāo),如何確定是受哪個異常網(wǎng)絡(luò)流量的pod影響?
如果單純依靠手動埋點插入統(tǒng)計代碼的方式,對開發(fā)人員來說,工作量是非常大的,因此未來我們會引入eBPF技術(shù)。
Linux內(nèi)核中的一種虛擬機和框架,允許用戶在內(nèi)核中編寫安全高效的程序,用于網(wǎng)絡(luò)包過濾、系統(tǒng)調(diào)用跟蹤和內(nèi)核事件監(jiān)控等用途。
它的特性包括:
這里給大家推薦兩個完整度非常高的開源項目:一個是國內(nèi)的deepflow(https://deepflow.io/),另一個是國外的pixie(https://px.dev/),我們也在基于這兩個項目做一些實踐,大家有興趣的一起研究探討。
用戶體驗層觀測
當(dāng)前我們大部分觀測工作都圍繞著后端服務(wù)進行,而用戶體驗層即客戶端,才能更敏感、更準(zhǔn)確地感知服務(wù)質(zhì)量和影響范圍(比如從客戶端到服務(wù)端中間的網(wǎng)絡(luò)問題、DNS問題),單純從服務(wù)端是無法感知的,因此我們正在建設(shè)客戶端的監(jiān)控。
2、如何更高效、更準(zhǔn)確地感知故障和定位問題?
圖片
以往我們設(shè)置告警閥值、排查問題,都是依靠個人經(jīng)驗去判定。未來,我們要形成故障感知和故障定位能力,將經(jīng)驗驅(qū)動向AI驅(qū)動發(fā)展,大量應(yīng)用AIOps等相關(guān)技術(shù)提升可觀測性能力。
陳成禧趣丸科技 SRE平臺資深架構(gòu)師
圖片