Node.jsはソフトウェアの癌になる。
eBayのテクニカルスタッフであるTed Dziubaから衝撃的な記事が出たので、読んでしまいました。
Node.js is Cancer
要点を訳すと下記のような感じです。
- Node.jsがスケーラブルであるというのは嘘。
- Nodeの運用が難しい。
- やっぱりJavaScriptってWebアプリのロジックを書くのに向いてない。
Node.jsがスケーラブルであるというのは嘘であるについて
Nodeのサイトには下記のように記載されています。
Almost no function in Node directly performs I/O, so the process never blocks. Because nothing blocks, less-than-expert programmers are able to develop fast systems.
Node内のほとんどのfunctionはI/Oを直接実行しないため、プロセスはブロックされない。ブロックがないため、エキスパートなプログラマーではない人たちでも高速なシステムを構築することが可能だ。
これに対して、上記の記事では、fibonacci関数を作ってその実測値が遅いことを問題視しています。
function fibonacci(n) { if (n < 2) return 1; else return fibonacci(n-2) + fibonacci(n-1); }
この関数をNodeからfibonacci(40)みたいにして呼び出すと、かなり時間がかかってしまうとのことです。
これはスレッドがない、イベントモデルが原因で、ブロックされないとはいえ、関数からすべての値が戻るまで結局プロセスは待ち状態になってしまいます。
ブロックされてしまうとCPU使用率が上がるので、結果として効率が落ちてしまい、遅くなります。
記事によれば、これはエキスパートなプログラマーではない人がNodeのシステムを組んでしまうと恐ろしい結果を招く危険性をはらんでいるとのことです。
スケーラブルなシステムを構築するためには結局エキスパートが必要になってしまうということですね。
Nodeの運用について
こちらはより単純。今管理者としてNodeを運用する知見を持っている人が少ないことが問題視されています。
知見がない場合、開発者が管理者も兼務する事になり、ロードバランシングやプロキシなどの現代のサーバーが持っている
はずの設定を開発者がする事になります。
また、CPUを多用するようなコードに目を光らせることになるため、非常に運用が難しくなるとのことです。
やっぱりJavaScriptってロジックを書くのに向いてないについて
よりより単純。
下のようなコードを書きたくない。
if (typeof my_var !== "undefined" && my_var !== null) { ... }
from scratch的感想
確かにNodeはCPUが優先されるようなシステムには向かないかもしれませんが、それはどの技術にも存在する
向き不向きといった問題なのかと思います。
大規模システムを構築する際にはケアしないといけない所が従来とは異なるというだけかなぁと思います。
JavaScriptの問題についてはGoogleも問題視していますね。
Google の新言語「Dart」は新しい JavaScript か? - WebOS Goodies
こういうのを読むとサーバーサイドJavaScript自身、まだ過渡期の技術なので、さらなる進化が求められる気がします。