衡量軟件系統穩定性三個常用指標
每個軟件開發人員可能對什么是健康的軟件項目都有自己的想法。可能是產生了巨大的商業價值,也可能是解決了某個領域的難題,就我個人而言,如果這個項目可維護、可運營,就可以稱之為健康的項目。那么關于可維護、可運營的項目有什么特點呢?下面我列舉一些更具體的方面。
可估量
估量主要指兩個方面,一是開發工作量,二是容量明確。
(1) 開發工作量
軟件項目不同于硬件,唯一不變的就是變化。只要持續運行就會持續變化。變化需要對功能進行擴展,擴展就要開發,開發就有工作量。有工作量就需要預估工作量,軟件開發中的工作量很難估算準確(棋牌法、多人估算)。如果實際工作量與估計工作量相比的差異小于 15%,則您的估計值非常好。然而,一些軟件項目允許令人驚訝的準確估計,而其他軟件項目往往會產生令人難以置信的異常值。我不止一次遇到過這樣的異常值,偏差高達 700%,就好比一個功能看似一天完成,結果做了七天。
出現預估不準確基本都是架構設計存在擴展性問題,當然也不排除不了解項目內部運行機制而導致的盲目評估。
(2) 容量明確
日常生活中的各種工業化產品都會有一個說明書或者儀表盤,明確告訴你該產品的能力。比如汽車,承載量2t,時速 140km/h。軟件項目也一樣,應該明確說明該項目 core 數 對應的 qps,當出現性能問題可以進行準確的容量和資源評估。
可觀測
監控其本質就是軟件系統運行情況的可視化,具體參考:Prometheus+Grafana的思考和實踐,打個形象的比方,你在開車的時候,你不知道你的時速是多少?那么如何決定什么時候加速?什么時候剎車?什么時候加油?即便如此重要,很多公司,特別是中小企業基本不會重視監控指標的建設,究其原因成本高,短期收益相對較低,所以只能頭疼醫頭腳痛醫腳。
在缺少告警機制的情況下,無法第一時間洞悉到系統發生故障,只能通過用戶的反饋來獲取,系統運維人員往往也只是充當了一個“救火” 隊員,大面積的系統癱瘓往往也會給企業和用戶帶來極大的損失。通過監控,服務可以在系統受損的第一時間得到反饋,并通過電話/短信進行告警,oncall 人員及時處理問題,大大減小了系統故障對企業和用戶造成的影響,更有可以做到無感知的修復。
可部署
軟件部署及其自動化程度是另一個關鍵方面。這與可重復性密切相關,但自信的布署也是一個文化問題。如果部署仍然是一件特殊且危險的事情,沒有人愿意負責,那么部署問題會成為一個復雜問題。我了解到很多公司和團隊也很重視 CI/CD、DevOps 等文化,但是多數停留于概念表面,比如通過文檔驅動部署、千遍一律的人工配置發布,這種方式看似穩妥,其實一種偷懶的表現。因為文檔和人都會犯錯,它不能幫助我們解決軟件部署的根本問題。當然持續部署模型并不適合每個團隊或產品,但部署至少必須盡可能自動化、盡可能可重復且盡可能簡化。
總結
業界的發展歷程來看,技術的代碼化、標準化、自動化是一個必然的演進過程。對于有能力和前景的企業,在發展過程中會把技術棧統一、資源接口統一、底層基礎設施統一,這個歷程會非常長,從筆者的經驗來看,應該小步迭代,按照實際效果謹慎執行。軟件項目雖然說技術很重要,但是人、成本、落地場景同樣重要。
所以不能只是考慮光鮮的政績,并沒有有效地解決實際問題。就像最近一段時間提出的 AIOps,這種高度自愈的系統一定是軟件運行的終極目標。但這跟軟件工程并不沖突,學會用科學的方法實現最大化軟件收益仍然是最重要的。