Amazon商品の価格変動チェック「あまとも」
コミックダッシュ!は初音ミクGTプロジェクトを応援しています
個人ニュースサイトを巡回する「メガとんトラック」
全ての記事 携プレMP3 デジカメ レコーダ ゲーム メモリ デジモノ コラム 雑談 ブログ あまとも コミックダッシュ!
前の記事次の記事
2008/05/06 23:59 - 2008/05/06

負荷対策のためロボット向けページ表示時のDBアクセスを省略する

カテゴリ : コミックダッシュ! タグ :

    最近 サーバ負荷 がかなりマズイことになっています。
    今度こそ間違いなく、回線負荷ではなくサーバのCPU負荷です。
     
    Load Averageの値が昨年10月頃には 平均2.5 くらいだったものが、
    現在では 5.0くらいまで膨らんで きています。既にレッドゾーンです。
    皆さまにはご迷惑をお掛けして誠に申し訳ございません。
     
     
    急いで対策を考えなければいけないのですが、その中で
    以前から気になっていたことを1つ試してみることにしました。
    それは検索エンジンの 巡回ロボットの負荷対策 です。
     
    現在のあまともやコミックダッシュ!は、トップページや
    ランキングのページなどは負荷対策のため最初から 静的HTMLのページ
    になっています。しかし、そのほかのページ、たとえばシリーズ情報の
    ページや、各ユーザの蔵書一覧のページなどは 全て動的生成 です。
     
    これは何を意味するのかといいますと、アクセスしてくる人がたとえ
    巡回ロボットであったとしても、純粋なユーザのアクセスと同じように
     
     その場で ”DBから” 最新情報を引き出して
     
    出力HTMLを一所懸命作り上げることになります。
     
    これが少量のアクセスなら良いのですが、あまともやコミックダッシュ! のように
    商品数やユーザ数によってページ数がどんどん増えていく
    タイプのサービスだと、巡回ロボットのアクセスのほうが
    一般のユーザのアクセスより格段に多くなります。
     
    具体的には 約9割がこうした巡回ロボットのアクセスなのです。
     
     
    そこでこんな仕組みを考えました。
     
    巡回ロボットがアクセスに来たときに、そのページの内容を
    丸々キャッシュとして ファイルに落としておき、次回ロボットが
    同じページをクロールしてきたときには、10日以内であれば
    キャッシュの内容をそのまま読み込んで返す、というものです。
     
    CGIがUserAgentを判別して、巡回ロボットのときだけこうした動作をします。
    一般のユーザ向けにはキャッシュは使わず、常に最新の情報が返ります。
    CGI自体の起動は避けられませんが、毎回毎回ページ情報の構成のために
    大量にDBにアクセスしていたぶん の負荷はこれで大幅に軽減されるはず、です。
     
    ちなみにGooglebotは私のサイトのページを合計で 3万ページ/日 も拾っていきます。
    平均して 2~3秒に1回 のペースが24時間休みなく続いているようなイメージです。
    これらに それぞれ×数回以上のDBアクセス が伴っていると考えるとゾッとします。
     
    今回作ったキャッシュは別々のロボットの間でも同じものを使いまわしますので、
    Googlebot、Yahoo! Slurp、msnbotなど 多種多様なロボット が同じページに
    アクセスしてきても、キャッシュの生成は全部あわせて10日に1度で済みます。
     
    本来、UserAgentによって別の情報を返すことは対検索エンジンのマナーからいうと
    良くないのですが、情報をフェイクしているワケでもありませんし、サーバ負荷が
    危機的状況に陥っていることも鑑みると酌量の余地はあると思っています。
     
    仕組みの性質上、最初のうちはキャッシュの 「生成」 の率が高く、
    逆に負荷を上げてしまう可能性がありますが、時間が経つにつれて
    キャッシュの 「流用」 の率が上がってくる見込みになります。
     
    すでにこの試みを始めて3日目になりました。初日=3%、2日目=6%、3日目=12%
    と順調にキャッシュ利用率が上がっているのが確認できています。
    サーバ負荷にもほんの僅かながら改善の傾向が見られました。
    このままキャッシュ利用率が5割を超えるくらいまで育ってくれることを願っています。

    CK@デジモノに埋もれる日々 @ckom
    ブログ「デジモノに埋もれる日々」「アニメレーダー」「コミックダッシュ!」管理人。デジモノ、アニメ、ゲーム等の雑多な情報をツイートします。



    投稿者 CK : 記事URL | コミックダッシュ! | | 2008/05/06 23:59


    « はてなポイントによる「投げ銭」を延々と投げ続る意味と効果

    トップに戻る

    SH903iのバッテリをドコモショップで交換 - 結果的に無償でした »



    ▼ コメント ▼

    No.18867   投稿者 : きりけん   2008年5月11日 03:44

    Linuxでcpu負荷がLoadAverageを押し上げる要因になることはほとんどありません。
    大抵の場合、ボトルネックは別の理由だったりします。
    メモリ不足で大量のswapアクセスが発生するとか(RDBMS+Apacheはご存知かとは思いますが、激しくメモリを消費します)ミドルウェアの設定チューニング不足とか(大抵の場合デフォルトではサーバリソースを占有しないように設計されていますが、組み合わせて使うとそれがかえって仇になることもあります)
    メモリ増量やRDBMS設定パラメータの見直しでも効果があるかと。
    UserAgentによって別の情報を返すのは最終手段ではないでしょうか?


    No.21633   投稿者 : annkokunokizinn   2008年7月16日 10:25

    ロボットのアクセスの数が自分のサイトブログ
    のほうにはたくさん歩けどホムペのほうには逆にロボットが少ない状況
    どうやらサーバーによってもホムペよりブログのほうが高待遇であるようだ


    ご自由にコメントください(=゜ω゜)ノ  ▼ コメント入力欄を開く ▼
    ※管理人は多忙のためお返事はほとんどできません(スミマセン)。
    スパムおよび本文と無関係なコメントは削除対象になる可能性があります。


    ▼ はてなブックマークのコメント ▼


    ▼ トラックバック ▼

    このエントリーのトラックバックURL:

    ★コミックダッシュ! 10,000人突破ありがとうキャンペーン!(9/18~10/23)
     
    デジモノに埋もれる日々 : (C) CKWorks