openresty性能測試報告分析

  • 2019 年 10 月 31 日
  • 筆記

一、openresty介紹

1、什麼是openresty

通過揉和眾多設計良好的 Nginx 模組,OpenResty 有效地把 Nginx 伺服器轉變為一個強大的 Web 應用伺服器,基於它開發人員可以使用 Lua 程式語言對 Nginx 核心以及現有的各種 Nginx C 模組進行腳本編程,構建出可以處理一萬以上並發請求的極端高性能的 Web 應用。

2、為什麼選擇 Nginx

1、處理響應請求很快
2、高並發連接
3、低的記憶體消耗
4、具有很高的可靠性:
5、高擴展性
6、熱部署
7、自由的 BSD 許可協議

3、openresty架構模型

Nginx 採用的是 master-worker 模型,一個 master 進程管理多個 worker 進程,基本的事件處理都是放在 woker 中,master 負責一些全局初始化,以及對 worker 的管理。在OpenResty中,每個 woker 使用一個 LuaVM,當請求被分配到 woker 時,將在這個 LuaVM 里創建一個 coroutine(協程)。協程之間數據隔離,每個協程具有獨立的全局變數_G。

ps. 協程和多執行緒下的執行緒類似:有自己的堆棧,自己的局部變數,有自己的指令指針,但是和其他協程程式共享全局變數等資訊。執行緒和協程的主要不同在於:多處理器的情況下,概念上來說多執行緒是同時運行多個執行緒,而協程是通過程式碼來完成協程的切換,任何時刻只有一個協程程式在運行。並且這個在運行的協程只有明確被要求掛起時才會被掛起。

架構圖如下:

 

架構模型

OpenResty的優勢

首先我們選擇使用OpenResty,其是由Nginx核心加很多第三方模組組成,其最大的亮點是默認集成了Lua開發環境,使得Nginx可以作為一個Web Server使用。

藉助於Nginx的事件驅動模型和非阻塞IO,可以實現高性能的Web應用程式。

而且OpenResty提供了大量組件如Mysql、Redis、Memcached等等,使在Nginx上開發Web應用更方便更簡單。目前在京東如實時價格、秒殺、動態服務、單品頁、列表頁等都在使用Nginx+Lua架構,其他公司如淘寶、去哪兒網等。

二、openresty性能對比圖例

1、情景一:

壓測介紹:
1、機器
壓測機:3台物理機,配置 cpu: 40核 記憶體: 31G
被測機:1台物理機,配置 cpu: 40核 記憶體: 31G 被測機JVM默認配置
2、測試方式
並發數壓測,並發數從低往高進行壓測

2、壓測結果

openresty性能圖

 

性能圖.png

 

 

曲線圖.png

tomcat性能圖

 

性能圖.png

 

 

曲線圖.png

3、壓測分析
從壓測結果看,在並發數場景一致的情況下,隨著壓測並發數據的增加,openresty的MRT更加穩定,
始終維持到0.35左右,而tomcat的性能隨著並發數的增加,性能也快速下降,openresty的MRT只有
tomcat的1/10左右。

2、情景二:

壓測介紹:
1、機器
壓測機:3台物理機,配置 cpu: 40核 記憶體: 31G;3台雲主機,配置cpu: 8核 記憶體: 16G
被測機:1台物理機,配置 cpu: 40核 記憶體: 31G 被測機JVM默認配置
2、測試方式
增加請求量,

2、壓測結果
openresty性能圖

 

性能圖.png

 

 

曲線圖.png

tomcat

 

性能圖.png

 

 

曲線圖.png

3、壓測分析
從對比來看隨著機器增多,tomcat的TPS都有所增加,但是tomcat沒有openresty增加的明顯,同時openresty的MRT依然在1ms以下,比tomcat要小。

3、場景三:

壓測介紹:
1、機器
壓測機:3台物理機,配置 cpu: 40核 記憶體: 31G;3台雲主機,配置cpu: 8核 記憶體: 16G
被測機:1台物理機,配置 cpu: 40核 記憶體: 31G 被測機JVM默認配置
壓測結果
1、並發數300的曲線對比

 

openrestyTPS-RT曲線.png

 

 

tomcatTPS-RT曲線.png

2、對比數2000的曲線對比

 

 

openrestyTPS-RT曲線.png

 

tomcatTPS-RT曲線.png

壓測分析
從圖中可以看出,在壓測條件一致的情況下,openresty的TPS曲線更加穩定,穩定性更高

4、場景四:

壓測介紹:
1、機器
壓測機:3台物理機,配置 cpu: 40核 記憶體: 31G
被測機:1台物理機,配置 cpu: 40核 記憶體: 31G 被測機JVM默認配置
2、測試方式
交叉對比

 

性能圖.png

 

性能曲線對比.png

壓測介紹:
1、機器
壓測機:3台物理機,配置 cpu: 40核 記憶體: 31G;3台雲主機,配置cpu: 8核 記憶體: 16G
被測機:1台物理機,配置 cpu: 40核 記憶體: 31G
2、測試方式
交叉對比

 

性能圖.png

 

 

性能曲線對比.png

5、場景五:

1、記憶體使用率對比:

 

 

openresty記憶體使用率.png

 

tomcat記憶體使用率.png

 

使用率對比圖.png

2、CPU佔用率的對比

 

 

openrestyCPU使用率.png

 

tomcatCPU使用率.png

 

使用率對比.png

三、openresty性能分析報告總結

1、在並發度比較低的情況下,比如200一下,openresty和tomcat的性能差別不大,openresty的性能主要體現在佔用更小的記憶體,性能更加穩定;
2、在並發量不斷增大,請求量不斷增大的情況下,openresty的處理能力更快,不但可以佔用更小的記憶體,還可以保持很小的TPS,獲取更高的QPS,性能也更加穩定;
3、openresty在記憶體使用率,CPU佔用率等方面性能要更好;

 
 

0人點贊

 

servlet