天天看點

假裝會優化-總結篇

首先性能優化其實分成很多方面,無論怎麼樣優化都是我們需要持續學習的,因為隻有知道了基礎和問題所在,才能确定優化的方案

1.優化的名額

一個系統的性能名額有哪些?大概分為以下這幾個方面:

1.cpu 2.記憶體 3.磁盤io 4.網絡 5.異常 6:資料庫 7:鎖競争 8:響應時間 9:吞吐量 10:負載承受能力 11:計算機資源配置設定使用率

2.如何制定一個系統性能優化政策

2.1:先對性能做測試(先知道哪裡可以做提升或者哪裡是弱點就可以優先對這部分做性能優化)

  • 2.1.1微基準性能測試:隻要是對某一個部分或者子產品做測試.這樣能定位的更準确(單獨領出來測試)
  • 2.1.2宏基準性能測試:主要是一個綜合測試,是把多個子產品都放在一起測試,就能展現出不同子產品之間

    的互相影響(多子產品測試)

2.2.測試時需要注意的問題

  • 2.2.1:熱身問題:在很多緩存和資料庫中,剛開始的查詢效率和開機一段時間之後的效率是不一樣的,

    甚至達到了上百倍的差距,優先對部分資料做熱處理(優化),在進行測試

  • 2.2.2:性能測試結果不穩定,在各個條件穩定的情況下.測試結果沒有一緻,可以做個波狀圖,如果波動

    的區間在一定範圍内,就可以視為是合格的

  • 2.2.3:多jvm的影響:如果在一台機器中部署有多個jvm,那麼即使在單台機器單個jvm中運作的很好的

    代碼也有可能出現性能問題,應該避免在單台機器部署多個jvm

通過測試之後,就可以拿到一部分的報告,從中可以看出是哪裡有問題,從應用層到操作層來優化的話

  • 3.1:代碼優化:代碼問題往往是資源耗盡造成,或者是資源耗費巨大,可能是死循環,記憶體溢出等問題

    或者是一些影響的資料結構使用上面

  • 3.2:設計優化:通過設計模式來提高系統資源使用率
  • 3.3:優化算法:不同的場景采用不同的算法,則可以提高
  • 3.4:時間換空間:對查詢速度要求不高的可以使用不同的儲存容器,來降低系統損耗
  • 3.5:空間換時間:采用分庫分表和增加緩存之類的操作,擴大存儲空間空間來提升通路速度
  • 3.6:參數調優:mysql,jvm,各中間件和引擎的參數

兜底政策:在沒有進行應用和操作層面來優化的情況下,隻有最後一步

  • 4.1:限流:限制通路量,來保障系統,避免負載過高的情況
  • 4.2:自動化橫向擴容:達到門檻值之後,自動橫向擴容,比如加伺服器和加引擎
  • 4.3:提前擴容:在搶購這種活動中,提前擴容

    (學習docker能快速擴容)

其實大部分開發能做的優化不多,但是從一個請求來看,可以從發請求開始算,

  • 5.1:網絡(rpc,http,tcp等.以及各個網絡架構)
  • 5.2:負載均衡(各個算法的優劣,以及各個的使用場景)
  • 5.3:消息隊列(大批量的請求必然是有消息隊列的,但是什麼消息隊列有哪些特質,可以做什麼,還有消息隊列起的什麼作用)
  • 5.4:代碼(設計模式,代碼複用,算法等)
  • 5.5:資料庫(包括緩存讀寫分離,熱點資料等)
  • 5.6:分布式或是微服務(包括叢集等)

當我們懂得了這些東西,不僅僅知道他是怎麼做的,還要知道他為什麼要這麼做,怎麼可以這樣做(how,why,what)

技術路漫漫,且行且珍惜