從測試數據來看Node.js和Java EE的性能區別

2020-12-13 CSDN技術社區

本文作者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

本文為CSDN編譯整理,未經允許不得轉載,如需轉載請聯繫market#csdn.net(#換成@)

相關焦點

  • 深入淺出Rhino:Java與JS互操作
    我們先來看看Java SE 8新增了哪些主要功能:  Java SE 8 新增主要功能  1、為提高開發人員工作效率,更好地利用多核處理器和增強對Java集合APIs的大容量數據處理功能,推出的Lambda表達式(「關閉」)。
  • 復盤node項目中遇到的13+常見問題和解決方案
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫筆者之前陸陸續續接手過幾個nodejs項目, 也參與過幾個有點意思的nodejs話不多說我們開始吧~1. window和mac下設置NODE_ENV變量的問題我們都知道在前端項目中會根據不同的環境變量來處理不同的邏輯, 在nodejs中也一樣, 我們需要設置本地開發環境, 測試環境, 線上環境等
  • 用Node.js進行後端開發的特點與優勢
    不過,當Python受限於服務性能時,開發人員會選用PyPy來解決和實現。 Ruby Ruby適用於一些中、小型項目。開發人員往往能夠受益於它所提供的全面文檔和龐大的社區。近年來,雖然Ruby和RoR(Ruby on Rails)框架廣為流行,但是其更新並不頻繁。
  • Nest.js:給你看個不一樣的 Node.js
    看下官方給的簡介,NestJs 模塊化的體系結構,允許開發者使用任何其他的庫,從而提供靈活性;為 Nodejs 提供一個適應性強大的生態系統;利用最新的js特性,為 nodejs 提供更加方便的設計模式和成熟的解決方案。
  • NET Core還是Node.js:你的選擇是什麼?
    全文共2800字,預計學習時長7分鐘本文中筆者想對比是.Net Core和Node.js,這兩個公開可用的著名開發環境可擴展、加速並可授權開發過程。.Net Core和Node.js兩者都具備長處和短處,每個新版本都會更好。
  • 動力節點Java學院2021年Java學習路線圖最新出爐啦
    用於對交互過程中客戶的數據進行存儲,該板塊包括關係型資料庫和非關係型資料庫。重點學習:SQL精講、MySQL、oracle、MySQL索引實現原理及優化、JDBC這一部分學完可以通過SQL語言從資料庫中查詢數據,結合Java項目實現動態站點數據的保存。
  • Node.js 小知識—實現圖片上傳寫入磁碟的接口
    作者: 五月君 來源: Nodejs技術棧一:開啟 Node.js 服務開啟一個 Node.js 服務,指定路由 /upload/image 收到請求後調用 uploadImageHandler 方法,傳入 Request 對象。
  • 簡單幾步 faker.js就可以在瀏覽器端批量生成假數據
    近日,GitHub上一個生成假數據的項目faker.js火了,攀升Trendinging榜單第二,標星目前已超過27.1k。只需要簡單幾步操作,就可以在瀏覽器和node.js中生成大量假數據。
  • 「開往春天的 Node.js」 - Node 地下鐵第二期線下沙龍總結
    雖然當天是近來久違的好天氣,而且會場地點有些偏,但這些都沒有令同學們對 Node.js 的熱情衰減,13 點半籤到,很快會議室的位置所剩無幾了,在這裡,組委會感謝各位同學的支持。過去的一年,淘寶使用 Node.js 源站解決了已有的問題,我們用幾十臺虛擬機支撐了淘寶數十億 PV 的流量。但 Node.js 源站也為我們帶來了新的挑戰:你可以在基德同學的分享中深入了解這其中的奧妙,另外,也歡迎喜歡挑戰的人加入我們,讓 Node.js 源站更加強大。
  • 官方提供在 NetBeans 9 中啟用對 Java EE 支持的方法
    因此,本教程的重點是在 MacOS 上啟用 Java EE 支持,Linux 和 Windows 的步驟應該相同。為了顯示一些附加說明,我們使用 Java 8 和 Java 10 測試了兩個應用伺服器。下載 NetBeans 9.0首先,從官方 Apache Mirrors 下載 NetBeans 包。 目前,發行版僅以 .zip 格式文件提供:
  • 阿里集團核心系統研發部技術專家王琤:Hadoop Namenode性能診斷及...
    本次大會以「大數據共享與開放技術」為主題,聚焦於Hadoop與大數據,力邀數十位國內外Hadoop及大數據技術應用的產學界人士和實踐企業,探討大數據技術生態系統的現狀和發展趨勢,並圍繞Hadoop與大數據熱點技術和應用實踐進行深入解析。
  • 不知道如何做性能測試,那就從這三方面入手
    什麼是性能測試性能測試就是模擬一些極端場景,對軟/硬體性能進行測試,判斷其極限性能和在極限性能邊界上的運行狀態。性能測試主要分為前端性能,網絡性能和後端性能 前端性能:是指對前端相關的數據指標進行測試,主要是HTTP請求,JavaScript,多媒體數據,CDN,緩存等進行測試,主要關注響應時間。一般優化方向是,縮小數據包,提高緩存命中率,即時響應。
  • 人人都能看懂的鴻蒙 「JS 小程序」 數據綁定原理|解讀鴻蒙源碼
    在ace_lite_jsfwk代碼倉庫的packages/runtime-core/src目錄中實現了一個 ViewModel 類來完成數據劫持。這部分的代碼總體上並不複雜,在國內開發社區已經很習慣 Vue.js 和微信小程序開發的情況下,雖有不得已而為之的倉促,但也算水到渠成的用一套清晰的開源方案實現了類似的開發體驗,也為更廣泛的開發者快速入場豐富 HarmonyOS 生態開了個好頭。
  • js 四捨五入 js取整數
    做網頁開發的時候,經常需要將一些數據進行取整操作,比如:向上取整,向下取整,四捨五入取整等等,那麼js是怎麼處理的呢?那麼我們先在網頁上面放一個輸入框,四個按鈕,分別測試:「1.丟棄小數部分,保留整數部分「 、「2.向上取整,有小數就整數部分加1 「、」3.四捨五入.」 、「4.向下取整」,分別點擊按鈕的時候,我們將做以上四個取整測試,創建輸入框和點擊按鈕的HTML代碼如下:<!
  • 「原創」Java並發編程系列26|ConcurrentHashMap(上)
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫終於輪到ConcurrentHashMap了,並發編程必備,也是面試必備。為了解決該問題,提供了 Hashtable 和 Collections.synchronizedMap(hashMap)兩種解決方案,但是這兩種方案都是對讀寫加獨佔鎖,一個線程在讀時其他線程必須等待,吞吐量和性能都較低。
  • 12 個免費在線的 Web 網站性能測試工具
    從世界各地多個地點,使用真正的瀏覽器(IE和Chrome),並在真正的消費者連接速度,對你的網站進行速度測試。您可以運行簡單的測試,或執行多步交易,視頻採集,內容封鎖和更先進的測試,包括。用於做 SEO 搜尋引擎優化和速度測試和分析,數據包括網站的平均速度、數據量,非HTML加載時間等等。
  • 樹莓派4B USB啟動,UASP、TRIM和性能測試
    USB 3.0帶來了UASP和TRIM技術可以彌補樹莓派沒有內置硬碟存儲方面的缺點。本文我們參考Jeff Geerling的測試,來看看樹莓派4B USB性能和UASP和TRIM支持的情況。3.0 快閃記憶體,閃迪 Ultra Fit 128GB USB 3.0快閃記憶體,三星Evo+ 32GB microSDUASP支持USAP是USB-IF制定的USB接口全新傳輸協議,USAP可以讓大容量儲存設備的傳輸速度提高20%,並降低CPU的利用率、數據延遲和等待時間。
  • 乾貨:NodeJS對於Java開發者而言是什麼?
    我們有單獨的JRE用於不同的平臺,如Windows,Macintosh和Linux,以及還有JVM。好吧,就試著記住如何編譯和執行一個Java程序。我們有原始碼(.java),它由Java編譯器編譯成一個名為Bytecode(.class)的中間代碼。此Bytecode被提供給JVM以便在給定的目標平臺上執行。JVM在執行之前將Bytecode轉換為特定於目標平臺的機器碼。
  • Java 資料庫設計 性能優化 電商秒殺系統附帶源碼
    課程名稱: JAVA 資料庫設計 性能優化 電商秒殺系統附帶源碼課程簡介: Java 資料庫設計 性能優化 電商秒殺系統附帶源碼----------------------課程目錄----------------------------
  • Java基礎面試題簡單總結
    assertion檢查通常在開發和測試時開啟。39、說出ArrayList,Vector, LinkedList的存儲性能和特性答:ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作