建立團隊的性能文化
- 2019 年 12 月 2 日
- 筆記
之前的文章大多都是介紹性能測試的方法、思路以及測試工具的使用,可以稱之為「務實」。這篇文章,聊聊「務虛」——如何建立團隊的性能文化。。。
首先來看看團隊中不同角色,他們對性能的關注點都是什麼?然後拆分開,從不同視角聊聊如何針對性的建立團隊的性能文化。。。
不同視角的性能關注點
角色視角 |
性能關注點 |
---|---|
產品 |
用戶數、使用時間、使用場景 |
開發 |
系統架構、程式碼設計、記憶體使用、通訊方式 |
測試 |
系統性能表現是否滿足性能需求指標:TPS/RT/CPU%/Memory%/Success% |
運維 |
資源使用率、系統容量、擴展性、穩定性 |
一、產品
對於產品童鞋而言,不會直接考慮到系統性能,而更多的是需要關注有多少用戶數,他們在什麼時間段使用我的產品,使用頻次最高的場景是哪些等因素。
1、用戶數
已有用戶數:即系統已有的用戶數,通常意義上性能測試中所謂的模擬用戶數(並發)都是通過已有用戶的數量,按照二八原則來進行預估。
所謂的「二八原則」,即80%的用戶在20%的時間訪問系統,進行業務場景的交互操作。
活躍用戶數:如果要更進一步的劃分用戶類型的話,DAU(日活)是個很好的維度,通過監控,可以看出有多少用戶在什麼時間段進行了哪些業務操作,
各個不同的業務場景,在系統使用高峰時,各自的佔比時長等。
潛在用戶數:有時候由於業務快速發展或者用戶引流渠道的拓展,會帶來短期內的用戶註冊和使用頻次的激增,這個時候,激增的用戶數和對系統的高頻使用,
會給系統帶來巨大的負擔,對類似這樣的情況做到心中有數,做好應對方案,可以很大程度上避免系統出錯甚至服務不可用的尷尬局面。
2、使用時間
高峰時間:即用戶使用系統最頻繁的時間段,以及使用系統的用戶量較大的時間。這種時間維度的劃分需要一些定量的指標來區分,可以根據具體的業務場景來對待。
平緩時間:即用戶日常使用時間段,這個可以從使用頻次和使用人數上來設定一個閾值,進而針對性的劃分時間區間。
特殊時間:比如雙十一,比如一些特賣或者秒殺活動,短時間內的用戶數和使用頻次的激增,會對系統造成很大的負擔,如果不提前做好應對措施,很可能會造成一些不好的影響。
3、使用場景
高頻業務場景:以電商網站舉例,首頁、搜索、商品明細頁,這些場景可以說是用戶高頻訪問的場景。
基礎業務場景:同樣以電商網站舉例,用戶註冊、登錄、搜索、商品分類可以算作基礎業務場景,即用戶使用產品所必須涉及到的業務場景(當然,和其他類型的場景存在重疊)。
核心業務場景:同上,購物車,支付,可以看做電商網站的核心業務場景。
特殊業務場景:比如某個促銷或者秒殺業務場景,屬於短期的有時效性但訪問頻次較高的,都可劃歸到特殊業務場景。
PS:上面的幾種產品視角的關注點,更多的是從產品分析、需求分析的角度去看待和分類,如果能從產品設計或者需求階段就考慮到這些因素帶來的影響,
那麼產品(或者說業務)更多的作為需求發起方,就可以在後續的開發測試運維階段,讓參與的童鞋都儘可能考慮到這些因素從技術角度該如何應對,
從而降低系統上線後所面對的性能風險,或者說有針對性的應對方案。
二、開發
1、系統架構
根據業務需求,用戶場景以及未來可能的業務變化,系統架構設計要考慮到系統的穩定性、擴展性以及可遷移性。
比如是否採用集群/分散式,是否需要考慮多級快取,資料庫是否需要讀寫分離、主從熱備等方式。
2、程式碼設計
在項目的開始階段,一件必不可少的的事情就是就是確定程式碼的分層和架構,它在一定程度上決定了未來整個項目的程式碼風格。下面列舉一些程式碼設計的目的和需要遵循的原則:
目的 |
原則 |
---|---|
提供更好的可讀性 |
經濟原則 |
提高可維護性 |
最小可用原則 |
降低程式碼冗餘 |
程式碼復用原則 |
高內聚低耦合 |
奧卡姆剃刀原則 |
關於程式碼設計需要遵循的原則,詳細內容可參考這裡:美團技術團隊-性能優化模式
PS:當然,良好的程式碼設計,還包括開發規範、良好的命名方式、review、靜態程式碼掃描等多種方式。
3、記憶體使用
這裡的記憶體使用包括記憶體分配是否合理、程式碼運行是否會導致OOM、執行緒鎖之類的問題。
4、通訊方式
根據具體的業務需求,通訊方式採用同步還是非同步?同步和非同步各自的優缺點是什麼?如果採用非同步,框架選型如何考慮?舉個例子:
比如最常見也最重要的支付場景,對數據一致性和實時性要求很高,那麼同步通訊方式相比於非同步,就更適合業務需求。
三、測試
1、性能測試指標
常見的性能測試指標包括TPS、RT、ART、CPU使用率、事務成功率、Memory使用率,指標的存在目的是為了對系統的性能表現有一個直觀的衡量依據。
2、性能測試場景
場景,一句話概括的話就是:什麼人(用戶)在什麼時間(峰值/平緩/異常)進行了哪些操作(比如支付、搜索)。
3、性能測試目的
進行性能測試的目的是什麼?新系統上線投產前的容量測試?已有系統迭代的性能變化驗證?性能基準線的確定?異常流量下的容錯處理和災難恢復速率?
4、性能測試結果
系統性能表現是否滿足需求?是否達到預期?存在什麼風險,可能造成的影響是什麼,解決方案/容災策略是什麼?
四、運維
1、資源使用率
CPU、記憶體使用佔比是否合理?資源報警閾值如何設定?峰值流量時磁碟IO速率、日誌佔比等。
一般來說,應用日誌佔比不要超過磁碟的30%,CPU、記憶體達到75%就需要重點關注,超過85%,就需要針對性的進行擴容或者降級處理。
2、系統容量
在當前的系統服務配置下,單台服務在閾值下所能提供的最大處理能力。
舉例:某個特定業務場景,在2C4G的配置下,CPU使用率為90%,TPS最大值為10筆/秒,RT為0.2S,事務成功率100%。
3、擴展性
隨著用戶數、使用頻次的增加,系統能否及時的進行服務擴展,擴展的速率、利用率等。
4、穩定性
系統穩定性,簡單來說就是:系統在性能閾值範圍內長時間運行的性能表現。即系統長時間運行,各項指標相對平穩,不會有很大的波動或者突刺。
更多關於系統穩定性保障的策略,可以看這裡:系統穩定性
最後,如何建立團隊文化是個很抽象的問題,不同的研發流程、業務模式、工程師素養都是需要考慮的因素。
個人認為,可以通過設定統一的目標,明確每個崗位的職責,應該重點關注哪些方面,這樣做有哪些價值,是否有正向的激勵機制,提升溝通品質等手段,
長此以往,所謂的「團隊文化」,也許就有了最適合自己的文化。。。