天天看點

架構設計 | 分布式體系下,服務分層監控政策一、分布式故障二、全鍊路監控三、注意事項

一、分布式故障

分布式系統的架構,業務開發,這些在良好的思路和設計文檔規範之下,是相對來說好處理的,這裡的相對是指比較分布式架構下生産環境的突然故障。

在實際的開發中,有這樣一個很妖娆的情況:越是核心複雜的業務,越是擔心出問題,越容易出問題。

架構設計 | 分布式體系下,服務分層監控政策一、分布式故障二、全鍊路監控三、注意事項

是以當核心服務的鍊路出現故障時,如何快速定位問題就是一件很頭疼的事情,尤其是一些特殊情況下,問題很模糊很難複現,外加客戶或者上司催促,這種場景心裡陰影是大部分開發都有的。更有甚者,可能問題發生的切入點的開發是某人負責的,實際問題是發生在請求鍊路的其他服務上,這種情況遇多了,甩鍋水準會直線上升。

越是複雜的系統,越是經驗豐富的開發或者運維,對監控系統就越是有執念,尤其是全鍊路的監控,底層,網絡,中間件,服務鍊路,日志觀察預警等,用來快速定位問題,省時省心。

二、全鍊路監控

1、監控層次

在分布式系統中,需要監控的體系和層次極其複雜,通常整體上劃分為三個層次:應用服務,軟體服務,硬體服務。

架構設計 | 分布式體系下,服務分層監控政策一、分布式故障二、全鍊路監控三、注意事項

通常情況,運維管理硬體服務,開發管理應用和軟體服務。

2、應用服務

應用層為開發的業務邏輯服務,也是最容易突發問題的一個層面,當在一家公司待久了,因為開發過多個業務線,就會感覺自己不是開發,是個打雜的,每天都要分出大量時間處理各種問題。應用層監控涉及下面幾個核心子產品:

請求流量

任何服務,高并發的流量都會暴露各種服務問題,尤其核心接口的流量更是監控的重點。

服務鍊路

一次請求發生問題,快速判斷問題所在的服務,或者哪些服務之間,這對快速處理問題是至關重要的。

日志體系

核心接口日志記錄也是必備的功能,通常情況下基于日志體系的分析結果,可以明确系統的異常點,重點優化。

3、軟體服務

為了解決分布式系統的各種複雜業務場景,通常會引入各種中間軟體來做支撐,例如必備的資料庫,緩存,消息MQ等,通常這些中間件都會有自帶的監控管理端口。

資料庫:較多使用Druid監控分析;

消息隊列:常用RocketMQ和控制台;

Redis緩存:提供指令擷取相關監控資料;

還有一些公司甚至直接在中間件層開發一套管理運維和監控的聚合平台,這樣更容易從整體上分析問題。

4、硬體服務

硬體層面,運維最關注的三大核心内容:CPU、記憶體、網絡。底層硬體資源爆發的故障,來自上層的應用服務或者中間件服務觸發的可能性偏高。

硬體層面的監控有許多成熟的架構,例如zabbix,grafana等,當然這些元件功能很豐富,不僅僅在硬體層應用。

5、雪崩效應

有些故障導緻大面積服務癱瘓,也稱為雪崩效應,可能故障源沒有快速處理,也沒有熔斷機制,導緻整個服務鍊路全部垮掉,這是常見的問題,是以在處理故障時,要學會基于全棧監控資訊,全局關聯分析核心故障點,快速切斷單點服務的故障,保證整個系統的可用性。

三、注意事項

監控系統雖然作用很大,但是實際搭建的時候難度還是很大,需要有較好的意識,不是業務開發那種感覺,方方面面需求都需要處理,做監控系統的基本政策如下。

1、選擇性

不是所有服務的所有環境,和所有接口都需要監控,通常都是監控核心鍊路,核心中間件,和服務所在環境。

例如:交易鍊路,交易庫,和部署的環境;或者大客戶高并發業務,一旦出問題需要及時響應,立即處理。說的直接點,帶來收益的服務是需要重點關注的。

非關鍵服務即使出現問題,是有緩沖時間的,是以不需要花費精力添加監控,在做監控系統的時候存在這樣一句話:簡單的鍊路添加監控,複雜了容易出錯;複雜鍊路添加監控,更複雜更容易出錯,然而這樣卻是為了更好的解決故障。

2、獨立性

監控系統的本身發生故障,不能影響正常業務流程,即使在一定情況下沒有監控資訊,也不能因為監控服務影響正常業務服務。

3、整體性

聚合的監控系統可以觀察監控鍊路的全局狀态,這樣可以快速定位故障坐标,可以關聯性分析問題原因。

4、預警性

例如CPU突然升高,某個中間件服務突然停止,記憶體占用過高,這些可以基于監控系統做預警通知,然後郵件或者消息通知到相關負責人,達到快速響應的目的,這個場景大部分開發都熟悉,且有心理陰影。