如何向面試官證明你做的系統是高可用的?
通常,面試官在評估你的系統架構設計能力時,經常會要求你分享在上一家公司如何設計系統架構,以便了解你的設計能力和思維過程。
在解釋架構設計時,你會逐步向面試官證明自己負責的系統如何實現高可用性。這需要涉及一個公認的指標 - 服務水平協議(Service-Level Agreement,SLA)。服務水平協議是由服務提供者和用戶雙方簽訂的合同或協議,規定了雙方的商務關系或部分商務關系。簡單來說,SLA是衡量服務可用性的一個重要指標。
業界通常使用"幾個9"的標準來衡量互聯網應用的可用性。例如,京東的可用性是四個9(99.99%)。這意味著京東的服務承諾在所有運行時間中只有0.01%的不可用時間,也就是說一年中只有大約52.6分鐘不可用。這個99.99%被稱為系統的可用性指標。
52.6 分鐘是怎么計算出來的呢?
圖片
從公式中可以看出, SLA 等于 4 個 9,也就是可用時長達到了 99.99% ,不可用時長則為是0.01%,一年是 365 天, 8760 個小時,一年的不可用時長就是 52.6 分鐘,那么:
SLA 等于 3 個 9,就相當于一年不可用時長等于 526 分鐘;
SLA 等于 5 個 9,就相當于一年不可用時長等于 5.26 分鐘。
可以發現,用 SLA 等于 4 個9 作為參照物,少個 9 相當于小數點往后移一位,多個 9 相當于小數點往前移一位(我把系統可用性指標總結成一張表格)。
圖片
案例分析
在評估系統的高可用性時,僅僅按時間指標度量是不夠的。因為在互聯網公司,低峰期和高峰期對業務的影響是不同的,這需要綜合考慮。你可以采用以下方法來回答關于高可用性的問題:
- 度量方式的選擇:首先介紹兩種主要的度量方式,即"幾個9"的概念和影響請求量占比的方式,解釋它們的優缺點。
- 綜合考慮:強調在實際業務中,綜合考慮兩種度量方式更有利于全面評估高可用性。舉例說明在不同時間段停機對業務的不同影響。
- 科學性和實際性:說明使用請求量占比來評估高可用性更科學,因為它更直接地關聯到業務損失。然后,結合實際業務場景,展示你的思考和決策,以體現你的實踐經驗和專業性。
- 閉環思路:提到"可評估"、"可監控"和"可保證"的思路,強調了綜合性的方法,不僅僅依賴于理論概念,還需要實際的措施來確保高可用性。
案例解答
我們可以通過設計一個監控系統來保證系統服務SLA達到四個9,這個監控系統可以分為三個核心部分:基礎設施監控報警、系統應用監控報警,以及存儲服務監控報警。通過這個監控系統的設計,我們可以更好地了解哪些環節對整個系統的可用性產生影響,這將幫助我們在面試中更清晰地展示系統高可用性設計的理念。
基礎設施監控
監控報警指標分為兩種類型。
系統要素指標:主要有 CPU、內存,和磁盤。
網絡要素指標:主要有帶寬、網絡 I/O、CDN、DNS、安全策略、和負載策略。
為什么我們要監控這些指標?因為它們是判斷系統的基礎環境是否為高可用的重要核心指標。
圖片
監控工具有一些常見的選擇,它們可以幫助你有效地監控系統的性能。這些工具包括:
- ZABBIX:這是一個開源的監控系統,非常流行且具有廣泛的資料支持。它可以監控系統的各種關鍵指標,如CPU使用率、內存、磁盤、網絡帶寬等。
- Open-Falcon:由小米開源的監控系統,受到小米、滴滴、美團等公司內部的廣泛應用。它也可以監控各種基礎設施指標。
- Prometheus:這是另一個開源的監控系統,特別擅長支持Kubernetes(K8S)環境的監控。它也可以監控CPU、內存、磁盤、網絡等指標。
這些工具提供了豐富的監控功能,可以幫助你監測系統的各個方面,從基礎的CPU和內存使用到更高級的K8S監控。此外,你還可以結合運營商提供的監控平臺,以覆蓋整個基礎設施監控的需求。
監控報警策略一般由時間維度、報警級別、閾值設定三部分組成。
圖片
為了幫助你更好地理解監控報警策略,讓我用一個例子來說明。假設我們正在監控一個系統的CPU、內存和磁盤使用情況,監測的時間間隔是每分鐘,并且我們設置了一些占比的閾值。基于這些條件,我們可以制定以下監控報警策略:
圖片
為了第一時間監測到指標的健康度,報警級別可以分為緊急、重要,以及一般。當 CPU、內存,以及磁盤使用率這三項指標的每分鐘采集的指標達到 90% 使用率時,就觸發“緊急報警”;達到 80% 觸發“重要報警”;70% 觸發“一般報警”。
系統應用監控
業務狀態監控報警是關注系統自身狀態的監控報警,與基礎設施監控類似,它也由監控指標、監控工具和報警策略組成。不同之處在于,系統應用監控報警的核心監控指標主要包括以下6個關鍵指標:流量、耗時、錯誤、心跳、客戶端數和連接數。用于實現這些監控指標的工具包括CAT、SkyWalking、Pinpoint、Zipkin等。
圖片
存儲服務監控
一般來講,常用的第三方存儲有 DB、ES、Redis、MQ 等。
在面試中,當回答關于監控和保障系統可用性的問題時,可以結合三個核心監控部分(基礎設施監控、系統應用監控、存儲服務監控)來闡述你的全局監控視角,強調你的設計思路。例如,你可以這樣回答:
"為了確保系統的可用性和穩定性,我設計了一套綜合性的監控體系,用于在生產環境中對系統進行全面監控。這包括基礎設施、系統應用和存儲服務的監控。具體的監控指標和細節可以根據實際業務場景進行定制,比如在游戲領域,我們更關注流量和客戶端連接數等關鍵指標。這種綜合性的監控系統有助于我們迅速發現潛在問題并及時采取措施來維護系統的高可用性。"
當面試官進一步追問如何應對線上告警時,你可以回答:
"當面對線上告警時,我會迅速響應,并根據告警的嚴重性采取相應的措施。首先,我會查看告警的詳細信息,分析問題所在,以確定是否是假警報或真實問題。如果是真實問題,我將根據事先設定的報警策略來通知相關團隊成員。然后,我們會在團隊內部協作,采取緊急措施來解決問題,包括故障排查、系統恢復和監控指標調整等。一旦問題得到解決,我會進行事后分析,以確保我們可以從中吸取教訓,以防止未來類似問題的發生??傊視M最大努力確保系統的高可用性,同時確保及時有效地響應和處理告警情況。"
這種回答方式突出了你對全局監控和緊急事件處理的理解,以及你的責任感和應對危機的能力。
對于線上故障,要有應急響應機制,我總結以下幾點供你參考:
圖片
總結
- 系統高可用評估:在面試中,我們學習了如何評估系統的高可用性,強調了以停機時間對系統請求量的影響作為科學評估指標。
- 監控系統設計:了解了設計監控系統時的三個核心要點,包括基礎設施監控、系統應用監控和存儲服務監控。這有助于確保線上服務的穩定運行。
- 故障處理:強調了故障處理是進階過程中不可或缺的經歷,面試官也特別重視這個能力。對于不同類型的故障,建議形成一套體系化的知識框架來處理。
圖片