基於實際應用程序的Web REST API性能測試

原文鏈接:

https://link.zhihu.com/?target=https%3A//medium.com/%40mihaigeorge.c/web-rest-api-benchmark-on-a-real-life-application-ebb743a5d7a3

 

作爲一名網絡自由職業者,我對不同框架和技術的性能很感興趣,但是,在互聯網上發現的大多數性能測試,只考慮了hello World示例。

 

實際上,在構建實際應用程序時,需要考慮的方面更多。因此,我決定在最流行的框架和技術之間運行一個完整的性能測試。

 

除了性能之外,我還對在每個框架中實現特定任務的容易程度以及擴展性能的成本感興趣。

 

候選框架和技術有哪些?

 

1. Laravel 5,PHP 7.0,Nginx

2. Lumen 5,PHP 7.0,Nginx

3. Express JS 4,Node.js 8.1,PM2

4. Django,Python 2.7,Gunicorn

5. Spring 4,Java,Tomcat

6. .NET Core,Kestrel

 

我們測試什麼?

 

我們感興趣的是每個框架在不同服務器配置上每秒鐘實現的HTTP請求數量,以及代碼的簡潔或冗長程度。

 

服務器的配置看起來怎麼樣?

 

我們還對每個框架如何擴展其性能以及實現這種性能的代價感興趣。這就是我們將使用DigitalOcean在3種不同的服務器配置上測試它們的原因。

 

1. 1 CPU,512 MB - $5/month

2. 4 CPU,8 GB - $80/month

3. 12 CPU,32 GB - $320/month

 

我們構建的是什麼?

 

我們想測試一個真實的應用程序示例,因此我們將構建一個Web REST API,這個API公開4個接口,每個接口具有不同的複雜性。

 

1. Hello World ——只需響應包含Hello World字符串的json數據。

2. 計算——計算前10,000個斐波那契數列。

3. 簡單列表——有一個MySQL數據庫,其中包含一個country表,然後返回包含所有國家的列表。

4. 複雜列表——增加一個user表,在user表和country表之間有多對多映射關係。然後返回結果:所有去過法國的用戶,以及這些用戶去過的所有國家。

 

爲了構建最後兩個接口,我們將使用每個框架提供的工具以及最簡單的運行方式來實現我們的目標。

 

我們如何測試它們?

 

爲了更好地測試性能,我們同時使用wrk和ab 這兩種HTTP性能測試工具,來檢查我們是否得到了類似的結果,並更改請求的併發度,以便每種技術都能體現出其最大潛力。

 

這些工具將在DigitalOcean上獨立創建的droplet服務器上運行,它們不會與實際的API應用程序來競爭服務器資源。

 

此外,用於測試請求的服務器和用於運行應用程序的服務器都使用它們的私有ip進行連接,因此不會有明顯的網絡延遲。

 

性能測試結果

 

下面,您可以看到每個API接口的測試結果,還可以看到每個框架在不同服務器配置上的性能擴展情況。

API如何構建?

 

下面是每個框架的實際controller,您可以在Github上查看相關代碼。

 

1. Laravel with PHP和Lumen with PHP

2. Express JS with Node.js

3. Django with Python

4. Spring with Java

5.  .NET Core

 

結論

 

請記住,在實際應用程序中,幾乎所有的請求都和數據庫交互。選擇這些框架中的任何一個來運行都可以,它們都能夠處理大多數web應用程序的需求。

 

但是,比較而言,Node.js上的Express JS的性能還是相當出色的。它與Java和.NET Core之間相互競爭,它的性能甚至超過了Java和.NET Core。並且,Express JS結合了Javascript ES6的簡單性,您可以在Node.js 8中直接使用它。

 

對於應用的可擴展性,我們在中等配置的服務器上得到了最好的性能/開銷比。增加到12個CPU核心和32GB內存並沒有帶來太多幫助。在這種情況下,瓶頸可能出現在系統的其他地方,需要進一步深入分析和調整以使服務器性能達到更好的狀態。

 

如果您覺得這個測試很有趣,可以點擊下方的鏈接,查看本次性能測試相關的所有源代碼。

 

https://github.com/mihaicracan/web-rest-api-benchmark

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章