應(yīng)用設(shè)計的三大核心目標
- 可靠
- 可拓展
- 可維護
可靠性
可靠性的解釋:即使發(fā)生了某些錯誤,系統(tǒng)也可以正常工作
故障可以分為硬件故障和軟件錯誤還有人為失誤
硬件故障:例如硬盤壞了,網(wǎng)絡(luò),電力故障等。人們通常通過冗余來解決這種故障,例如RAID,雙電源等。也可以通過軟件容錯,例如可以一個系統(tǒng)的部分打補丁重啟,而不需要重啟整個系統(tǒng)。
軟件錯誤:例如代碼里的bug,還有軟件服務(wù)A依賴的其他服務(wù)除了問題,或是級聯(lián)的組件故障等。這些可以通過測試,系統(tǒng)監(jiān)控等方式緩解
人為失誤:例如一些維護人員錯誤配置了應(yīng)用
可拓展性
可拓展性是用來描述系統(tǒng)應(yīng)對負載增加能力的術(shù)語
負載可以通過負載參數(shù)來描述,如果選擇參數(shù)取決于系統(tǒng):例如數(shù)據(jù)庫寫入比例,每秒處理用戶請求個數(shù)
負載增加后,有兩種考慮方式
- 負載增加,但是系統(tǒng)資源不變,系統(tǒng)性能會發(fā)生什么變化
- 負載增加,但是要保持系統(tǒng)性能不變,要增加多少資源
不同的系統(tǒng)會關(guān)注不同的性能點,批處理系統(tǒng)會關(guān)注吞吐量,而在線系統(tǒng)會關(guān)注響應(yīng)時間
延遲(latency)和相應(yīng)時間(response time)是不同的:延遲是針對服務(wù)端,指的是處理請求的時間。響應(yīng)時間是針對客戶端,指的是發(fā)出請求到看到響應(yīng)的間隔,包括網(wǎng)絡(luò)傳輸?shù)葧r間
相應(yīng)時間不是某一個具體的數(shù)字,而是一個數(shù)值分布。不能用平均值來估計相應(yīng)時間,應(yīng)該用百分位數(shù),中位數(shù)就是50百分位數(shù),一個系統(tǒng)應(yīng)該關(guān)注較高的百分位數(shù)(例如99.99%),關(guān)注到很慢的那一部分用戶的時間,避免產(chǎn)生長尾效應(yīng)
如何應(yīng)對負載增加:
- 考慮系統(tǒng)設(shè)計的負載量級,已經(jīng)量級增加時應(yīng)該如何設(shè)計
- 無狀態(tài)的服務(wù)可以擴展到多臺機器
- 針對應(yīng)用設(shè)計系統(tǒng)架構(gòu)
可維護性
三個設(shè)計原則:
- 可運維性:方便運營團隊保持系統(tǒng)平穩(wěn)運行,運維更輕松
- 簡單性:系統(tǒng)易于新工程師理解,簡化復(fù)雜度,最好的手段之一是抽象,例如高級編程語言隱藏了寄存器內(nèi)存等,SQL抽象了數(shù)據(jù)結(jié)構(gòu)和磁盤操作
- 可演化性:方便后續(xù)改進,修改,易于改變,是指整個屬性系統(tǒng)的敏捷性(多個應(yīng)用服務(wù)互相協(xié)作構(gòu)成)