リバースプロキシ: Pound

Poundとは

The Pound program is a reverse proxy, load balancer and HTTPS front-end for Web server(s).

です。うちでは、リバースプロキシでつかっています。load balancingも出来ますが、まだ使ってません。

どういうものか&どう使っているのか?

リバースプロキシは、たとえばPort80でHTTPのリクエストを受け付けて、別のサーバーのapacheへ(通常は別ネットワークでプライベートIPのサーバとか)、そのHTTPのリクエストを仲介するということができます。Poundは、HTTPヘッダのHost:を見て振り分けるということが容易にできるので、VirtualHostそれぞれに別のサーバーを割り当てるとかが簡単に出来ます。

使い方はほとんどこんなかんじです。
http://eitaro.subject.jp/archives/46

FedoraCore6ではyumで一発インストールが可能で、とりあえずそれを使っています。
わたしもTimeOutでハマりました。。TimeOutはデフォルトで10秒で、apache側がリクエストがあって10秒間応答なしだと、クライアントには503でエラーメッセージが返されます。あとそれだけでなく、10秒間サーバーから、1バイトも転送してあげない、という状態になると、ブチ切りされます。

他のリバースプロキシは?

Apahceのmod_proxyも同様のことができます。mod_rewriteと組み合わせたりも出来て、超便利ですが、うちではCometを使っていて、なんかそれがうまく動かなかったので却下。(Cometについては後で書きます)設定で直るのかなぁ。Squidはそもそもキャッシュとかまだ要らないので、試してません。

Poundは、スレッドモデルでプロセスが1個で、超軽いとかいう特徴はあります。あと安定しています。欠点としては、apachectl gracefulみたいに、再起動なしに設定変更できないことかなぁ。。どうにか解決しようとされている人たちがいるようですが。(まだあんまり読んでない)

TimeOutについて、どういう物なのか調べてみた

FC6にはPound-2.1.6が入っていますが、本家を見るとstableじゃないみたいですね。うーん。

とりあえずソースを読んでみましたが、http.cの超長いthr_http()関数が、メインのスレッドで、ここでリクエストを受け付けて、そのまま別のサーバに転送とかしてるみたいです。BIO_new_socket()とかつかってて、どうもこれはOpenSSLのAPI関数のようです。肝心のtimeoutの秒数は、thr_http()のlstn->toに入ってきて、sockのread/writeでwaitすると(?)、bio_callbackがcallbackされて、poll()してタイムアウトすると、ETIMEDOUTを返して、thr_httpが結果的にexitするようです。

で、ここまでは容易に分かったのですが、このthreadが死んだ後、どうなるかという処理が無いような。。つまりTimeOutした場合、単にTCPセッションをブチ切りして終わり?(運が良ければ、503が返る?)のようです。うーん、ということは"TimeOut 300"とかにしても問題ない訳かな。

TEPCOひかりのコストパフォーマンス

vixy.netが今後どれだけ成長するかは、まだまだ分かりませんが、たとえば映像配信などを行う場合には、帯域がいくら合っても足らない状態になる可能性もあります。

YouTubeの帯域も七不思議の一つですが、ちょっと古いソースで今年5月頃時点の帯域で、 200 terabytes of data per day、つまり秒間で換算すると、平均18.5Gbpsぐらい、月間100万ドルのコスト、だとこのソースは言っております。(後ほど別エントリでこのあたり考察してみようと思います)

仮に18.5Gbpsを月間100万ドルとすると、1Gbpsあたり5.4万ドルです。さて、これが安いのか、高いのか。

このぐらいの帯域になると、IXに直でサーバ置いた方が良いんでしょうが、あんまり値段を調べても分からなかったので、法人向けで、大規模に回線を引こうとすると、どうなるのかをまず調べてみました。

USENの法人向け1Gbpsアクセスラインの、光ギガビットアクセスで、月額50万ほどです。このサービスはベストエフォート型ですので、実測が知りたいところですが、この記事によると、実測200〜300Mbpsのようです。つまり1Gbpsで、月額200±50万円程度。

さっきのUSENのページに上げられていた中で比較で見てみると、KDDIのは、受け付け停止していて、ケイ・オプティコムのは専用線なので、同価格帯は、ブロードバンドセキュリティーBEX1Gbps: IX直結、実測不明、月額200万円程度のようです。

つまり、200万円vs5.4万ドルで、1$=120円換算で、3倍以上のぐらいの開きがあると。

ところで、この1Gbps 月額200万円という数字は、TEPCOひかりの80Mbps 月額0.66万円という数値と比べると、

  • 1Gbps 200万円 = 1Mbps 0.2万円
  • 80Mbps 0.66万円 = 1Mbps 0.0082万円

となり、24倍ぐらいの差となるようです。すげえ。

となると、TEPCOひかりを大量に束ねれば、YouTubeの回線費の約80倍のコストパフォーマンスが!!...という訳には単純にいかないよなぁ。

でも小規模から束ねながら(束ねないでも分散配信すれば良いけどね)スケールしていくのには良い選択のような気もします。

まずはネットワークの現状から。

いまは、サーバ自体が自宅にあって、いわゆる自宅サーバ状態です。
(ここまで来るまで紆余曲折ありましたが、結局ここに落ち着きました)

vixy.netのIPを逆引きすれば分かりますが、TEPCOひかりのホームタイプ+プロバイダがDTIという構成です。TEPCOひかりは、FTTHの中でも、統計的にかなり優秀です。

http://www.bspeedtest.jp/stat1_1.html
http://www.musen-lan.com/speed/htmldata/

上下80Mbpsぐらいは十分出ています。時間帯によって速度低下とかも特に感じないですし、海外線が特に重いとかそういうこともなく、です。これで月額6,615円ですので、十分すぎるコストパフォーマンスではないかと思います。

問題点としては以下があります。

  • ホームタイプが建物が3Fまでという制限がある
  • まともなプロバイダが安価に固定IPを提供していない
  • KDDI ひかりoneに来年頭から統合されることが決定していて、統合後の速度がおちるかも(?)

幸い、この問題点も、

  • 自宅なので3Fまでの制限には引っかからなかった
  • 回線自体はド安定してて、回線の問題で落ちたことはいまのところ一度も無いぐらいなので、IPもあまり変わらない。(もちろんDynamicDNSにはしている)

というかたちで、いまのところクリアしています。

設置してみました

vixy.netのシステム構築のメモ書きをしようかなと。
とりあえず今の構成。

  • OS: Fedora6 (kernel 2.6.18)
  • Frontend: Poundでリバースプロキシ
  • Httpd: Apache 2.2 + mod_php (5.1) + mod_extract_forwarded
  • Backend(変換): flv2mpeg4をさらに改造したもの(Cで構築)
  • DB: MySQL 5.0
  • ハードウエア: Core2Duo 2GBマシン+ Pen4マシン+Celeronマシンの計3台(現時点ではまともに分散処理してない)

Fedora6なので、各構成要素があんまり枯れていない感じが何とも。。Fedora6を入れたのは、Core2Duoをまともにサポートしている、2.6.18を、超楽に入れたいとかそういう安易な理由です。

MySQLを単にセッションの保存用に使っているところを、memcachedを最近使い始めてみました。