Node を稼働させる
in production
2014-06-14
Yosuke Kumakura (kumatch)
@kumatch
Feedtailor inc.
Current game: Diablo3 reaper of souls
「みんなどうやって
Node を (production で)
動かしているの?」
というお話があったので
Agenda
• これまでやった Node production を振り返り
ます。
• これから動かそうとしている人に参考になり
そうな問題点をあげていきます。
2011
はじめての Node
Node v0.4, その後 v0.6
!
forever で起動するようにしていたが、Node v0.6.2 に上げたら
プロセス操作できなくなってしまったので、しかたなく init.d ス
クリプト + monit へ移行した。
node は nvm でインストール。deploy は独自 (rsync)
2012
Node 自体に慣れてきた
Node v0.6 => v0.8
!
東京 Node 学園祭で「binary install しろ」と言
われて驚きながらも環境を作り直す。
プロセス管理は init.d or supervisord with monit
2013
インフラの構築&稼働方法の
転換期
Node v0.8 => v0.10
!
Chef + Capistrano によるインフラ構築へ移行
Node も nodejs recipe を使って binary install
プロセス管理は upstart + monit へ。
(試験的に forever, pm2、最終的にはこの時は採用せず)
Production Node サーバを
作るのに出くわす問題
Node 実行環境
どうやって作るの?問題
配布バイナリを使う
• 公式配布バイナリに Windows, OSX, Linux,
Solaris 版あり
• 各種 OS パッケージマネージャでも配布
• 少し古い場合あり
配布バイナリを使う
• Chef recipe もあります。
• binary / source どちらからでも構築可能
• Version manager プログラムで入れる手も。

色んなバージョンで試せる。

導入するユーザと Path に注意
Node 起動プログラム
どうするの?問題
機能性
柔軟性
pm2 / forever
upstart
init scripts
先ほど色々あげていましたが…
環境に適した/やりやすい方法を選ぶ
init scripts
• shell で出来ることなら大抵いけるはず
• 自分で頑張れば何でもできる
• 自分で全部頑張る必要あり
upstart
• init script をもう少し書きやすく
• 自動起動/プロセスが落ちたら再開など最低
限のプロセス管理機能が簡単に使える
• その上で案外と色々できる
forever (Node)
• node プロセスを常駐させるための module
• プロセスが落ちても即時復帰
• 標準/エラー出力先, PID 管理なども自動で用意
される or 指定可能
pm2 (Node)
• forever + もっと便利な機能
• describe process
• monitoring (CPU, memory)
• Auto cluster (or fork)
etc.
• foreman
• supervisor
• ….
自動起動させたい?
• init.d + node
• upstart + node run
• upstart + forever
• upstart + pm2
もちろん
• nohup node
• forever start
• pm2 start
別に…
Node プロセス
誰で動かすの?問題
意外と悩むプロセス所有権
• root or 専用ユーザ
• 利用手段次第では、目的のユーザでプロセス
を動かすのにちょっとだけ苦労する
余談:
root で動かせるならこんな手も
var user = “myapp”;
!
if (process.getuid() == 0) {
try {
process.setuid(user); // 以後 myapp プロセスに
} catch (e) {
// undefined user
}
}
Node プロセス
メモリ い過ぎてない?問題
基本的には GC されてないだけ
• V8 が自動的にタイミングを見つけて GC する
• 一応手動で GC を起こすこともできる
• --expose-gc オプション付きで Node 起動
• GC すると “Stop the world”
(現実的な量で)
メモリ利用量が多い傾向の内容
• (HTTP などの) クライアント数が本当に多い
• コード内で読み込む (require) ファイルが多い
• (DB などの) コネクションインスタンスを扱っ
ている
Node プロセス
CPU い過ぎてない?問題
他に影響を与えない程度に
CPU をがっつり使う傾向にある
• 見てるタイミング次第で色々ある
• コード(処理のフロー)を見直す
• (稀に) 本当に張り付いてしまっていることが
ある
• monit 等で CPU 張り付きプロセスを落とす
Node Production サーバの
ライフサイクル
create server
deploy
application
start / run
application
Server lifecycle 1
initial
setup
stop
application
update / restart
server
create server
(from template)
deploy
application
start application
($ pm2 start)
destroy server
Server lifecycle 2
create server
($ heroku create)
deploy application
($ git push heroku)
destroy server
($ heroku destroy)
Server lifecycle 3 (heroku)
まとめ
• 「Node プロセスを動かす」部分のみに
フォーカスして、考えるポイントとなる問題
を紹介
• 問題に対しての解法はいくつもある
• サーバ/サービスをどう運用させたいかで

問題に対する解法を選ぶ

More Related Content

PDF
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
PDF
Lxc で始めるケチケチ仮想化生活?!
PDF
Rancherで作る お手軽コンテナ運用環境!! ~ Kubenetes & Mesos 牧場でコンテナ牛を飼おう!~
PDF
多段LXC構成でOpenStackを構築 - LT@コンテナ型仮想化情報交換会LT
PDF
GPU仮想化最前線 - KVMGTとvirtio-gpu -
ODP
自宅サーバ仮想化
PPTX
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
PPTX
軽量Kubernetes環境 K3Sのご紹介
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
Lxc で始めるケチケチ仮想化生活?!
Rancherで作る お手軽コンテナ運用環境!! ~ Kubenetes & Mesos 牧場でコンテナ牛を飼おう!~
多段LXC構成でOpenStackを構築 - LT@コンテナ型仮想化情報交換会LT
GPU仮想化最前線 - KVMGTとvirtio-gpu -
自宅サーバ仮想化
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
軽量Kubernetes環境 K3Sのご紹介

What's hot (20)

PDF
RancherでMesosクラスタをデプロイしてみる的ななにか
PDF
boot2docker の format-me の話
PDF
SocketStream入門
PDF
LXC入門 - Osc2011 nagoya
PDF
初心者がOpenIndianaで自宅サーバを作ったよって話
PPTX
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月
PDF
RancherがみつめるAWX 〜お前のコンテナ、息してるの?〜
PPTX
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
PPTX
今時のDev opsの取り組み事例集
PDF
サーバ構築自動化 On aws sqaleの場合
PPTX
Ubuntu Jujuを使ったOpenStack環境構築 – OpenStack最新情報セミナー 2015年7月
PDF
Eucalyptus on OpenStack
PPTX
Dockerstart
PDF
20120731 c4 saリリースパーティlt
PDF
Eucalyptus 2.0 始めました!
PPTX
shinken monitoringについて真剣に調べてみた結果
PDF
openSUSEの紹介とサーバ構築
PPTX
SIerにおけるKubernetes活用(OSSユーザーによる勉強会-公開版)
PDF
20131019 Eucalyptus in OSC 2013 Tokyo/Fall
PDF
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
RancherでMesosクラスタをデプロイしてみる的ななにか
boot2docker の format-me の話
SocketStream入門
LXC入門 - Osc2011 nagoya
初心者がOpenIndianaで自宅サーバを作ったよって話
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月
RancherがみつめるAWX 〜お前のコンテナ、息してるの?〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
今時のDev opsの取り組み事例集
サーバ構築自動化 On aws sqaleの場合
Ubuntu Jujuを使ったOpenStack環境構築 – OpenStack最新情報セミナー 2015年7月
Eucalyptus on OpenStack
Dockerstart
20120731 c4 saリリースパーティlt
Eucalyptus 2.0 始めました!
shinken monitoringについて真剣に調べてみた結果
openSUSEの紹介とサーバ構築
SIerにおけるKubernetes活用(OSSユーザーによる勉強会-公開版)
20131019 Eucalyptus in OSC 2013 Tokyo/Fall
最近のJuju/MAASについて 〜 15分版 - OpenStack最新情報セミナー 2017年11月
Ad

Viewers also liked (17)

PDF
Scalable Node.js with Redis Store
PPTX
Node.js×mongo dbで3年間サービス運用してみた話
PDF
Iketeru Gopher 5 points
PPTX
TitaniumとNode.jsは兄弟
PDF
東京Node学園 今できる通信高速化にトライしてみた
PDF
Node.js patterns of module export / require
PDF
Node.js勉強会 Framework Koa
PDF
Extensible web
PDF
9 anti-patterns for node.js teams
PDF
webエンジニアのためのはじめてのredis
PDF
メンテナンス性の良いWebシステムを構築するためにjavaとフロントエンドでやるべきこと
PDF
[AWSマイスターシリーズ]Amazon CloudWatch & Auto Scaling
PDF
ヒカルのGo 資料 Webアプリケーションの作り方
PPTX
Socket.ioを使ってライフゲームで遊ぶ
PDF
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
PDF
これからの Microservices
PDF
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
Scalable Node.js with Redis Store
Node.js×mongo dbで3年間サービス運用してみた話
Iketeru Gopher 5 points
TitaniumとNode.jsは兄弟
東京Node学園 今できる通信高速化にトライしてみた
Node.js patterns of module export / require
Node.js勉強会 Framework Koa
Extensible web
9 anti-patterns for node.js teams
webエンジニアのためのはじめてのredis
メンテナンス性の良いWebシステムを構築するためにjavaとフロントエンドでやるべきこと
[AWSマイスターシリーズ]Amazon CloudWatch & Auto Scaling
ヒカルのGo 資料 Webアプリケーションの作り方
Socket.ioを使ってライフゲームで遊ぶ
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
これからの Microservices
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
Ad

More from kumatch kumatch (6)

PDF
AngularJSからReactに移ったケースの話
PDF
Node platforms
PDF
Node.js Error & Debug Leveling
PDF
Learning a node stream
PDF
[Node] Multiprocessing and runs continuously
PDF
PHPカンファレンス関西2011/スマートフォン時代のWebシステム
AngularJSからReactに移ったケースの話
Node platforms
Node.js Error & Debug Leveling
Learning a node stream
[Node] Multiprocessing and runs continuously
PHPカンファレンス関西2011/スマートフォン時代のWebシステム

Nodeを稼働させる