Swiftply(日本語で何て読む?)はRubyで書かれたHTTPに特化したプロキシフレームワークである。ApacheのModProxyBalancerやHAProxyなどのプロキシといったフレームワークと大きく異なる点として、プロキシとアプリケーションサーバの関係が上げられる。Swiftplyではブラウザからのリクエストを受け付けるSwiftplyサーバとリクエストを処理する複数のSwifplyクライアントから構成される。Swiftplyクライアントは全て同じアドレス・ポートでリクエストを待ち受ける。
Swiftiplyサーバーの設定ファイルの作成
config/swiftiply_config.ymlにサーバの設定ファイルを設置する。(パスは任意でOK)
cluster_address: 0.0.0.0
cluster_port: 80
#daemonize: true
timeout: 3
map:
- incoming:
- www.yourdomain.com
- www2.yourdomain.com
outgoing: 127.0.0.1:8000
default: true
設定項目
- cluster_address: ブラウザからのトラヒックをListenするアドレス (String)
- cluster_port: ブラウザからのトラヒックをListenするポート (Integer)
- daemonize: デーモンで起動する時はtrue (true or false)
- timeout: Swiftiplyがブラウザからのリクエストを保持する秒数(sec)。expireしたコネクションの場合は503が返される。 (Integer)
- map: ドメイン(or IP)別にリクエストの宛先を定義するセクション (Hash)
- incoming: ホスト名を指定する。配列で複数指定することも可能。(String or Array)
- outgoing: リクエストの宛先を指定する。Swiftplyサーバからのリクエストは同じアドレス&ポートで待ち受ける複数のSwiftplyクライアントによって処理されるのでここで複数の宛先を指定する必要はない。(String)
- default: ブラウザからのリクエストがどのincomingにもマッチしなかった際にそのパターンが適用される。(true or false)
Swiftply Mongrel単体での起動
swiftiply-X.X.X/bin/mongrel_railsというMongrelの起動スクリプトが用意されているのでそのスクリプトを使用する。
% SWIFT=1 /usr/bin/mongrel_rails start -e production -p 10000
% EVENT=1 /usr/bin/mongrel_rails start -e production -p 10000
SWIFTまたはEVENTという環境変数を指定することでMongrelをそれぞれのモードで起動できる。SWIFTモードではSwiftplyサーバを立ち上げていないと動作しない。
クラスターとして使用する
初めにサーバを起動する。
初めに示した上記の設定ファイルを使用した場合、80番ポートと8000番ポートがListen状態になる。
% swiftiply -c config/swiftiply_config.yml
8000番ポートに転送されたリクエストのデータを処理するMongrelを起動する。swiftiply_mongrel_raiilsというスクリプトが用意されているのでこれを利用する。(環境は強制的にenvironmentになる)
$ swiftiply_mongrel_rails start -n 10 -p 8000 -d
プロセスIDファイルが#{RAILS_ROOT}/log/dog#{n}.pidに生成されるので再起動する時はmongrel_railsスクリプトを使用する。(swiftiply_mongrel_railsは現在起動のみ)
% mongrel_rails restart -P log/dog1.pid
Apache + Mongrel Cluster環境とSwiftiplyでabを使用しベンチマークを取得した。
リクエスト数を500で固定し同時接続数を10~200まで上げて静的ページと動的ページのRequest per secoundの値を比較した。
CPUはIntel(R) Celeron(R) CPU 2.66GHz, メモリは2GB構成。
静的ページにおいてはかなり高速化している。
TODO
ソースリーディングとアーキテクチャについて理解を深める。
mongrel_clusterのように簡単に扱えるスクリプトを作成し実用で使えるかどうか検討する。