從測試資料來看Node.js和Java EE的效能區別
本文作者Marc Fasel是一名高階顧問、架構師、軟體開發者。他有著18年的構建大規模、高效能企業App的經驗。在這篇文章裡,他通過做測試的方式(在Node.js App上和Java伺服器App上分別進行效能測試),一步步將測試過程、結果、結論寫出來,分析兩者的效能區別。(以下是編譯內容)
本文是通過從CouchDB上讀取JSON資料來比較Node.js和Java EE之間的效能的。究竟誰的效能更好些?為了回答這一問題,只有在一系列的效能測試下執行Node.js App和Java EE App,才能得出最終結果來。
準備階段
首先是在Node.js App上和Java伺服器App上分別進行了效能測試。每個App上都是用了相同的後端作為初始Node.js App:CouchDB。除此還使用了CouchBase Single Server版本1.1.3。創造出一萬份大小4KB的隨機文字樣本檔案。測試機器是配備2.4 GHZ、Intel Core 2 Duo、4 GB RAM和Mac OS X的iMac。另外,在一個獨立的機器上使用Apache JMeter作為測試驅動器。
Java EE
Java伺服器是執行在一個版本為7.0.21的Apache Tomcat上的,預設配置執行在Java 1.6上。資料庫驅動程式是版本0.30的CouchDB4J,驅動程式沒有快取選項,所以,沒有完成任何配置。
接下來的這個Java程式碼是一個伺服器的程式碼,可以通過CouchDB獲取文件,將資料作為一個JSON物件來處理。
通過使用JMeter測試驅動器來測試伺服器在不同的併發性基礎之上,下面的表格數字就展現出不同的併發需求——平均的響應時間,和每秒相應的所對應的回覆。
從表格裡就可以看出,當並行需求在增加的時候,響應時間就會有所變化。每10個並行需求的響應時間平均起來是23毫秒,100個並行需求的響應時間平均起來就是243毫秒。
比較有趣的部分是,響應時間的平均數和並行需求的數量有著線性相關關係,所以,並行需求增長十倍就會導致每個需求的響應時間增長十倍。這使得在每秒鐘處理需求數量是相當恆定的,不管有10個併發請求或150個併發請求,都無所謂。在所有觀察到的併發服務請求數量大約為每秒420。
Node.js
Node.js App 使用Cradle CouchDB驅動程式0.57版本,執行在Node.js 0.10.20,為了給驅動程式創造相等的條件,執行時的快取必須要關閉的。
接下來的資料顯示Node.js程式通過一個給定的ID從CouchDB裡傳遞同樣的JSON文件:
Node.js系統數目如下:
正如前面所說的一樣,平均的響應時間和並行需求數量呈線性相關關係,每秒鐘處理需求數量是相當恆定的。Node.js相對較快20%,例如,在10個並行需求裡,509個需求/秒VS.422需求/每秒。
結論
Node.js解決問題的速度比Java EE快20%,這的確有點出乎意料——一種解釋語言和一種編譯語言在一個VM中的速度是一樣快的,這沒有多年的優化過程是絕對達不到的。
其實,Node.js和Java EE規模超出正常的伺服器需求。每秒400-500的請求數量可以說是相當不錯。谷歌是世界上最大的網站,每天有大約50億個請求,如果換算成秒的話,也就是57870個請求/秒。這也是谷歌域名在世界範圍內的需求數量,所以如果你有一個執行在一臺機器上的、400需求/秒的網站的話,那你的這個網站可以說是相當的大了。平均每天100萬個需求也就意味著11.5需求/秒。這是一個很重要的數字。
在這個效能測試裡,在單執行緒的Node.js和多執行緒的Java EE之間的採用不同的併發模型對最後的結果是沒有影響的。如果想要在更高併發水平裡測試Node.js的效能,就必須要考慮到開放檔案數量這一問題。
原文:DZone
相關文章
- 介面測試和效能測試的區別
- 小白測試系列:介面測試與效能測試的區別
- 功能測試、自動化測試、效能測試的區別
- 介面測試和功能測試的區別
- Lua、Luajit、Python、Node.js和Java效能測試對比PythonNode.jsJava
- 安全測試和滲透測試的區別
- 測試方案和測試計劃的區別
- 遊戲測試和軟體測試的區別遊戲
- 從儲存、處理和分析角度看大資料和雲端計算的區別大資料
- 效能測試、負載測試、壓力測試有什麼區別?負載
- 從賦值看基本型別和引用型別的區別賦值型別
- 軟體測試:關於效能測試中使用物理機和虛擬機器的區別虛擬機
- 效能測試公開課來啦!從效能測試方案到效能調優,從負載均衡到中介軟體測試,全方位講解效能測試核心內容負載
- 效能測試的理解誤區
- 從新冠疫情的壓力測試,看智慧城市的未來
- 資料型別和運算子測試題資料型別
- 【MySQL】資料庫效能測試MySql資料庫
- NoSQL資料庫效能測試SQL資料庫
- 軟體驗收測試和系統測試的區別點
- 測試NUMBER型別的效能型別
- 福祿克的驗證測試和認證測試的區別
- 遊戲測試和軟體測試有什麼區別?遊戲
- [面試專題]從for迴圈看let和var的區別面試
- 軟體測評中心▏效能測試、壓力測試、負載測試有什麼區別?負載
- java快速的生成測試資料Java
- clickhouse 億級資料效能測試
- 資料建模在效能測試中的理解
- 4大軟體測試策略的特點和區別(單元測試、整合測試、確認測試和系統測試)
- CTS測試與GTS測試區別
- java 方法修改主函式裡基本資料型別和引用資料型別的區別Java函式資料型別
- 白盒測試、灰盒測試以及黑盒測試的區別
- 福祿克線纜驗收測試、鑑定測試和認證測試的區別
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- APP測試和傳統軟體測試有什麼區別APP
- 什麼是滲透測試和安全測試,有何區別?
- 從規範看ECMAScript(二):資料型別資料型別
- 從2張執行流程圖看vue和react區別流程圖VueReact
- DDT資料驅動效能測試(一)