*DoSに耐えそうなonlineプラグイン [#m6f9c05d]

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

--------------
#contents

** 修正 [#u10436f7]
- [[cvs:plugin/online.inc.php]] (1.9)
- [[cvs:wiki/50756B6957696B692F312E342F4D616E75616C2F506C7567696E2F4F2D52.txt]] (1.12)

 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

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

*** onlineプラグインとは [#l1f828c4]
- 既定の時間(デフォルトでは5分)にアクセスしたホスト(IPアドレス)の数を出力します。
- そのために、専用のファイルにホストと、アクセス時刻(秒)を随時記録します。

** 従来の処理 [#t1898b67]
- [[cvs:plugin/online.inc.php?rev=1.8&content-type=text/plain]] (1.8)

 O(N): 負荷は総アクセス数(ユニークユーザー数 x 平均アクセス数)に比例する
   * ユニークなホスト 1000 台がそれぞれ 3 ページにアクセスした場合、
     3000 回のファイル書き込みが発生する
   * 4 台のWebクローラーが300ページにアクセスした場合、
     1200 回のファイル書き込みが発生する
   * onlineプラグインを100個設置すると
     100 回のファイル書き込みが発生する

- アクセスしたホスト(IPアドレス)と、アクセスした際の時刻(秒)を常に書き込む -> あるホストが既定の時間内に複数回アクセスすれば、複数回書き込む
- 最後に必ずファイルをもう一度読み込み、その行数を返す -> 略
- 呼ばれた時に必ず動作する -> 複数個設置すれば複数回動作する

*** 問題点: 負荷がユニークユーザー数 x 平均アクセス数に比例する [#ic765131]
- ファイル書き込みをアクセスの度に(常に)行うため、遅い
- ファイルロック(排他)を常に行うため、プロセスの待ち行列が発生しやすい
- onlineプラグインを複数個設置した/された場合に複数回動作してしまう


** 今回の処理 [#oadb10e9]
- [[cvs:plugin/online.inc.php?rev=1.9&content-type=text/plain]] (1.9)

 O(1): 負荷はユニークユーザー数に比例する
   * ユニークなホスト 1000 台がそれぞれ 3 ページにアクセスした場合、
     1000 回のファイル書き込み(と2000回のファイル読み込み)が発生する
   * 4 台のWebクローラーが300ページにアクセスした場合、
     4 回のファイル書き込み(と1196回のファイル読み込み)が発生する
   * onlineプラグインを100個設置すると
     1 回のファイル書き込み(と99回のメモリ上のキャッシュ参照)が発生する

- 既定の時間が経過していないホストの個数を数える。その中に自分(IPアドレス)が含まれていれば、ファイルを更新しない
- 動作済みであれば、キャッシュしたその結果を返す

*** 改善点: 負荷はユニークユーザー数に比例する [#saca03c8]
- ファイル書き込みは最初にアクセスした時にのみ行われ、既定の時間内であればファイルの読み込みだけで作業が完了する
- ファイルロック(共有)の頻度が多くなるため、プロセスの待ち行列が発生し辛い
- onlineプラグインを何個設置しようが、内部は一度しか動作しない


----
-ああ、マニュアルも直さなくては・・・ -- [[henoheno]] &new{2005-06-26 (日) 22:34:52};
-- [[PukiWiki/1.4/添付文書]]にて反映されました -- [[henoheno]] &new{2005-07-25 (月) 00:00:50};
- ojPtXTXIetvRCbs -- [[eplkcjrdv]] &new{2009-03-20 (金) 14:36:10};

#comment
//#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.045 sec.

OSDN