當前位置:
首頁 > 最新 > Metrics:讓微服務運行更透明

Metrics:讓微服務運行更透明

內容來源:2018年1月11日,華為開發工程師鄭揚勇在「ServiceComb在線直播」進行《特性:Metrics》演講分享。IT 大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發布。

閱讀字數:1860 | 4分鐘閱讀

摘要

讓微服務運行狀態清晰可見。

Metrics是什麼

直譯是「度量」,不同的領域定義有所區別,在微服務領域中的定義:

「對微服務的某個指標給予一個可量化程度的測量」

Metrics應該具備的特性:

Comparative(可對比):指標能夠在不同的微服務或同一個微服務的多個實例之間比較;

Understandable(易理解):指標所衡量的對象、計算方法和輸出的結果值都是容易理解的;

Ratio(理想的比例):理想結果可預見,可以立即用於比較。

如何判定Metrics實現的優劣?

衡量Metrics實現優劣的標準有:

1、關鍵指標覆蓋全,這是能夠快速定位問題的基礎;

2、計量準確,錯誤的計量和演算法只會幫倒忙;

3、高性能低資源佔用,畢竟Metrics是可選模塊,要保證資源佔用不超過10%;

4、無侵入或低侵入,同樣,由於Metrics是可選模塊,讓用戶修改代碼是不可取的。

Metrics的分類

Metrics有很多種分類方式,在技術實現上我們偏向以取值方式區分為兩種。

1、直接取值。任何時候都能夠立刻獲取到最新值,例如資源使用率,包括CPU使用率,線程數,Heap使用數據等等,還有調用累加次數,當前隊列長度等等。

2、統計取值。經過一個特定的時間周期才能夠統計出值,這個時間間隔我們可以稱為窗口周期(Window Time)或統計周期,例如:

a) 多值取其一的,比如Max、Min、Median(中位值);

b) 與時間相關的,比如TPS(transaction per second);

c) 與個數相關的,比如累加平均值、方差等等;

獲取此類Metrics的值,返回的是上一個周期的統計結果,具有一定的延後性。

為什麼需要Metrics

上圖是傳統的單體應用,多模塊緊耦合,Client Application調用API,然後模塊在內部相互調用,還會涉及操作資料庫的一大堆邏輯,隨著功能的不斷增加,它的體積會越來越大,這樣的系統開發人員維護起來會頭暈腦脹,到某個階段重構幾乎是不可避免的。

但是這種單體應用卻很受系統運維人員歡迎,維護它的工作很簡單。

進入微服務時代之後,我們會將單體應用切分成很多微服務,還會使用負載均衡,這樣一個單體應用最終可能轉化為成百上千的微服務實例。

所以微服務化後,問題沒有消失,只是轉移了,開發人員把這個「鍋」甩給了運維人員。因此微服務平台化或上雲成為趨勢,通過自動化程度很高的平台工具降低運維人員的負擔。要使這些平台工具發揮作用,例如制定報警策略、彈性伸縮策略等等,必須提供豐富的Metrics數據作為支撐。

開源領域的Metrics比較

由於Metrics的重要性日漸凸顯,開源領域已有較多實現,熱門的包括Netflix Servo、Dropwizard Metrics和Spring Boot Actuator等,比較如下:

我們結合ServiceComb Java Chassis的優勢,更進一步開發了包含關鍵指標無侵入自動打點,豐富的統計維度和極低的資源佔用等諸多優點的Metrics系統。

ServiceComb Java Chassis

中的Metrics

ServiceCombJava Chassis是一個包含了服務註冊,服務發現,服務配置以及管理功能的微服務框架,因此我們決定提供內置的更強大的Metrics功能:

1、開箱即用,不寫一行代碼輸出關鍵Metrics,全面覆蓋調用數、TPS、Latency等;

2、基於Netflix Servo,使用固定統計周期(稍後會詳細介紹);

3、多維度統計,幫助用戶抽絲剝繭快速定位問題,支持的維度包括:

a) 微服務實例(Instance)級和操作(Operation)級;

b) 操作結果成功(Success)和失敗(Failed)(開發中);

c) Transport區分Rest和Highway(評估中)。

依賴關係

Metrics-Core是我們的核心功能模塊,之上的Metrics-Extension模塊用於擴展。在Metrics Extension裡面,我們實現了Prometheus的集成,它依賴於Prometheus Java Client和Metrics-Core。

Metrics默認輸出列表

其中對於時延類的Metrics,都包含max、min、average三個指標。

使用多周期適應不同的場景需求

為了具備高性能的同時又能保持極低的開銷,我們使用固定周期的方式實現Metrics統計,同時支持多周期以適應不同的場景需求,多周期的原理可以看下面的例子:

例如統計報告中的日報、周報、月報、季報、年報就是使用了多周期滿足不同的統計需求。

支持Health Check

微服務很可能依賴資料庫、其它微服務或中間件,這些組件狀態正常是微服務能夠正常提供服務的前提,通過Health Check使得微服務支持檢查依賴組件的狀態並返回,可以用於制定策略,也可以用於Dashboard展現。

相比使用Metrics返回一個狀態值,Health Check的返回更豐富,可以附帶額外信息,例如詳細的錯誤Trace。

未來的開發計劃

未來Java Chassis Metrics將強化如下幾個方面的內容:

1、我們需要實現或對接一個更優秀的可視化界面用於展示Metrics的更多特性,僅僅是集成Prometheus是不夠的(SCB-252);

2、我們將研究如何與主流的監控系統例如Zabbix、Nagios、Cacti等更簡單高效的集成,以及提出通用的集成第三方監控系統的方案;

3、我們將強化Metrics作為數據源,如何更好的支持在監控系統中制定報警、彈性伸縮等策略,降低運維人員的工作量,提升運維效率。

如何參與到ServiceComb社區

官網:http://servicecomb.incubator.apache.org/cn/

通過訂閱郵件列表參與討論:

2、收到來自dev-help的郵件後,再回復任意內容來確認訂閱郵件列表

在Apache JIRA(https://issues.apache.org/jira/browse/SCB)上提issue或查看最新的開發任務及進展;

關注微信小助手獲取信息:

加入微信群進行交流;

通過Github(https://github.com/apache?q=servicecomb)發起PR

今天的分享就到這裡,謝謝大家!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT大咖說 的精彩文章:

docker+kubernetes=共生?相愛相殺?

TAG:IT大咖說 |