社内勉強会でUnicornについて発表したけどあまりの準備不足に全俺が泣いたので少しずつまとめていく〜その5

タイムアウト(Application Timeoutsより)

アプリケーションとタイムアウトに関する考察がされている様子。

  • ネットワークの信頼性は保証されないため、外部リソースとやりとりする場合はタイムアウトを設定可能であることが重要
  • タイムアウトできるノンブロッキングI/OとIO.selectを使うこと
  • RubyのTimeoutモジュールは必ずしも信頼できるとは限らない
    • 割り込みやタイムアウトを適切に行えないC拡張などがある
    • タイムアウト後にensureによってタイムアウトが無効かされてしまうかもしれない
    • Timeoutモジュールを使うのは最終手段で、IO.select(もしくは類似のもの)が最も信頼できる
  • Unicornタイムアウト機構は最終手段(ただし、ワーカープロセスの再起動くらい高価な処理)