*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