1. 程式人生 > >漫畫:性能、可用性和鎖

漫畫:性能、可用性和鎖

傳統 這樣的 動作 idt base 失敗 http 程序 方法

經過了幾天的熟悉環境,小魚開始讓飛鳥嘗試負責解決一些問題。分配的第一個問題現象是這樣的:

接口有偶爾的超時現象。平時的時候接口可以在2s響應調用的上遊。但是偶爾會有幾次,超時特別嚴重,有時候20s、30s才返回。但是上遊的超時時間是10s。所以這時候上遊是拿不到結果的。對上遊來說這次請求失敗了。

飛鳥通過排查,找到了一些線索,就抱著電腦去找小魚。

技術分享圖片

接口超時造成的上遊請求失敗是一個可用性的問題。為了解決這個問題,就需要優化系統,提高響應速度,這是一個性能的問題。具體到問題裏,因為用到了鎖,對性能造成了影響。可以通過優化這個鎖性能來解決。即:

目標:

可用性

手段:

性能優化

抓手:

優化鎖性能

可用性和性能不同的人有不同的理解。

可用性一般指正常運行時間占總時間的百分比。對上遊來說,超時是一種不可用狀態。

性能是指系統或服務在具體事情的時候表現如何。嚴格來說可用性也是性能的一個指標。

技術分享圖片

對於單接口來說,接口不可用大體分為下面四個方面:

    1. 接口內部異常

      這個多為系統bug,如常見的空指針NPE、內存泄漏等。

      根據問題解決問題即可。

    2. 接口沒在限定的時間內返回

      如今天的鎖等待導致的超時問題。

      這個問題解決一般需要依賴監控數據,如各個鏈路調用的處理時間。根據各個環節耗時情況和處理邏輯進行相應優化。常用優化方式如:異步化、並行化、改造耗時邏輯等。

    3. 接口不提供服務

      如接口被降級或者系統崩潰。

      解決這個問題需要從系統和架構上考慮。

    4. 接口響應其他原因沒到達調用方

       如被限流、網絡不通等。

       解決這個問題系統要做好服務治理和全鏈路監控。

技術分享圖片

技術分享圖片

性能方面,今天就先說一下一些性能參考指標:

  • 執行時間

  一段代碼從開始運行到運行結束所使用的時間。

  • CPU時間

  (算法)函數或者線程占用CPU的時間。

  • 內存分配

  程序在運行時占用的內存空間

  • 磁盤吞吐量

  描述I/O的使用情況

  • 網絡吞吐量

  描述網絡的使用情況

  • 響應時間

  系統對某用戶行為或者動作做出響應的時間

技術分享圖片技術分享圖片

  最後說一下鎖,分布式鎖比傳統的線程鎖和進程鎖開銷要大很多,但是它解決了跨JVM來進行共享資源的訪問問題。目前主要有三種實現:

  1. 基於數據庫實現的分布式鎖

  2. 基於緩存實現的分布式鎖

  3. 基於zookeeper實現的分布式鎖

不管是哪種鎖,一旦用到鎖,就說明是阻塞式的。所以再並發度上一般來說都會比無鎖的情況低一點。鎖優化的思路和方法總結一下,有以下幾種:

  1. 減少鎖持有時間

  2. 減小鎖粒度

  3. 鎖分離

  4. 鎖粗化

  5. 鎖消除

技術分享圖片

技術分享圖片

關註靜兒公眾號,不定期漫畫技術推送~

技術分享圖片

本期內容:

技術分享圖片

漫畫:性能、可用性和鎖