NodeはJavaScriptを扱うエンジニアにとって欠かせないプラットフォームになりつつあります。
現在も絶賛開発中ですが、まだ完璧というまでにはもう少しかかりそうです。
ここでは、ユーザーや管理者としてNode.jsを使う上で、事前に把握しておきたい問題を4つご紹介します。
どのような問題が起こりうるのかを理解した上でライブラリーを利用することで、予想外の時間の浪費が大幅に減ることでしょう。
メモリーリーク
Nodeのランタイムの動作を解釈すると、それがJavaに似ていることがわかります。
Nodeはランタイムが長く、それが原因でメモリーの利用可能領域が減少していく現象がよく見受けられます。時には単にメモリー容量の構成が少なすぎる場合、メモリー上の不要なデータを消せていな場合なども原因として考えられます。
なぜそのような現象が起きているかという理由を突き止めるにはHeap Dumpsというツールを使う必要がありますが、そのツール自体は操作性に優れていて簡単に使うことができます。
Chrome Developer ToolsのHeap Dump解析
CPU
Nodeは分散処理に適していないので、大きな要領の作業には向いていません。
CPUのユーセージがすぐ上がってしまい、作業が順番待ちの状態になってしまう状況が多々発生しています。
Nodeはこのような事態のためにサンプルデータを用意しており、それを使えばどのプロセスで処理詰まりが起きるかを簡単に突き止めることができます。
バックプレッシャー
このバックプレッシャーという現象は別々に処理された情報をひとつの情報としてくっつけて戻す際に発生します。
先頭の情報を先に処理するために後方から来ている情報に対しては待機する指示を出すのですが、これが結果的にはパフォーマンスの低下につながってしまいます。
この問題もモニタリングツールを使うことによってこまかくトラッキングでき、大手のベンダーであればほぼどこでもそのツールを提供しているので、それを活用することをおすすめします。
セキュリティー
Nodeは分解可能なカプセルの中に小さなモジュールを詰め合わせたようなファイル管理を行っています。
Node Packing Manager(NPM)を使えば数秒で新たなモジュールをインストールすることができます。
このモジュールは他社や第3社が開発した不明のものも少なくなく、中にはウイルスや不具合を起こすコードなどが含まれている場合も存在します。
Node Security PlatformやSnykなどのツールを活用すればそれを防ぐことが可能です。
さいごに
JavaScriptのライブラリーは非常に便利ですが、Nodeのようにまだまだ開発を進める必要があるモノも多いのが事実です。
しかし、対処法が全くないわけではないので、問題の報告などを読んだりして対策を考えながらうまく付き合うことがエンジニアには求められます。
この記事は「Four Node.js Gotchas that Operations Teams Should Know about」を翻訳・参考にしています。