??如何做年前大掃除
今年過年特別早,離春節只剩下二十多天了。 為期 7 天的春節里,工程師們不上班,那萬一線上業務出現了故障怎麼辦? 大公司的朋友們會安排專門的人進行值班(此處心疼一下那些需要大年三十還要值班保證高峰的工程師們), 而作為創業團隊人少,難做到在線值守,就需要對線上進行一些整理盤點,找出潛在問題,為春節長假做一些準備。
我們稱之為年前大掃除。
大掃除需要做些什麼呢,且聽我一一道來。
PS: 冷知識,大掃除英文是 spring cleaning,所以春節大掃除是 Spring Festival spring cleaning。
大掃除的內容
大掃除其實是一個查漏補缺+囤積糧草的事情。
查漏補缺,即找出潛在的問題。這些問題平時可能不會特意去查看, 藉助大掃除這個運動,恰好進行盤點。 計算機的世界裡,有一個方法論非常好使,在極多場景可以見到其身影:分層。 TCP 的七層模型,架構設計的 N 層 模型,都是對分層思想的使用。 查漏補缺也不例外,我們可以按照業務訪問流程,將需要排查的問題拆分為:業務、應用、中間件、網路、物理、存儲 etc。
通過分層,不僅僅完成了自上而下地遍歷整個技術棧,也同時將不同模塊的內容交給不同的責任方, 確保任務的分割。
分完模塊,還要告知大家如何具體查找問題。 這裡我介紹一個通用的方法:USE1:
For every resource, check Utilization, Saturation, and Errors.
USE 方法是從 Brend Gregg 那裡學來的。 在技術設施的領域裡,Resource 即是指各種類型的資源,比如 CPU、磁碟、網路、內存, Utilization 指的是使用率,可以簡單分為百分制和非百分制。 Saturation 是指飽和率,支持 queue 的資源,就會有這個指標。 Error 即錯誤,可以從錯誤統計和日誌得知。2
業務領域裡面,USE 也有相對應的含義。以審核系統舉例, 對應的 USE 可以理解為「審核應用實例跑的 CPU 佔用如何,任務隊列是否塞滿,業務日誌是否有異常」。
除了 USE 裡面提到的指標,還有幾個指標特別重要: TPS 、Latency 和 Capacity。 這幾個指標對性能敏感的尤為重要。 檢查 USE 的同時,我們必須關注一下這三個指標, 確保 TPS / Latency 是否滿足我們預期的 SLA。 哦?壓根沒有制定 SLA,不要慌,和歷史數據對比,先制定一個粗糙的 SLA。 哦?連歷史數據都沒有?那隻能找你 Leader 讓他考量一下了。
負責每個子系統的同學,記得檢查時候將這些收集到的數據列下來。 在 Metric 做的還不夠完善時候,這些數據也是很寶貴的。
在我看來,檢查 USE / TPS / Latency ,最大的作用是將抽象的可用性指標描述為幾個易於理解的數值進行量化。 一旦能夠量化,就可以對比、觀測、監控,並且 Review 起來也異常輕鬆。
應對方案
檢查出問題之後,就要考慮應對了。時間急任務多,我們的應對方案是是囤積糧草 / 寫救命筆記。
囤積糧草比較好理解,基於已有的容量預估,為容易出問題的系統提供一份冗餘。 有些團隊平時做基礎設施就比較,做 Scale 就是小輕鬆。 那平時 Scalable 做的不好的朋友,就只能將應用實例多開一些,以避免臨時出現的流量波動。
無狀態的服務好搞,有狀態的 DB 就很難在短時間內做 Scale。 檢查這些服務的容量,如果重點資源臨近閾值,比如 DB 的硬碟資源,緩存的內存容量。 核心服務的餘量在檢查中真的發現問題的話,那也只能短期內做擴容了。
對於小團隊來說,春節長假的特殊性在於響應會變慢甚至是聯繫不上。 一旦線上有異常,可能找不到合適的人員來進行處理。 所以第二條寫救命筆記則更為重要。 「Google SRE」裡面有個小段子,一個絕對不能被按的按鈕, 這個按鈕會清空內存數據,在飛行過程中被宇航員按了。幸虧美女工程師(下圖)寫了相關的救命手冊, 專門寫了針對這種情況的操作,救了這些宇航員的命。
圖片來自 「Google SRE」
從這個故事裡面可以看到,一個緊急操作手冊是多麼重要。 所以在大掃除期間,我們還要補一補平時的文檔,將一些常見問題 / 常規操作記錄下來。 步驟需要細緻到能讓讓每個遠程值班的同學做到 step by step 操作。
啰嗦了這麼多,相信大家對大掃除要做些什麼已經有所印象了,祝大家過個好年,流量漲漲漲,還能平平安安的。
[The USE Method] The USE Method?
[USE Method: Linux Performance Checklist] USE Method: Linux Performance Checklist?
原文鏈接: ??如何做年前大掃除 - Log4D
歡迎關注我的微信公眾號:窺豹http://weixin.qq.com/r/dTt3b_bE97uIraIM925n (二維碼自動識別)
3a1ff193cee606bd1e2ea554a16353ee推薦閱讀:
※怎麼把SQL server放到docker里運行?
※如何設計並實現一個通用的應用運維管控平台
※少年,你的告警量可以更少些!