簡(jiǎn)介

  我最近做了一些簡(jiǎn)單的關(guān)于內(nèi)存的Web Service性能測(cè)試。我使用Java(REST + SOAP)和Node.js(REST)將一些接口功能緩存起來(lái)。跟期望的一樣,Node應(yīng)用的性能遠(yuǎn)遠(yuǎn)超出Java。(響應(yīng)時(shí)間至少快1倍以上)。

  譯者注*  NodeJS跟許多其他單線程語(yǔ)言一樣,對(duì)內(nèi)存并不貪婪,因?yàn)闆](méi)有關(guān)于線程的內(nèi)存開銷,內(nèi)存占用不會(huì)隨著連接數(shù)的增長(zhǎng)而增長(zhǎng),尤其在剔除掉讀寫文件/數(shù) 據(jù)庫(kù)等異步操作后,完全基于內(nèi)存的NodeJS將有更顯著的性能提升,從某種意義上來(lái)說(shuō)基于內(nèi)存的nodejs服務(wù)所能支持的最大并發(fā)數(shù)將僅受限于帶寬和 CPU的處理能力。

  可參見: 性能測(cè)評(píng):Ngix_Lua, Node.JS Python三者性能相當(dāng),均比php快近一倍,  PayPal為什么從Java遷移到Node.js

  緩存應(yīng)用

  圖1:關(guān)于緩存應(yīng)用的原理圖。緩存支持插入,獲取,刪除鍵/值對(duì)

  圖2:關(guān)于應(yīng)用更詳細(xì)的物理圖

  這里使用了另外一種形式的REST,cache操作通過(guò)HTTP verbs來(lái)完成(Insert = PUT, Fetch = GET, Remove = DELETE)。數(shù)據(jù)刷新通過(guò)使用timeouts(Node)和scheduled threads(Java)來(lái)完成。緩存冗余是通過(guò)服務(wù)器間的REST調(diào)用來(lái)實(shí)現(xiàn)。(通過(guò)PUT/DELETE)

  對(duì)于Java SOAP的擴(kuò)展,cache操作通過(guò)經(jīng)典的HTTP POST SOAP包來(lái)實(shí)現(xiàn)。

  應(yīng)用層結(jié)構(gòu)

  圖3:基于Cache的Java REST組織結(jié)構(gòu)圖。Apache Tomcat + Jersey (servlet)在這一層。

  圖4:基于Cache的Java SOAP組織結(jié)構(gòu)圖。Apache Tomcat + Axis2 (servlet)在這一層。

  圖5:為Node應(yīng)用。僅初始化了一個(gè)worker。

  測(cè)試

  圖6: 為我測(cè)試時(shí)使用的環(huán)境

  Java + Node REST 緩存插入測(cè)試

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 緩存獲取測(cè)試

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 緩存插入測(cè)試

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>

  結(jié)論

  下面A/B測(cè)試生成的一些數(shù)據(jù)。對(duì)于Node對(duì)比Java的結(jié)果,我并不吃驚。不過(guò)對(duì)于Java REST和SOAP的對(duì)比讓我稍微有些吃驚。我原本以為因?yàn)镾OAP的復(fù)雜性,REST的性能應(yīng)該比SOAP好很多才對(duì)。這也許是因?yàn)锳pache Axis2 API要比Jersey API高效的多造成的吧。

  原文 joeywhelan.blogspot.in

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無(wú)需額外費(fèi)用,即可穩(wěn)步提升排名至首頁(yè)。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。