• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Webアプリケーションの無停止稼働
 

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

on

  • 5,749 views

 

Statistics

Views

Total Views
5,749
Views on SlideShare
3,372
Embed Views
2,377

Actions

Likes
3
Downloads
8
Comments
0

8 Embeds 2,377

http://blog.kazuhooku.com 2345
http://www.slideshare.net 17
url_unknown 6
http://webcache.googleusercontent.com 4
https://twitter.com 2
http://orhowilearnedtolovetheperl.com 1
http://reader.aol.com 1
http://www.newsblur.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 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 日