bwshare
bwshareとは
bwshareはApacheのモジュールの1つで、
同じ人からの連続したアクセスを制限し、多くの人がウェブページを公平に見
られるようにします。
公式サイト
インストール
まず、
公式サイト
からダウンロードします。ここでは、Apache 1.3.23+bwshare 0.1.2 の組みあ
わせですが、それより新しい分には問題ないと思います。
まずapacheとbwshareを展開します(tar xfvz apache_1.3.23.tar.gzなど)。続
いてapache_1.3.23/src/modules/bwshare ディレクトリをつくり、そ
こにbwshareを展開して出来た mod_bwshare.c と Makefile.tmplを置きます。
注意:makefileはおかない
その上で、apache_1.3.23のディレクトリで、
./configure --activate-module=src/modules/bwshare/mod_bwshare.o
として、make, make installすればできあがり。起動はいつも通り、
apachectl start でよいです。
あとはhttpd.confに
<IfModule mod_bwshare.c>
<Location /bwshare-info>
SetHandler bwshare-info
</Location>
<Location /bwshare-trace>
SetHandler bwshare-trace
</Location>
</IfModule>
と書くと、http://(url)/bwshare-info/ などで情報が見られます。
注意:SystemVのshared memoryを使うので、SHMが必須となります。FreeBSDでは、
options SYSVSHM #SYSV-style shared memory
options SYSVMSG #SYSV-style message queues
options SYSVSEM #SYSV-style semaphores
としてkernelを作ってください。jailを使っている場合には、さらに(jailの
外で)
#sysctl -w jail.sysvipc_allowed=1
とする必要があります。なお、/etc/sysctl.conf に
jail.sysvipc_allowed=1
と書いておいてもOK。
ただし、これをするとjailのセキュリティが甘くなるという諸刃の剣。素人に
はおすすめできない。
動作原理
統計による制限
の3種により制限する。たとえば、
1. 2, 3の条件下で、R1=1Mbpsの帯域をP1=95%の確率で利用できる。
2. 3の条件下で、1時間平均にしてR2=100kbpsの帯域をP2=95%の確率で利用できる。
3. 8時間あたりR3=50kpbsの帯域をP3=95%の確率で利用できる。
という感じ。
目的
http://www.topology.org/src/bwshare/README.html
の一部を訳したものです。
このモジュールの目的は、個々のクライアントホストによる帯域の利用をウェ
ブサイトのオペレータが制御することにある。
'bwshare'モジュールは、度を超えたユーザによるアクセスを一時的にブロッ
クする。
これは、特にウェブサイト全体を、高速にダウンロードするユーザに向けられ
ている。行き過ぎた速度は、サーチエンジンのロボットにとって悪いエチケッ
トであると考えられる。
このモジュールが行うことは、2つのカテゴリーのクライアント:人間のユー
ザと、良いふるまいをするサーチエンジンがアクセスの妨害を受けないように
することである。
人間でない、行儀のわるいクライアントは、できるだけすみやかに減速される
べきである。
ほとんど皆が、やけになって自身のヒットレートを増加させようとするインター
ネットにおいて、サイトへの訪問者の情熱をそごうとする行為は、気違いに見
ッえるかもしれない。
しかし、オーストラリアでは、メガバイトほどのトラフィックを支払っており、
もしも、ウェブサイトが本当に大きいのなら、世界中どこであれ全体をダウン
ロードする訪問者の中から、大きな利益が得られない。
度を超えたユーザが特定できたとき、スロットルモジュールができることは、
たくさんある。
- 彼らのリクエストを遅くしたり、放棄したりする
- ユーザへの視覚的な指摘あり/なしいずれも出来る。
- そして、速度低下を永遠にも、一時的にもできる。
私は、ユーザに視覚的な指摘をして、一時的にリクエストを放棄する実装を選
んだ。
放棄は、遅延(速度を落す)よりも実装がはるかに簡単で、また、
もし一時的にサーバを利用しすぎたとしても、本当の人間のユーザには引き続
きアクセスできるのが良いと思ったからである。
それが、なぜ放棄を一時的にしたか、またユーザに明示したかの理由である。
現在のところ、bwshareモジュールは、以下の特徴を持つ。
- IPアドレスについて、それぞれのクライアントホストがリクエストしたファイ
ルの数の記録
- IPアドレスについて、それぞれのクライアントホストがダウンロードしたバイト
数の記録
- bwshare_traceというハンドラを通して、記録したデータをオペレータがHTML
で見ることが可能
- それぞれのホストによってダウンロードされたバイト数、なされたリクエスト
数、平均帯域の測定に基づくいろいろな漏れるバケツが表で見える
特に、
帯域の制限を超えたクライアントは管理スクリーンにおいて赤いライトで強調
され、彼らは最初の35リクエストを過ぎての各ダウンロードごとに503(200に
変更)のステータスコードを得る。
現在の「file TX debt」の計算
それぞれのクライアントについて、tx1debtは以下のルールによる。
- クライアントがファイルをリクエストしたとき、tx1debtは1増える。
- クライアントがT秒間idleだったとき、tx1debtは T * tx1cred_rateだけ減る。
- ここで、tx1cred_rateはホストごとの、長期間での平均のファイルリクエスト
の比率から得られた値である。
(例:tx1cred_rateが 0.05files/sec ならば、20秒に1回1つのファイルをリク
エストできる)
- tx1debtが0になると、それ以上減らない。つまり、creditは蓄積しない。
- tx1debtが決められた値tx1debt_maxを超え、新しいリクエストがなされたとき、
クライアントは200コードを受けとる。
- このことから、ファイルダウンロードの限界は、T秒間に tx1debt_max + T *
tx1cred_rate 個である。
例として、tx1debt_maxが30でtx1cred_rateが50/1000 [files/sec]なら、クラ
イアントは30ファイルを自由にダウンロードでき、あとは20秒に1ファイル落
とせる。
現在の「byte TX debt」の計算
それぞれのクライアントについて、tx2debtは以下のルールによる。
- クライアントがダウンロードしたら、tx2debtはファイルのバイト数だけ増え
る。
- クライアントがT秒idleすると、tx2debtは T * tx2cred_rateだけ減る。ここ
で、tx2cred_rateはホストごとの、長期間での平均のファイルリクエストの比
率から得られた値として規定される。
(例:tx2cred_rateが 1000bytes/sec ならば、1秒に1000bypeのファイルをダ
ウンロードできる)
- tx2debtが0になると、それ以上減らない。つまり、creditは蓄積しない。
- tx2debtが決められた値tx2debt_maxを超え、新しいリクエストがなされたとき、
クライアントは200コードを受けとる。
- このことから、ファイルダウンロードの限界は、T秒間に tx2debt_max + T *
tx2cred_rate バイトである。
例として、tx2debt_maxが500、000バイトでtx2cred_rateが8000/8
[files/sec]なら、クライアントは500,000バイトを自由にダウンロードでき、
あとは1秒に1000バイト落とせる。
サーバ関連へ戻る