Web服務效能測試:Node完勝Java

Web開發者發表於2014-02-12

  簡介

  我最近做了一些簡單的關於記憶體的Web Service效能測試。我使用Java(REST + SOAP)和Node.js(REST)將一些介面功能快取起來。跟期望的一樣,Node應用的效能遠遠超出Java。(響應時間至少快1倍以上)。

  譯者注*  NodeJS跟許多其他單執行緒語言一樣,對記憶體並不貪婪,因為沒有關於執行緒的記憶體開銷,記憶體佔用不會隨著連線數的增長而增長,尤其在剔除掉讀寫檔案/數 據庫等非同步操作後,完全基於記憶體的NodeJS將有更顯著的效能提升,從某種意義上來說基於記憶體的nodejs服務所能支援的最大併發數將僅受限於頻寬和 CPU的處理能力。

  可參見: 效能測評:Ngix_Lua, Node.JS Python三者效能相當,均比php快近一倍,  PayPal為什麼從Java遷移到Node.js

  快取應用

  圖1:關於快取應用的原理圖。快取支援插入,獲取,刪除鍵/值對

  圖2:關於應用更詳細的物理圖

  這裡使用了另外一種形式的REST,cache操作通過HTTP verbs來完成(Insert = PUT, Fetch = GET, Remove = DELETE)。資料重新整理通過使用timeouts(Node)和scheduled threads(Java)來完成。快取冗餘是通過伺服器間的REST呼叫來實現。(通過PUT/DELETE)

  對於Java SOAP的擴充套件,cache操作通過經典的HTTP POST SOAP包來實現。

  應用層結構

  圖3:基於Cache的Java REST組織結構圖。Apache Tomcat + Jersey (servlet)在這一層。

  圖4:基於Cache的Java SOAP組織結構圖。Apache Tomcat + Axis2 (servlet)在這一層。

  圖5:為Node應用。僅初始化了一個worker。

  測試

  圖6: 為我測試時使用的環境

  Java + Node REST 快取插入測試

ab -A username:password -u restput.txt -n 1000 -c 1 https://server/ctispan/rest/key/111 > results.txt

  restput.txt

value=test111

  Java SOAP 快取獲取測試

ab -A client:password -T "application/soap+xml; charset=UTF-8" -p soapget.xml -n 1000 -c 1 https://server/ctispan/services/CacheProxyWS.CacheProxyWSHttpSoap11Endpoint/ > results.txt

  soapget.xml

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns1:getValue xmlns:ns1="http://server.ctispan.jwisoft.com"><ns1:key>111</ns1:key></ns1:getValue></soapenv:Body></soapenv:Envelope>

  Java SOAP 快取插入測試

ab -A client:password -T "application/soap+xml; charset=UTF-8" -p soapput.xml -n 1000 -c 1 https://server/ctispan/services/CacheProxyWS.CacheProxyWSHttpSoap11Endpoint/ > results.txt

  soapput.xml

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns1:putValue xmlns:ns1="http://server.ctispan.jwisoft.com"><ns1:key>111</ns1:key><ns1:value>text111</ns1:value></ns1:putValue></soapenv:Body></soapenv:Envelope>

  結論

  下面A/B測試生成的一些資料。對於Node對比Java的結果,我並不吃驚。不過對於Java REST和SOAP的對比讓我稍微有些吃驚。我原本以為因為SOAP的複雜性,REST的效能應該比SOAP好很多才對。這也許是因為Apache Axis2 API要比Jersey API高效的多造成的吧。

  原文 joeywhelan.blogspot.in

相關文章