2010年02月02日

websocket pipelineで、webは早くかつ低コストになるか?を実験



websocket pipelineのデモの拡張版を開発しました。で言及している、websocket pipelineですが、このデモだけ見ると「なんだ、特殊な用途だけじゃん」と思った方もいらっしゃると思います。

僕の意見としては,「いやいや、この話は普通のWebにも成り立つと考えています」なんですが、具体的なユースケースが無いと、やっぱり信憑性に欠けるし分かり辛いですよね、、、ということでサンプルデモを作って見ました。

09)
サンプルサイトは、こちら(http://bloga.jp/koma/ws/100images/wspipeling.html)です。今回も、高橋登史朗さんのご厚意で公開させていただいています。

「画像をたくさん含むようなサイトを見ようとすると、画像のダウンロードに時間がかかって中々開かない(・ω・)」という経験をされた方は多いはずです。で、この要因の一つとして「httpでは、前の画像のダウンロードが終わらないと、次の画像のダウンロードが始まらない(待ってる時間だけ時間を食っている)」というのがあるのでは?と考えました。

一方,websokcet pipelineなら「いちいち、(前の画像のダウンロードが終わるのを)待たないんだから、ひょっとして早くなるんじゃない?」と考えたのが、このサンプルを作った理由です。

"via ws(websocket pipeline)"をクリックすると、websocket pipelineで100個の画像(我が家の愛犬ですf^-^;;)をダウンロードし、"via http(append DOM)"をクリックすると、普通のhttp(DOMのappendChildで実装しています)で同じ個数の画像をダウンロードします。

正直、僕が以前作ったwebsocket pipelineデモほど、その差は顕著ではないのですが(僕の環境ではwebsocket pipelineの方が2倍程度早いだけだった。アメリカとかからなら、もっと開くと期待)、その理由は以下ように考えられます。
  • 同時コネクション数の違い
  • DOMの追加で画像ダウンロードを行うと、最大で6個のtcp connectionが張られるようです(chromeの場合:xhrでは最大で3コネクションでした)。同時にコネクションを複数張るというのは、例えるなら、6台のトラックで複数の荷物を手分けして運ぶのと同じですので、それだけ従来のhttpでも早くなります。
  • base64エンコード
  • websocket(執筆時点では72)では、binary-frameも運べることになっているのですが、現状binaryを扱うapiが無い(;-;)ということで、websocket pipelineではbase64でテキストエンコードした画像をダウンロードしています。ですので、ダウンロードするバイト数がwebsokcketのほうが現状では大きくなってしまう(1.5倍程度)というのが、顕著なスピードの差に繋がらなかったと考えられます。
「じゃぁ、websocket pipelineは、このケースではあまり有効ではないの?」というとそんなことは無いと思います。現状のhttpではスピードをあげるために6個のコネクションをwebサーバーと同時に張っていますが、これはそれだけサーバーのリソースを消費していることになります。apacheの場合だと、単純に6倍のメモリを消費することになりますし、CPUリソースを見ても(正確なテストはしていませんので、参考値として見てください)http(6 connection)でCPU loadが大体5%程度だったのに対し、websocket pipeline(1 connction)では、0.5%程度でした。同時接続ユーザー数が増えると、この数値は単純には掛け算で効いてきますので、この差は無視できないものになります。

更に、クライアントとサーバーの間には、たくさんのNW機器が存在しますが、これらの中には同時セッション数に比例して、リソースを消費する機械が数多く存在します。例えば、NATやfirewall, ロードバランサー, proxyなどが挙げられます。これらの機械は、ルーターやスイッチなどに比べると比較的高価な機械です。

従って、現状のhttpのままで(スピードを出すために大量のコネクション数が消費されて)webが進化していくことは、サーバーコストやNWコストの増大を意味しているとも考えられますし、そのコストは最終的にエンドユーザーに返ってきます(ここで"返ってくる"という言葉は、サービスの進展を阻害すると捉えて欲しいです)。そういった目線で、このサンプルデモを見ていただけると嬉しいです(^-^)。

僕の持論は「websocketはチャット(などのサーバーpush)だけでは無い。むしろ現在のhttpが抱える様々な問題を解決するもと位置づけたほうが正確」ですが、それを伝えるユースケースの一つになると嬉しいですね。

人気ブログランキングへ
kotesaki at 00:09│Comments(1)TrackBack(0)clip!html5 | websockets

トラックバックURL

この記事へのコメント

1. Posted by GW2 gold   2013年04月08日 22:15
この記事では、私は他の人と共有転載したい、非常に良いです!

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔