Web アプリケーションの無停止稼働 Server::Starter, Parallel::Prefork, Starlet  を使って 株式会社ディー・エヌ・エー 奥 一穂
ご注意 特定の会社の話ではなく、あくまでもオープンソースのモジュールの使い方を説明しているだけですよ 2011 年 1 月 21 日 Web アプリケーションの無停止稼働
要旨 高負荷・大規模環境における、プリフォーク型アプリサーバの  fork  負荷問題について 以下のタイミングおける  fork  処理の分散する手法 ワーカープロセス回収時 アプリケーション再起動時 Server::Starter, Parallel::Prefork, Starlet  による実装と運用法 Web アプリケーションの無停止稼働 2011 年 1 月 21 日
プリフォーク型サーバが抱える問題 ワーカープロセスの起動コストが大きい fork  が多発するタイミングでパフォーマンスが劣化 既存解決策 : mod_bumpy_life (Apache) by hirose31++ MaxRequestsPerChild  をランダマイズ ワーカープロセスの終了時期を分散する効果 ⇒  ワーカープロセス再起動のタイミングが分散される Starlet  でも同様のことができればいいのに… Web アプリケーションの無停止稼働 2011 年 1 月 21 日
Starlet  における再起動間隔ランダム化 plackup -s Starlet \ --min-reqs-per-child=50  \ --max-reqs-per-child=100 Web アプリケーションの無停止稼働 2011 年 1 月 21 日
ワーカープロセスが起動するタイミングっていつ ? 古いワーカープロセス回収時 ⇒  MaxRequestsPerChild  のランダム化で対処済 アプリケーションのアップデート時 ⇒  どうしよう ? 2011 年 1 月 21 日 Web アプリケーションの無停止稼働
アップデート時の再起動問題 ウェブアプリをアップデートした際の再起動 既存の手段 : LB から切り離し ⇒ アプリ再起動 ⇒切り戻し 問題 :  時間がかかる・並列化できない Web アプリケーションの無停止稼働 2011 年 1 月 21 日
解決策 : Slow Restart 「じわじわ起動/終了する機能 ワーカープロセスの数を保ちながら fork のタイミングを分散 Web アプリケーションの無停止稼働 2011 年 1 月 21 日 listen spawn app. servers accept app. logic fork & exec accept app. logic SIGUSR1 fork & exec accept app. logic SIGHUP
Slow Restart  デモ Web アプリケーションの無停止稼働 2011 年 1 月 21 日
Using Slow Restart with Starlet start_server --port=80 \ --signal-on-hup=USR1  -- \ plackup -s Starlet … \ --spawn-interval=1  \ yourapp.psgi Web アプリケーションの無停止稼働 2011 年 1 月 21 日
Parallel::Prefork  の  Slow Restart  対応 $pm = Parallel::Prefork->new({ … , spawn_interval => $interval, trap_signals => { ‘ TERM’ => ‘TERM’, ‘ HUP’ => ‘TERM’, ‘ USR1’ => [ ‘TERM’, $interval ], }, }); Web アプリケーションの無停止稼働 2011 年 1 月 21 日
各モジュールの対応バージョン Server::Starter >= 0.11 Parallel::Prefork >= 0.11 Starlet >= github trunk   Web アプリケーションの無停止稼働 2011 年 1 月 21 日
成果と次回予告 完了 : fork 負荷の分散 課題 :  アプリケーションのバージョン一貫性 ファイル配布と再起動には、必ずタイムラグがある 一部のファイルは遅延読み込みされる e.g.  テンプレート 旧世代のプロセスが新世代のファイルを読んでしまう ⇩ 続きは次回の  SoozyCon  で! Web アプリケーションの無停止稼働 2011 年 1 月 21 日
参考資料 Writing Hot-deployable servers (introduction of Server::Starter) http://developer.cybozu.co.jp/kazuho/2009/09/writing-hot-dep.html Web アプリケーションの無停止稼働 2011 年 1 月 21 日

Webアプリケーションの無停止稼働