- 性能之道:分布式系統全棧性能優化
- 于君澤 曹洪偉 李偉山 秦金衛 陳龍泉
- 2509字
- 2025-02-21 17:02:49
2.1 軟件性能的宏觀多維模型
從宏觀上講,軟件性能指的是軟件在運行時完成某一功能的響應特性,以及在增加軟件功能時保持這些響應特性的能力。
從控制論的角度看,軟件一般包括4個要素:系統邊界、內部結構、外部效應(輸出)和連接輸入。
? 系統邊界:管理系統可以啟用有用的入口(可擴展性)并拒絕有害的入口(安全性)。
? 內部結構:控制和維護系統以適應外部變化(靈活性)和內部變化(可靠性)。
? 外部效應:管理環境的直接變更,以最大化提高外部效果(功能性)降低內部工作量(可用性)。
? 連接輸入:管理對環境的感知,以支持數據交換(聯通性)和限制數據交換(隱私性)。
每個人都有自己的皮膚邊界,內部有大腦、器官和循環系統等,還有骨骼和肌肉等的行動輸出以及感覺輸入。與之類似,計算機有物理外殼、主板結構、屏幕這樣的輸出效應器,以及鍵盤、鼠標這樣的“接收器”;而軟件則有內存邊界、內部程序的結構以及專門的輸入/輸出模塊或子系統。
每個元素在軟件性能中都扮演著各自的角色,它們必須與環境成功地進行交互。如果成功交互,則可以最大化系統的受益機會,并使系統受損風險最小化,將4個一般要素與2個一般環境交互類型(機會行動和風險行動)相結合,就可以得出軟件性能的8個一般性能目標,如圖2-1所示。

圖2-1 軟件性能的宏觀多維模型
軟件性能的宏觀多維模型也可以用圖2-1所示的網絡來表示,其中,一個點到中心的距離表示該維度的性能指標的高低程度。這個網絡中呈現的區域由一個形狀和目標之間的張力組成。形狀描述了系統的性能,它會隨著環境的變化而變化,例如,威脅環境可能需要更多的安全性。連接線表示目標之間的相互作用,也就是張力。可以將連接線想象成具有不同張力的橡皮筋,它們連接著性能的各個維度,因此,增加一個維度的性能指標可能會突然改變另一個維度的性能指標。
2.1.1 系統邊界
一個系統的邊界決定了什么可以進入和離開,可以被設計用來抵御外部威脅(安全性)和接收外部數據的機會(可擴展性)。
可擴展性表示一個系統利用外部元素的能力(例如,軟件可以擁有擴展插件)。程序可以使用第三方插件,這相當于一只開放的人工手使用工具。然而,要實現擴展性,必須有一個已知的鏈接形式,這就如同一輛汽車要通過拖車來延伸自己,它的拖鉤必須與拖車的拖鏈相匹配。開放標準就具有這種優點,它代表了開放源碼的價值。可擴展性是影響軟件性能的關鍵因素。
安全性是軟件性能的關鍵部分,是軟件防止未經授權而進入、濫用或接管的能力。軟件擁有登錄賬號和密碼,就是一種常見的確保安全性的方法。安全硬件是密封且防篡改的,進入-拒絕原則適用于硬件和軟件兩種環境。病毒和黑客的威脅使邊界防火墻和登錄檢查系統顯得至關重要。安全缺陷是系統故障,也是性能故障。
2.1.2 內部結構
軟件的內部結構可以用于管理內部變化(可靠性)或外部變化(靈活性)。
靈活性是指軟件在新環境中工作的能力。就像履帶協助車輛在復雜地形中工作一樣,移動設備可以在復雜的網絡區域接收信號。CSMA/CD協議的性能優于更可靠但不靈活的輪詢協議。靈活的關系型數據庫取代了更有效但不靈活的數據模型。大多數現代軟件都有一個參數設置模塊(如Windows控制面板)來為硬件、軟件或用戶環境提供配置服務。靈活性是軟件性能的另一個關鍵。
高可靠性意味著一個軟件在內部發生變化(如部分故障)的情況下仍然能夠正常運行。可靠的系統幾乎總是可用的,無論多大的壓力或負載,都能夠生存,即便由于受到影響不能提供全量服務,也可以優雅地退化降級,而不是災難性地崩潰。在軟件中,與可靠性相關的指標主要有兩個:平均故障間隔時間,表征的是隨著時間的推移系統無故障運行的概率;快速恢復,常通過代碼修復或狀態回滾實現。可靠性是至關重要的軟件性能。
2.1.3 外部效應
系統效應器可以改變外部環境(外部效應),設計系統效應器的目標是讓效應(功能性)最大,讓產生這種效應的成本(可用性)最小。
功能性是指系統直接作用于其環境以產生預期變化的能力。關注功能性需求可以生成功能性很強的軟件。因為人們都有為獲得新能力而升級軟件的需求,因此功能性在軟件性能中非常重要,甚至是系統存在的根本。
可用性是指軟件以最小化成本提供對應功能的能力。在工作中使用更少的代碼實現相同的功能往往意味著可用性更高,因為常規來說,精簡指令集的可用性都會優于復雜指令集。輕量級軟件在后臺運行會更為良好,本質原因也是這個,因為它使用的CPU或內存資源更少。
2.1.4 連接輸入
連接輸入部分既可以支持信息交換(聯通性),又可以限制信息交換(隱私性)。
聯通性表征系統與其他系統通信的能力。有時我們會將行為與效應器聯系起來,即讓行為發生在以感覺為引導的反饋回路中。有時我們會將信息和受體聯系起來,因為只有經過受體處理的信息才有意義,即使是交流行為,也需要效應器的參與。信息交流的最終結果來自受體以及隨后產生的加工行為。對于現代軟件來說,聯通性幾乎是必需的。
隱私性表征軟件控制自身信息發布的能力。隱私性有時用保密性來代替,保密性是工程師從軟件的角度給出的名稱,而隱私性則是從用戶的角度給出的名稱。在技術環境中,隱私性是軟件性能的關鍵組成部分。
2.1.5 本節小結
軟件性能的多維模型在概念上是模塊化的,彼此并不重疊。理論上,任何維度上的性能都可以與其他維度相結合。在設計實踐中,軟件必須滿足所有需求,其中各維度之間可能沒有必然的關系。
雖然性能可以被認為是絕對的,但軟件性能的多維模型將性能視為相對于環境的性能,因此性能沒有一個“完美”的形式。在圖2-1所示的8個指標中,4個是成功指標——功能性、靈活性、可擴展性和聯通性,4個是避免失敗的指標——安全性、可靠性、隱私性和可用性。
我們要知道,環境可能會發生變化,無論是機會還是風險,都會為環境帶來影響。機會行動可以給對應的軟件帶來好處,風險行動可能損害軟件,所以機會行動和風險行動都可能為環境帶來影響,迅速改變收益和損失關系。
因為環境可以變化,所以環境類型多樣。如果性能有一個形狀和一個區域,那么就可以用不同的形狀去適合不同的環境。軟件性能的多維模型通過為性能的各個維度分配權重,幫助開發人員確定適合環境的性能形狀。
軟件性能的多維模型給了我們宏觀上的理論方向。在系統層面和更小的粒度上,它還可以提供更多實際指導。