- 性能之道:分布式系統全棧性能優化
- 于君澤 曹洪偉 李偉山 秦金衛 陳龍泉
- 1255字
- 2025-02-21 17:02:47
Preface 前言
性能是軟件非功能特性的基本面
性能是軟件系統的一種質量屬性,可以定義為“軟件系統與其環境交互以獲得價值和避免損失的程度”。性能就是在空間資源和時間資源有限的條件下,衡量軟件系統正常工作的概率或程度。
狹義上講,軟件系統的性能優化指的是在盡可能少地占用系統資源的前提下,盡可能提高運行速度。
本書首先從性能優化的認知和方法論開始介紹,然后介紹如何建立性能測試與評估的體系。巴斯、克萊門茨和凱茲曼在《軟件架構實踐》一書中提到,性能是指軟件系統滿足時間需求的能力。相較國外性能方面的經典著作,本書的重點放在軟件系統層面,如對網絡、通信、客戶端、單服務實體、數據庫等方面的性能約束特點進行闡述,提出具體的優化方法與策略,并深入剖析緩存系統、消息隊列在性能優化中的應用。
本書還通過具體的實踐案例(如智能音箱、商城、營銷紅包、交易系統等)介紹各種性能設計與優化方法的應用,并解讀全鏈路觀測和壓測的具體實現方法與應用場景,最后介紹云原生技術對性能的影響。
本書提出性能優化的點、線、面、體方法。其中,“點”指的是代碼中的單個語句或函數,可以通過代碼級別的優化來提升性能;“線”指的是代碼中的執行路徑,可以通過對算法和數據結構的優化來提升性能;“面”則上升到模塊、子系統級別;“體”則指的是整個系統,可以通過整體性優化來提升性能。
筆者認為,性能是軟件非功能特性的基本面。軟件性能與穩定性、容量、可用性、擴展性、成本都存在一定的關系。性能低下,系統會被拖慢,服務會堵塞,此時穩定性是一個問題。同時還容易出現級聯故障,可用性本身也會受影響。另外,性能與成本、擴展性的關系尤其大。我們知道,對于無狀態服務,可以通過添加服務節點的方式來實現持續擴展以滿足業務需求。但是,每一個節點都會有成本。通過對設計方案和代碼的優化,需要擴展的節點數量可能大大減少,從而降低成本。單節點的容量會大幅度提升。
回到實際工作場景,如高管看報表場景,雖然此時容量低,并發低,用戶量很少,但是必須高性能,需要在1s內打開頁面并完成渲染,同時要求數據有足夠高的準確性。而商品秒殺場景,用戶量巨大,需要確保不超賣(數據準確性控制),系統能良好地提供服務(可用性)、快速響應用戶,不能被拖垮(高性能+高穩定性)。
沒有絕對的好設計,只有適合的設計,因此往往需要在設計上進行取舍。比如數據一致性和可用性之間的取舍:在分布式系統中,為了保證數據的一致性,在進行數據更新時需要等待所有副本都更新完成才能返回響應,這會影響系統的可用性。為了提高系統的可用性,雖然可以采用異步復制的方式,即在更新主副本后,異步更新其他副本,但會犧牲數據的一致性。另外,還有數據一致性和性能之間的取舍、可用性和性能之間的取舍等。
一本書,一旦交付給讀者,評判權就不在作者了,希望閱讀本書的讀者將自己對本書的意見或建議告訴我們。另外,書中存在錯漏之處,在所難免,若有發現,也歡迎反饋。我們在公眾號“技術瑣話”放了一個頁面“《性能之道:分布式系統全棧性能優化》讀者反饋”,歡迎大家批評和指正。
祝閱讀愉快!
- Python科學計算(第2版)
- Building Modern Web Applications Using Angular
- C語言程序設計(第2 版)
- C語言程序設計基礎與實驗指導
- 從程序員到架構師:大數據量、緩存、高并發、微服務、多團隊協同等核心場景實戰
- R語言編程指南
- Hands-On JavaScript High Performance
- Learning Neo4j 3.x(Second Edition)
- JavaScript+Vue+React全程實例
- SSM輕量級框架應用實戰
- C語言課程設計
- Node.js:來一打 C++ 擴展
- Python機器學習之金融風險管理
- Solutions Architect's Handbook
- 動手打造深度學習框架