thrift不一樣server模型性能對比

        對於thrift的幾種server模型在不一樣場景下的性能表現作了一個壓測,結果僅供參考。網絡

(一)環境多線程

服務端機器:併發

24核CPU,E5-2430,2.5GHz,96GB內存性能

客戶端機器:spa

24核CPU,E5-2430,2.5GHz,64GB內存線程

網絡環境:日誌

千兆網server

thrift版本:xml

0.9.1blog

語言:

C++

服務端處理:

sleep 0.5ms,打印一條日誌

(二)不一樣server特色

  • 多線程-threaded

每新到一個鏈接就新建一個線程處理,直到鏈接關閉線程銷燬

線程數=當前鏈接數,線程數無限制

新建線程&銷燬線程耗資源

  • 線程池-threadpool

主線程將新鏈接放入任務隊列,工做線程從任務隊列區鏈接處理,直到鏈接關閉線程再從任務隊列取鏈接

線程數=線程池size

若是線程池設置的不夠,可能致使上游等待

  • 非阻塞-nonblocking

使用libevent

(三)壓測結果

對每種狀況併發執行500000個請求

threadpool的size:2048

nonblocking中,work線程池size:256,IO線程個數:256

qps 線程池+長鏈接 線程池+短鏈接 多線程+長鏈接 多線程+短鏈接 非阻塞+長鏈接 非阻塞+短鏈接
4 5102 3571 5102 3521 5319 4032
8 10416 7352 10416 6944 10416 7352
16 20833 13157 20833 12500 19230 12500
32 35714 17857 35714 15625 31250 19230
64 35714 19230 35714 20833 35714 22727
128 33333 19230 35714 20833 35714 19230
256 27777 19230 35714 19230 41666 20833
512 27777 17857 27777 16129 41666 19230
1024 27777 17857 27777 16666 41666 19230
2048 27777 13888 27777 12820 50000  

對比圖以下所示:

(四)結論

1)線程池threadpool和多線程threaded性能差異不大

2)在全部模型中,長鏈接比短鏈接性能高30%~50%,且性能最優時均在併發鏈接爲32~256時

3)在併發達到512後,只用非阻塞+長鏈接的性能逐步提高,其餘case的性能都會隨着併發的增大而下降

綜上,長鏈接時使用非阻塞方式性能最優;短鏈接時,各類模型差別不大。

相關文章
相關標籤/搜索