天天看點

淺談面向性能的開發背景定義面向性能的需求分析面向性能的架構設計面向性能的系統實作性能測試與性能優化性能神話

背景

大部分者開發者入行都是功能實作角度入行,大部分測試人員也是相似的經曆。一般項目都是最後時間跟性能較勁,由于系統的複雜性和變更的成本等導緻性能工作多數是草草收尾。有沒有更好的工程實踐呢?

有!

感謝剛入行的幾年的開發工作經曆,養成了面向性能、面向穩定性、面向功能的持續開發實踐的習慣。現在這裡分享給大家!

定義

本文所談的開發包括需求、設計、實作、測試,即廣義的開發。

面向性能的需求分析

離開業務需求談高性能容易陷入為技術而技術的陷阱。抛開資源、成本談高性能則容易導緻不必要的項目投入。

正常産品、系統除了功能需求外,都會伴随着性能需求。隻是因其隐蔽性,導緻不是所有的需求提出者都能想到或能給出準确的性能需求。此時就需要系統架構師幫助客戶梳理和制定合理的性能需求。性能需求至少包括以下幾個角度的資訊:

  • 什麼場景?
  • 什麼資料量下?
  • 多大的業務并發情況下?
  • 多大的計算、網絡的資源基礎上?
  • 怎麼定義一個性能評估模型?如 TPCC。

面向性能的架構設計

所有架構都有其基礎的性能損耗,一方面是性能得以實作的基礎,另一方面也是性能上限的瓶頸。

  • 比如引入了緩存就可能比不用緩存的要高性能,但同時引入了資料一緻性問題,增加了系統的複雜度和脆弱性;
  • 比如引入的異步處理,增加了回報的及時性,同時導緻原本一次性的操作被分解為多個操作的協同;
  • 比如引入了微服務架構,擷取了水準擴充能力,但因增加了服務間調用增加系統性能的損耗。

要逐漸積累一些基本基本元件的性能資料。

  • 如廣域網的通訊時間幾十毫秒很常見;
  • 比如資料庫的讀取和寫入是有很大的不同;
  • 比如很多系統都有隐式的緩存,如資料庫、檔案系統。

要知道架構設計的重點之一是平衡各種需求

  • 功能需求
  • 性能需求
  • 容量需求
  • 穩定性需求
  • 可維護性需求

要将系統的性能需求拆解為子系統、子子產品的性能需求,比如整體對外需要 1 秒完成資料處理,有代理、計算、存儲 3 個環節,則留給計算環節的平均耗時為多少?

面向性能的系統實作

在很多情況下,系統實作和系統設計是彼此交錯的兩類工作。在将系統架構落實為系統實作時,要從多個層次來實作系統。一些好的開發實踐包括:

  • 在開發過程中,除了設計面向功能測試的單元測試外,還要開發面向性能的測試架構;
  • 建構符合性能測試需求的基礎資料;
  • 随着代碼的推進,周期性運作性能測試架構,持續跟蹤性能劣化的趨勢,将其控制在需求範圍内;
  • 同樣的功能有 N 種實作方式,但性能千差萬别,甚至 do while 和 for 都要反複權衡寫法。

性能測試與性能優化

性能測試本質上是性能摸底,性能測試不能改變系統的性能,但有助于對系統性能名額、性能瓶頸達成共識。

性能測試的設計考驗的是技術人員的綜合能力。

性能測試的執行考驗的是技術人員的耐心和細心。

性能測試的度量有時會幹擾被測對象的性能,如寫日志、輸出到螢幕、測試資料的累計都可能拉低系統的性能。

性能優化的推進需要有系統的視野,不要過早陷入局部優化的泥潭,至少要做好 2 個準備,以形成改進的閉環:

  • 系統分段度量的能力
  • 系統改進度量的能力

性能神話

  • 期望在測試階段能優化性能
木已成舟,架構是性能優化的天花闆,代碼是性能優化的限制。
  • 期望性能開發的銀彈

從項目角度看,加緩存不一定成本效益高;一個系統上的性能開發經驗不一定能遷移到另一個系統上,注意場景、資源等的差異。

雲頂雲(yundingyun.com)是國内首批專注于雲計算服務的提供商,緻力于“讓雲計算更簡單”。做為阿裡雲五星授權服務中心,雲頂雲緻力于為企業和政府提供方案咨詢、架構設計、部署實施、系統定制、運維托管、技術教育訓練等全方位“4S”級公有雲、私有雲定制化服務。