.NET VS Node.JS 到底誰快
訊光科技 / 蔡宏旻
前言
訊光在發展Node.JS之前就從網路的各種測試報告與文章中得知,Node.JS在單純作為網站服務的性能上會比.NET下的IIS效能還好,而且用戶的量越大,效果也越明顯。基於Node.JS的事件驅動與非阻塞式的I/O架構來思考,是可以理解為何會較快的原因,但是,若以EEP平台來思考,並非專門用來處理網站的功能,而需要再配合Application處理後端商業邏輯及資料庫的數據存取,這樣,Node.JS就會比較快嗎?如果快,會快多少呢?這些都令人充滿問號...
隨著EEP Node.JS平台開發完成,就可以實際的案例來做個效能比較,就是以同一個應用案例(前端一模一樣),來分別測試EEP .NET與EEP Node.JS,並記錄測試的成果加以比較,供大家參考。
測試環境說明
●Server端主機規格:CPU 3.2GHz雙核,記憶體4GB,HD 500G 5400轉,作業系統Windows 7,.NET版本 4.0,IIS版本6.1。使用兩台主機,一台主機安裝好EEP2012 Application Server及Microsoft IIS,使用HeavyLoad的測試軟體做CPU及記憶體的消耗記錄;Database 則使用MS-SQL 2012,安裝在另一台上面,避免干擾測試結果。 此Server同時安裝了IIS + EEP Application Server 及 Node.JS + EEP Node.JS,並分開測試。 ●Client端測試機規格:CPU 2.5GHz雙核,記憶體3GB,作業系統Windows 7,Browser為IE10。Client 端使用10台主機,使用LoadRunner壓力測試軟體,每台分別模擬25個 User,總共同時模擬250個USER同時作業。 ●測試示意圖
測試方法及準備
● 測試主機Server每次測試前重新啟動,避免累積測試干擾。 ●Client端壓力測試,啟動100個Users同一時間進行新增資料的壓力測試,同時啟動150個Users同一時間進行資料查詢測試。.NET與Node.JS的前端都是用EEP的JQuery模組所開發,開發的頁面內容完全一樣來達到測試準確性。 ●新增資料測試方案,模擬單一表單資料新增,從Login登入到主畫面,進入新增作業,連續新增3筆資料後登出應用程式。(100個Users同時進行)。 ●查詢資料測試方案,模擬單一表單資料查詢,資料量為10000筆資料,隨機查詢1筆資料結果。從Login登入到主畫面,進入查詢作業,隨機查詢3次資料後登出應用程式。 ●測試取得主機 Server的CPU與記憶體平均負載狀況,Client端的平均回應時間及逾時錯誤數目。
.NET測試結果
首先針對EEP .NET進行測試,結果如下:
●10台Client測試機模擬登錄操作,每台主機模擬25個User,測試三次。
Client端測試機 |
第一次測試結果 |
第二次測試結果 |
第三次測試結果 |
總體 反應時間 |
平均 反應時間 |
錯誤 數目 |
總體 反應時間 |
平均 反應時間 |
錯誤 數目 |
總體 反應時間 |
平均 反應時間 |
錯誤 數目 |
A |
60 |
6 |
0 |
59 |
5.9 |
0 |
61 |
6.1 |
0 |
B |
60 |
6.1 |
0 |
60 |
6 |
0 |
62 |
6.2 |
0 |
C |
61 |
6.1 |
0 |
60 |
6 |
0 |
62 |
6.2 |
0 |
D |
60 |
6 |
0 |
59 |
5.9 |
0 |
60 |
6.0 |
0 |
E |
58 |
5.8 |
0 |
56 |
5.6 |
0 |
58 |
5.8 |
0 |
F |
59 |
5.9 |
0 |
58 |
5.8 |
0 |
60 |
6.0 |
0 |
G |
59 |
5.9 |
0 |
56 |
5.6 |
0 |
59 |
5.9 |
0 |
H |
60 |
6.0 |
0 |
54 |
5.4 |
0 |
61 |
6.1 |
0 |
I |
59 |
5.9 |
0 |
57 |
5.7 |
0 |
60 |
6.0 |
0 |
J |
58 |
5.8 |
0 |
56 |
5.6 |
0 |
59 |
5.9 |
0 |
平均 |
59.4 |
59.4 |
0 |
57.4 |
5.74 |
0 |
60.0 |
6.0 |
0 |
Client端總平均回應時間為 5.89秒。
主機端的CPU與記憶體消耗:(EEP .NET A/P Server + IIS)。
次數 |
測試前 CPU平均% |
測試中 CPU最高 |
測試中 CPU平均 |
測試前 可用記憶體 |
測試後 可用記憶體 |
消耗記憶體 |
1 |
10% |
85% |
51% |
1468MB |
1326MB |
142MB |
2 |
10% |
75% |
48% |
1451MB |
1286MB |
165MB |
3 |
10% |
88% |
53% |
1472MB |
1301MB |
171MB |
平均 |
|
82% |
50.6% |
|
|
159.3MB |
Server端第一次結果(Update Chart every 3 seconds)。
Server端第二次結果(Update Chart every 3 seconds)。
(第三次結果略)。
Node.JS測試結果
接著針對EEP Node.JS測試結果如下:
●10台Client測試機模擬登錄操作,每台主機模擬25個User,測試三次。
Client端測試機 |
第一次測試結果 |
第二次測試結果 |
第三次測試結果 |
總體 反應時間 |
平均 反應時間 |
錯誤 數目 |
總體 反應時間 |
平均 反應時間 |
錯誤 數目 |
總體 反應時間 |
平均 反應時間 |
錯誤數目 |
A |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
44 |
4.4 |
0 |
B |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
C |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
D |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
45 |
4.5 |
0 |
E |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
F |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
43 |
4.3 |
0 |
G |
41 |
4.1 |
0 |
38 |
3.8 |
0 |
39 |
3.9 |
0 |
H |
33 |
3.3 |
0 |
37 |
3.7 |
0 |
38 |
3.8 |
0 |
I |
41 |
4.1 |
0 |
38 |
3.8 |
0 |
40 |
4.0 |
0 |
J |
40 |
4 |
0 |
37 |
3.7 |
0 |
41 |
4.1 |
0 |
平均 |
41.3 |
4.13 |
0 |
40.8 |
4.08 |
0 |
41.9 |
4.19 |
0 |
Client端總平均回應時間為 4.13秒。
主機端的CPU與記憶體消耗:(EEP Node.JS Server)。
次數 |
測試前 CPU平均% |
測試中 CPU最高 |
測試中 CPU平均 |
測試前 可用記憶體 |
測試後 可用記憶體 |
消耗記憶體 |
1 |
10% |
95% |
67.14% |
1164MB |
1109MB |
55MB |
2 |
10% |
100% |
75% |
1306MB |
1223MB |
83MB |
3 |
10% |
95% |
69.5% |
1185MB |
1125MB |
60MB |
平均 |
|
96.6% |
70.5% |
|
|
66MB |
Server端第一次結果(Update Chart every 3 seconds)。
Server端第二次結果(Update Chart every 3 seconds)。
(第三次結果略)。
測試結果比較
|
Client端反應時間 |
Server端CPU平均 |
消耗記憶體 |
EEP.NET |
5.89秒 |
50.6% |
159.3MB |
EEP Node.JS |
4.13秒 |
70.5% |
66MB |
結果 |
快了29% |
高了39% |
降了58.5% |
結論
從上表以.NET JQuery及Node.JS JQuery相同介面去分別測試了EEP.NET及EEP Node.JS的Server後所得的數據,得知EEP Node.JS比EEP .NET+IIS的表現還好一點,但並不是想像中有倍數的效能,其實.NET與IIS在CPU的表現反而比Node.JS來得好,這是當初意想不到的結果,當然主要是因為EEP是跟資料庫系統較為緊密的系統,非單純只是個網站系統,也許測試的數據也會大不同。另外針對耗用記憶體方面就與事先預測差不多,畢竟Node.JS是個輕量化的運行環境,會比IIS龐大的架構節省很多記憶體。
目前EEP Node.JS已經內建了多執行序(Multi-Thread)的機制在內,目的就是要來面臨高併發數與多工的處理,畢竟在商業領域當中,多工是必備的條件,暫時我們研發團隊還沒有針對EEP Node.JS的核心特別去優化,年底之前我們會全面優化一次,也許測試出來的數據會更為亮麗,值得大家去期待一下。
|