作為一個伺服器,node.js 是性能最高的嗎?
根據 Why Node.js Is Totally Awesome,node.js 比 nginx 還要快。那麼為什麼我們不都用 node.js 呢?
為什麼它的性能這麼高?有沒有比 node.js 性能更高的伺服器?
Nginx最主要的功能是反向代理,負載均衡,是為其他web server服務的。而node.js一般是作為web server使用的,兩者的用途不一樣,兩者的性能比較意義不大。
Nginx因為其功能簡單,沒有太複雜的邏輯,主要解決的I/O (socket)的資源佔用(內存,線程)而出名的,它的改進對比對象應該是apache httpd與IIS。
node.js基於javascript引擎,是看中了javascript引擎本身沒有設計I/O庫,從而可以在上面設計基於事件的非同步I/O。Web應用最大的瓶頸在於I/O,node.js的事件非同步I/O設計帶來的高的吞吐量,同樣的資源下能處理更多的請求。
但node.js的性能不是最高的,因為javascript引擎的關係,node.js默認是單線程,一個node.js應用無法利用多核資源。不過有第三方庫提供多線程支持,但不是無縫的。
node.js是解決I/O瓶頸的(相對於傳統技術,同步阻塞調用浪費線程), 它並沒有提高I/O速度,只是資源調度更高效。如果I/O速度不解決,node.js只能說能同時處理好多request,但每個request的響應時間還是那麼長,甚至更長。
由於它是單線程,複雜一點的javascript運算可能導致整個web server掛住,所以node.js不適合web server中含有複雜計算的。放他娘的XX
nginx物理伺服器上空跑20w+qps,我就沒見過誰超過過。加上1MB靜態頁面估計只會勝得更多。700qps是個假nginx吧。
服器又不是只要性能就夠了。樓主看些好點的東西吧,你鏈接里那人沒說多少東西還滿口髒話,不看也罷,你怎麼就鑽了牛角尖。
http://vertx.io
高啥?techempower的benchmark每年都會發布結果,node.js什麼時候排到前10去過?倒數倒是有名的
Node.js 與 PHP + Nginx
Snoopyxd 詳細對比了 Node.js 與 PHP+Nginx 組合,結果顯示在3000並發連接、30秒的 測試下,輸出「hello world」請求:
1.5
? PHP 每秒響應請求數為3624,平均每個請求響應時間為0.39秒;
? Node.js 每秒響應請求數為7677,平均每個請求響應時間為0.13秒。 而同樣的測試,對MySQL查詢操作:
? PHP 每秒響應請求數為1293,平均每個請求響應時間為0.82秒;
? Node.js 每秒響應請求數為2999,平均每個請求響應時間為0.33秒。
看場景。簡單、高頻的I/O,用node.js性能非常好,主要原因是非同步。node.js的單線程,導致其還有優化空間。計算量大的時候,不適合用node.js。
V8最近還沒開始研究。下面是一個主觀看法:
NodeJS在大型生產系統上的認知度不夠,代碼Bug比較多。同時V8引擎是針對客戶端優化,很少有針對伺服器優化。就性能來說,Java和C++依然是開發伺服器應用,尤其是長連接服務的不二選擇。首先數據有問題
其次nodejs的模型是single thread,對於現在server拼核心數的趨勢天生水土不服
最後是server有很多種,nginx定位是反向代理,你想nodejs作為一個甚麼的server?
load balance? monitoring? storage? email? web? proxy?....
目前除了web server nodejs稍為有公司願意大規模使用外,其他類型的server還不算普及
server不是只求性能,更求魯棒性robust (術語HA),在已經大規模使用的java/ C/ C++建構的server中性能與穩定性俱有,而且生態早就建立好了,nodejs在backend首先沒有生態可言,其次拼性能與穩定性也好,在沒有明顯優勢的情況下當然是選舊有的
最後是招人難易度,先不說C/ C++,請一個能用的java碼農多容易,而且請回來再差也好,改改xml也是可以的,實際上已經大規模應用的java server基本上是打log改xml之類維運工作
nodejs嘛,嗯很多高性能伺服器io模型和它都是一樣的,單進程epoll事件模型,只是一個最優設計,理論上目前這個是最快的,用了這個方法的伺服器都是一樣快,沒有更快的說法
高頻計算的服務不適合nodejs
不不不,node只要一用cpu性能大幅下降。
單核的特性讓它只能當前端這種io密集,cpu巨少的。
性能真正強的還是jvm上的那群(scala play,java netty vertx)以及go以上是性能強而且靠譜的,別跟我提什麼nginx加html(haml,erb之類的)就算,你上班真敢這麼寫?node發展速度很快但是因為不穩,流程管理不好所以一直是前端。全棧的框架目前我看到較快的有phoenix(elixir)歡迎大家留言補充單線程模式決定了node.js不適合所有場景。
是。都在用。因為其他原因。——縮略語補全線——(node.js採用的模式)是最快的。
大公司現在都有用啊。
在同模式中這個比較有名,不考慮模式優勢誰快一些都有可能,不過就不是瓶頸因素了。推薦閱讀:
※如何看待 Azer Ko?ulu 刪除了自己的所有 npm 庫?
※Node.js 適合用來做 web 開發嗎?
※Websocket 用node還是python開發比較好?
※redis怎麼做消息隊列?
※Mozilla Rhino 和 Node.js 兼容嗎?