node.jsデプロイQ&A
実践に当たって軽く調査。実践編はまた今度
nodeで書いたwebサーバを公開したいけど、デプロイってみんなどうしてるの?
forever っていうデーモン化ツールがあるから、それを使うのが一般的っぽい
nodeアプリって通常はシングルスレッドだから、マルチコアのCPUパワーを100%生かせない?
Clusterモジュールを使えば、複数のプロセスの起動と、通信をサポートしてくれる
複数マシンでスケールしたいんだけど
node-http-proxyってnpmがあるから、それを使うとnode.jsで、リバースプロキシと、ロードバランサーが実装できる
リバースプロキシ?
クライアントからのリクエストを受けて、特定のサーバに転送する役割のサーバ
ロードバランサ?
クライアントからのリクエストを複数のサーバに分散して、転送するサーバ
静的ファイルはnode使わないで、通常のhttpサーバを使ってnode側の負荷を軽減したい
nginx 使って特定のリクエストは、nodeサーバにリバースプロキシしてあげれば良いよ
ver 1.3.13 から、WebSocketもリバースプロキシしてくれるようになったよ!
Apacheでは?
ざっと見た感じ、WebSocketに対応していないっぽい?
複数マシンでnodeを分散した場合、セッションってどうなるの?
後で調査
nodeで書いたサーバを更新したい
- forever ならば、-w オプションでコードの更新をチェックして、リスタートしてくれる
ホットデプロイしたい!
qilinモジュールなるものがアツいらしい
ワーカープロセスを複数個起動して、そこでサーバを走らせる
メインプロセスにSIGUSR2(ユーザ定義シグナル)を送ると、子プロセスの内、リクエストが無くなったものから再起動してくれる
- upモジュールなるものもあるらしいけど、未調査。性能に多少難があるとかなんとか
自前で環境作成するのが面倒なのでnode使えるPaaS教えて
- Node Ninja - Node.js専用PaaS型クラウドサービス
- dotCloud - One home for all your apps
- あと、AWS Elastic Beanstalk が最近nodeに対応した
- Heroku は、webSoket非対応らしい
- Soket.IO の設定でロングポーリングで通信するように設定すれば、Soket.IOは使える
- Using Socket.IO with Node.js on Heroku | Heroku Dev Center
- 当然性能は落ちるけど
- webSoketのPUSH通信だけ試したいなら、Pusherでも良いかも