提高伺服器並發能力的理論

 如何提高伺服器並發能力,理論依據、方法是什麼

  轉載請註明原著:部落格園老鍾 //www.cnblogs.com/littlecarry/

  吶,一台伺服器,到底能處理多少並發?1萬,10萬,一百一千萬?由什麼決定呢?

  不用說,最終肯定是由硬體決定!更強的cpu、更大的記憶體、更高的頻寬、更高速的io設備……來一台IBM大型機,再菜的鳥也能整到百萬並發

  討論硬體沒有多大意義

  我們要討論的事,普通固定硬體條件下,如何提升伺服器的並發能力

  並發,也就是單位時間裡伺服器處理的最大請求數,通常定義為1秒時間內。

 

  針對外部訪問,伺服器的行為概括為:連接請求、處理請求

  1、連接請求

   基於NIO多路復用技術

      NIO多路復用技術,可以讓上億的請求,同時連在一台伺服器管理

  2、處理請求

   盡量縮短每一個請求的執行時間

     一個請求執行的時間越短,單位時間內能處理的請求就越多。一個請求的執行,可能涉及網路IO、硬碟IO、記憶體的讀寫,縮短或屏蔽這些讀寫,將大大提升執行速度。

 

   要提升伺服器並發能力,就是要提升「連接請求」、「處理請求」的處理能力, 核心是找出他們的性能瓶頸、改善性能瓶頸

        性能瓶頸包括:

  1、作業系統的IO讀寫能力瓶頸

    涉及:網路IO、硬碟IO、記憶體等

    提升方法:零拷貝、DMA、快取等

  2、系統資源瓶頸

    涉及:執行緒數量、鎖競爭、記憶體申請釋放、系統參數配置等

    提升方法:1)執行緒越多,作業系統切換執行緒上下文消耗越大,執行緒少,IO的阻塞可能導致系統空轉。通過實際調試分配合適的執行緒數量

            2)鎖的種類很多,悲觀、樂觀,重入等等,選擇合適的鎖,能提升資源的競爭率。所有的鎖都是悲觀鎖,是不可取的。

         3)記憶體合理的申請、釋放,能節約資源的消耗

            4)系統參數、jvm參數,很多根據實際情況分配

  3、程式碼能力瓶頸

    涉及:程式碼架構、程式碼邏輯、程式碼對記憶體的操作等

    小結:

  性能瓶頸改善,主要針對處理請求的能力的提升連接請求的能力也同步提升。

  很多網上說nginx的並發量是2萬、5萬、6萬……,都是不對的,一是nginx的程式碼架構,並沒有對並發量的約束,二是脫離了硬體。nginx的架構沒有約束連接請求,「處理請求」,就看你對性能瓶頸的改善,以及你的硬體了,這兩點提升了,並發佰億可能不是問題

  當然,這裡還有一個「單機性能」的問題,不用切換執行緒的作業系統,執行當然最快。所以需要處理百萬級別的並發,分散式處理效率才是最高的

  本文只是提供基本的理論思路,很多具體的方法不細說,得自行查詢