《持續(xù)交付發(fā)布可靠軟件的系統(tǒng)方法》讀書筆記
性能、吞吐量漠嵌、容量概念
性能:對處理單一事務(wù)所花時間的一種度量嚼黔,既可以單獨衡量,也可以在一定的負(fù)載下衡量禁灼。
吞吐量:系統(tǒng)在一定時間內(nèi)處理事務(wù)的數(shù)量管挟,通常它受限于系統(tǒng)中的某個瓶頸
容量:一定的負(fù)載下,當(dāng)每個單獨請求的響應(yīng)時間維持在可接受范圍內(nèi)時弄捕,系統(tǒng)所能承擔(dān)的最大吞吐量。
非功能性:有效性导帝、容量守谓、安全性、可維護性等您单。
非功能需求管理
將非功能需求與功能需求一樣對待斋荞。
- 創(chuàng)建一些具體任務(wù)來管理非功能需求
- 有必要的話,向功能需求中加入非功能需求的驗收條件
如何為容量編程
- 為何要做容量測試
高德納著名格言:
在97%的時間里虐秦,我們都應(yīng)該忘記那種小的效率提升:過早優(yōu)化是所有罪惡之根平酿。然而,我們也不能讓另外非常關(guān)鍵的3%的機會與我們擦肩而過悦陋。一個優(yōu)秀程序員不會因為這個原則而對其置之不理蜈彼,他們非常聰明,只會在識別出那段關(guān)鍵代碼后俺驶,才會非常細(xì)心地去查看幸逆。
在找到解決方案之前,必須先找出問題的根源暮现。容量測試會告訴我們是否存在問題还绘,以便我們可以修復(fù)它。不要枉自猜測栖袋,而要先進行度量拍顷。 - 解決容量問題
現(xiàn)代軟件系統(tǒng)中,最昂貴的是網(wǎng)絡(luò)通信或磁盤存儲塘幅,在性能和應(yīng)用程序的穩(wěn)定性方面昔案,跨進程或網(wǎng)絡(luò)邊界的通信是昂貴的,所以這類通信應(yīng)該盡量最小化晌块。
讓業(yè)務(wù)干系人決定系統(tǒng)的容量特性極其重要爱沟,以免方案過度設(shè)計 。
為解決容量問題匆背,可采取的策略:
- 為應(yīng)用程序決定一種架構(gòu)呼伸。通常要特別注意進程、網(wǎng)絡(luò)邊界和I/O。
- 了解并使用正確的模式括享,避免使用那些影響系統(tǒng)容量和穩(wěn)定性的反模式搂根。
- 確保團隊在已經(jīng)明確的應(yīng)用架構(gòu)下進行開發(fā),不要為容量做無謂的優(yōu)化铃辖。在沒有明確測試結(jié)果表明有容量問題時剩愧,堅決不能在代碼可讀性上讓步。
- 注意在數(shù)據(jù)結(jié)構(gòu)和算法方面的選擇娇斩,確保它們的屬性與應(yīng)用程序相吻合仁卷。
- 處理線程時要特別注意。
- 創(chuàng)建一些自動化測試來斷言所期望的容量級別犬第。當(dāng)這些測試失敗時锦积,用它們作為向?qū)硇迯?fù)這些問題。
- 使用調(diào)測工具主要關(guān)注測試中發(fā)現(xiàn)的問題歉嗓,并修復(fù)它丰介。
- 只要有可能,就使用真實的容量數(shù)據(jù)來做度量鉴分。
容量度量
- 擴展性測試:隨著服務(wù)器數(shù)哮幢、服務(wù)等的增加,單個請求的響應(yīng)時間和并發(fā)用戶數(shù)的支持會如何變化志珍。
- 持久性測試:長時間運行應(yīng)用程序橙垢,是否有性能上的變化。
- 吞吐量測試:系統(tǒng)每秒能處理多少事務(wù)碴裙、消息或頁面點擊钢悲。
- 負(fù)載測試:當(dāng)系統(tǒng)負(fù)載增加到類似生產(chǎn)環(huán)境大小時,系統(tǒng)的容量如何舔株。
容量度量測試遵行有兩種策略
- 把目標(biāo)設(shè)定為得到穩(wěn)定莺琳、可重現(xiàn)的結(jié)果。專為容量測試準(zhǔn)備一個環(huán)境载慈。
- 一旦某個測試通過了最低驗收標(biāo)準(zhǔn)惭等,就把驗收標(biāo)準(zhǔn)提高一點,調(diào)整該測試的成功門檻
- 每個測試都必須體現(xiàn)一個具體的場景办铡,并且只有達到某個標(biāo)準(zhǔn)門檻時辞做,才能認(rèn)為該測試通過
容量測試環(huán)境
- 容量測試環(huán)境與生產(chǎn)環(huán)境一致。
- 如果無法提供與生產(chǎn)環(huán)境相似的環(huán)境寡具,可以把容量測試作為金絲雀發(fā)布策略的一部分來執(zhí)行秤茅。更頻繁的發(fā)布可以減小影響應(yīng)用程序容量的修改所帶來的風(fēng)險
- 容量測試環(huán)境盡可能與生產(chǎn)環(huán)境相似。這樣雖然無法滿足容量目標(biāo)童叠,但是可以把那些嚴(yán)重的問題突顯出來
- 不要依據(jù)硬件的某種特定參數(shù)對程序的擴展性作出線性推論
- 復(fù)制應(yīng)用程序一小部分的服務(wù)器進行容量測試框喳,是一個既可以降低環(huán)境成本又能提供適當(dāng)準(zhǔn)確度量的策略
自動化容量測試
- 一般我們都是把容量測試當(dāng)作一項獨立的工作,但是當(dāng)容量非常重要時,那么就暫且忽視這些時間成本 五垮。這時需要在部署流水線中加入容量測試階段乍惊。
- 創(chuàng)建一個自動化容量測試套件,且每次對應(yīng)用程序進行修改后放仗,通過了提交測試和驗收測試就應(yīng)該執(zhí)行容量測試润绎。
- 容量測試要達到如下6個目標(biāo)
- 測試具體的現(xiàn)實場景
- 預(yù)先設(shè)定成功的門檻
- 盡可能讓測試運行時間短一些
- 在變更面前要更健壯一些
- 組合成大規(guī)模的復(fù)雜場景
- 可重復(fù)的,并且既能串行執(zhí)行诞挨,也能并行執(zhí)行
容量測試系統(tǒng)的附加價值
容量測試系統(tǒng)是一個試驗場所莉撇,可以根據(jù)需要有效地控制時間,設(shè)計和執(zhí)行所有的試驗場景來幫助診斷問題惶傻、預(yù)測問題并找到觸發(fā)問題辦法稼钩。
- 重現(xiàn)生產(chǎn)環(huán)境中發(fā)現(xiàn)的復(fù)雜缺陷
- 探測并調(diào)試內(nèi)存泄漏
- 持久性測試
- 評估垃圾回收的影響
- 垃圾回收的調(diào)優(yōu)
- 應(yīng)用程序參數(shù)的調(diào)優(yōu)
- 第三方應(yīng)用程序配置的調(diào)優(yōu),如操作系統(tǒng)
- 模擬非正常达罗、最糟糕的情況
- 評估一些復(fù)雜問題的不同解決方案
- 模擬集成失敗的情況
- 度量應(yīng)用程序在不同硬件配置下的可擴展性
- 與外部系統(tǒng)進行交互的負(fù)載測試
- 復(fù)雜部署的回滾演練
- 有選擇地使系統(tǒng)部分或全部癱瘓,從而評估服務(wù)優(yōu)雅降級
- 在短期可用的生產(chǎn)硬件上執(zhí)行真實世界的容量基準(zhǔn)静秆,以便計算出長期且低配的容量測試環(huán)境中更準(zhǔn)確的擴展因素粮揉。