DoSに耐えそうなonlineプラグイン

  • ページ: BugTrack2
  • 投稿者: henoheno
  • 優先順位: 普通
  • 状態: 完了
  • カテゴリー: プラグイン
  • 投稿日: 2005-06-26 (日) 19:55:17
  • バージョン:

修正

Overhaul: O(N) => O(1).
* 1000 unique-host-get-3-pages causes 3000 writes => 1000 writes + 2000 reads.
* Four crawler-get-300-pages causes 1200 writes   => 4 writes + 1196 reads.
* 100 online plugin in a page causes 100 writes   => 1 write + 99 caches

メッセージ

従来のonlineプラグインにボトルネック(常時ファイルに書き込む、ファイルロックの待ち行列が発生しやすい、再呼び出し時の動作が重い)がありそうでしたので、作り直しました。

onlineプラグインとは

  • 既定の時間(デフォルトでは5分)にアクセスしたホスト(IPアドレス)の数を出力します。
  • そのために、専用のファイルにホストと、アクセス時刻(秒)を随時記録します。

従来の処理

O(N): 負荷は総アクセス数(ユニークユーザー数 x 平均アクセス数)に比例する
  * ユニークなホスト 1000 台がそれぞれ 3 ページにアクセスした場合、
    3000 回のファイル書き込みが発生する
  * 4 台のWebクローラーが300ページにアクセスした場合、
    1200 回のファイル書き込みが発生する
  * onlineプラグインを100個設置すると
    100 回のファイル書き込みが発生する
  • アクセスしたホスト(IPアドレス)と、アクセスした際の時刻(秒)を常に書き込む -> あるホストが既定の時間内に複数回アクセスすれば、複数回書き込む
  • 最後に必ずファイルをもう一度読み込み、その行数を返す -> 略
  • 呼ばれた時に必ず動作する -> 複数個設置すれば複数回動作する

問題点: 負荷がユニークユーザー数 x 平均アクセス数に比例する

  • ファイル書き込みをアクセスの度に(常に)行うため、遅い
  • ファイルロック(排他)を常に行うため、プロセスの待ち行列が発生しやすい
  • onlineプラグインを複数個設置した/された場合に複数回動作してしまう

今回の処理

O(1): 負荷はユニークユーザー数に比例する
  * ユニークなホスト 1000 台がそれぞれ 3 ページにアクセスした場合、
    1000 回のファイル書き込み(と2000回のファイル読み込み)が発生する
  * 4 台のWebクローラーが300ページにアクセスした場合、
    4 回のファイル書き込み(と1196回のファイル読み込み)が発生する
  * onlineプラグインを100個設置すると
    1 回のファイル書き込み(と99回のメモリ上のキャッシュ参照)が発生する
  • 既定の時間が経過していないホストの個数を数える。その中に自分(IPアドレス)が含まれていれば、ファイルを更新しない
  • 動作済みであれば、キャッシュしたその結果を返す

改善点: 負荷はユニークユーザー数に比例する

  • ファイル書き込みは最初にアクセスした時にのみ行われ、既定の時間内であればファイルの読み込みだけで作業が完了する
  • ファイルロック(共有)の頻度が多くなるため、プロセスの待ち行列が発生し辛い
  • onlineプラグインを何個設置しようが、内部は一度しか動作しない


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-03-20 (金) 14:36:11
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.182 sec.

OSDN