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モジュールは、以下の特徴を持つ。

特に、 帯域の制限を超えたクライアントは管理スクリーンにおいて赤いライトで強調 され、彼らは最初の35リクエストを過ぎての各ダウンロードごとに503(200に 変更)のステータスコードを得る。

現在の「file TX debt」の計算

それぞれのクライアントについて、tx1debtは以下のルールによる。

例として、tx1debt_maxが30でtx1cred_rateが50/1000 [files/sec]なら、クラ イアントは30ファイルを自由にダウンロードでき、あとは20秒に1ファイル落 とせる。

現在の「byte TX debt」の計算

それぞれのクライアントについて、tx2debtは以下のルールによる。

例として、tx2debt_maxが500、000バイトでtx2cred_rateが8000/8 [files/sec]なら、クライアントは500,000バイトを自由にダウンロードでき、 あとは1秒に1000バイト落とせる。

サーバ関連へ戻る