スポンサーサイト

  • 2013.05.03 Friday

一定期間更新がないため広告を表示しています

  • 0
    • -
    • -
    • -

    Apache2.4新機能 〜MPMのevent〜 その1

    • 2013.03.23 Saturday
    • 22:49
     今日はApache2.4のおそらく目玉だと思われるMPMのeventについて調べた結果を書いていきます。このモジュール自体は2.2の頃からあったけど、「experimental」実験的な位置づけでした。
    2.4から「experimental」ではなくなり、正式版となりました。

    MPMのeventを一言で表せと言われたら「KeepAlive問題に対応したworker版」と答えます。
    KeepAlive”問題”って書いたけど、これはもうApacheのアーキテクチャー上の仕様なワケで、これを”問題”とするかはその人次第でしょう。
    ・・・僕は問題だと思うんですけど。まずはちょっと説明してみようと思います。

    ちなみにMPMやworkerってことがわからない人は、まずはドキュメントを読んでみましょう。Apacheはドキュメントがしっかりしているから調べやすくて良いなぁーと思います。
    http://httpd.apache.org/docs/2.4/mpm.html
    http://httpd.apache.org/docs/2.4/mod/worker.html


    前提
    Apacheは、1つのプロセスで一つのリクエストを処理するアーキテクチャーです。
    一つのプロセスが”同時”に複数のリクエストを処理しません。
    プロセスを一つしか用意しない場合、同時に5つのリクエストがきたら一つずつ処理していきます。一つのプロセスは一つのリクエストを処理し終わるまで次のリクエストを処理できません。
    というアーキテクチャーなためApacheは常に複数のプロセスを立ち上げ、リクエストが多くなれば立ち上げるプロセスの数を増やします。
    ちなみに下記がプロセス数の調整を行うディレクティブです。
    MinSpareServers
    MaxSpareServers
    workerの場合はこの説明のプロセスをスレッドに変えて読んでください。(preforkとworkerの区別が付かない人は上述のApacheドキュメントのMPMの項を参照しましょう)


    KeepAlive問題
    (HTTPの)KeepAliveとは、1つのTCPコネクションで複数のHTTPリクエストを処理することです。
    KeepAliveを使ったときと使わなかったときの比較を図に表します。



    このようにKeepAliveを使うとTCPコネクションの確立/切断の分の処理が少なくて済み、効率よくリクエストを処理できるわけです。KeepAliveを使ったときの問題はコネクションを切るタイミングにあります。


    KeepAliveを使わない場合
    1つリクエストが終わればそれで終わりなので、Apacheはレスポンスを返したらコネクションを切断できます。

    KeepAliveを使う場合
    keepAliveはコネクションを維持して次のリクエストを受け付けるわけなのでレスポンスを返してもコネクションを切りません。ではいつ切るのでしょうか?
    Apacheでは次の二つの方法でコネクションを切断します。
     ・タイムアウト
     ・リクエスト処理数

    タイムアウトは○○秒間待ってもリクエストが来なかったらコネクションを切るです。いつまでも待っていても仕方ないので必ず値を定義すべきです。
    リクエスト処理数は、一つのコネクションの中で○○回リクエストを処理したらコネクションを切るです。
    これらはor条件になってるので、どちらかを満たせばコネクションを切ります。

    さて、Apacheはこの「切れる条件」が達成されるまでの間は律儀にユーザーからのリクエストを待つわけです。実はこの待っている間のこのプロセスはリソースの無駄なのです。
    タイムアウトが5秒と定義されていたら、タイムアウトが来るまでの5秒間は他の人(コネクションを確立している以外の人)のリクエストを受け付けられません。
    もう一つの切断条件であるリクエスト処理数は、現実的な有効な値のセットはほぼ無理ですからKeepaliveを使ったときは十中八九タイムアウトで切れます。しかしタイムアウトになるまでの時間は他のリクエストを受け付けてくれずただ待っているだけの無駄な時間です。
    このような問題が従来のApacheにはありました。
    そのため、Apacheを構築する際には普通KeepAliveを使いません。デフォルト(インストール時のconfファイル)でもKeepAliveはoffです。

    前置きが長くなりましたがこのようなKeepAlive問題に対応したのがmod_event君です。お話は次回に続く・・・







    スポンサーサイト

    • 2013.05.03 Friday
    • 22:49
    • 0
      • -
      • -
      • -
      コメント
      コメントする








          

      PR

      calendar

      S M T W T F S
            1
      2345678
      9101112131415
      16171819202122
      23242526272829
      3031     
      << December 2018 >>

      selected entries

      categories

      archives

      recent comment

      recommend

      links

      profile

      search this site.

      others

      mobile

      qrcode

      powered

      無料ブログ作成サービス JUGEM