菊池高志

Railsアプリをmod_proxy_balancerで負荷分散しつつ、ちょっとYSlow対策

2008-07-28 00:05:47

社内システムにはRailsを使ってるシステムがあったりするんですが、バージョンアップのタイミングで大幅にアクセス数が増えたらパフォーマンスが出なくなったので、同じサーバーの違うポートでmongrelを複数動かすようにして、Apacheのリバースプロキシで負荷分散させつつ、アプリ側の負荷を少しでも下げる為にmod_deflateとmod_expireを使って少しYSlow対策を施してみました。

設定はこんな感じ。 

<VirtualHost *:80>
    ServerName proxy.example.net

  # バランサーの設定(個々のアプリをバランサーのメンバーとして定義)
    <Proxy balancer://apps/>
        BalancerMember http://app.example.net:9001 loadfactor=10 keepalive=On
        BalancerMember http://app.example.net:9002 loadfactor=10 keepalive=On
        BalancerMember http://app.example.net:9003 loadfactor=10 keepalive=On
    </Proxy>

  # バランサーの管理ツールの設定
    <Location /balancer-manager>
        SetHandler balancer-manager
    </Location>

  # 管理ツールはプロキシしない
    ProxyPass /balancer-manager !

  # mod_deflateで"/"以下の画像以外を圧縮する設定
    <Location />
        <IfModule mod_deflate.c>
            SetOutputFilter DEFLATE

            SetEnvIfNoCase Request_URI \
                \.(?:gif|jpe?g|png)$ no-gzip dont-vary

            Header append Vary User-Agent env=!dont-vary
        </IfModule>
    </Location>

  # "/"以下のリクエストをバランサーにプロキシさせる
    ProxyPass / balancer://apps/ timeout=300
    ProxyPassReverse / balancer://apps/

  # js, css, gif, jpg, png のexpire
    <IfModule mod_expires.c>
        <LocationMatch "\.(js|css)?\.*$">
            ExpiresActive On
            ExpiresDefault "access plus 1 years"
        </LocationMatch>

        <LocationMatch "\.(gif|jpg|png)$">
            ExpiresActive On
            ExpiresDefault "access plus 1 years"
        </LocationMatch>
    </IfModule>

</VirtualHost>

効果はなかなか。バランサーでバランスするようにしたことでリクエストはだいぶはけるようになりました。そして、mod_deflateとmod_expireはproxyのapacheとmongrelが別のサーバーで動いていても、体感できるぐらい効果アリでした。

Rail以外でもこの手は結構使えるハズなので、既に動いてるアプリの方をなるべく変更したくない時にも良いかもしれません。

 

※このエントリは ブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet Japan編集部の見解・意向を示すものではありません。
  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]