【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
インターネットを過激に加速するアプリdolipo技術解説

dolipoの種明かし

drikin
2008/8/19

 Polipo技術解説 

 dolipoは、PolipoというオープンソースのプロキシプログラムにGUIを追加したプログラムです。

 Polipoは、フランス人のJuliusz Chroboczek氏が主体となって開発されています。

 Polipoがどのような原理でネットワークを加速しているのか、少し技術的な解説をしてみたいと思います。

 といっても、僕もPolipo自体の開発にはかかわっていません。あくまでも、公式ページやdolipo解説サイトなどの解説からひもといた内容です。

 プロキシによるネットワークの高速化は、Polipoがはじめてというわけではありません。そもそも、多くのプロキシプログラムには、データをキャッシュしてデータの転送を効率化して高速化する機能が備わっています。

 Polipoが興味深いのは単なるデータキャッシュだけでなく、さらに積極的にネットワークを高速化させるため、いくつかの意欲的な機能を実装していることです。Polipoの公式ページによると、4つの高速化のための仕組みが導入されていることが記述されています。

  1. 接続先のサーバが対応している場合、できる限りHTTP/1.1のパイプライン機能を利用する。
  2. データのダウンロード時に、データを部分的にキャッシュして、中断されたらそこから再開する。
  3. クライアントがHTTP/1.0でリクエストした場合、PolipoがHTTP/1.1に変換しサーバにリクエストし、必要であれば再度HTTP/1.0に戻してクライアントに伝える。
  4. サーバの遅延をさらに軽減させるために、Poor Man's Multiplexingと呼ぶテクニックを利用することもできる(オプション)。

 それぞれの詳細について、Polipoのホームページの解説などを参考にしながら、もう少し説明していきましょう。

 反応の遅いデータはすっとばせ!

(1)接続先のサーバが対応している場合、できる限りHTTP/1.1のパイプライン機能を利用する。

図6 HTTPによるデータ取得シーケンス概念図

 パイプライン機能について説明する前に、初心に戻ってHTTPプロトコルについて少しおさらいします。HTTPプロトコルは、そもそも、リクエストとレスポンスが対となるステートレス(状態を維持しない)なプロトコルです。

 今時の一般的なWebページは、画像やCSS、JavaScriptファイルなど多数のファイルから構成されています。

 HTTP/1.0では、リクエストごとにサーバへのTCP接続を確立してデータを取得するので、1つの Webページにたくさんのファイルがリンクされていると、1つ1つのファイルを取得するごとにサーバへの接続・切断を繰り返しながらデータを転送していました。

 また、RFC 2616では、1つのサーバへの同時接続は2つまでが推奨されています。RFCはあくまでも推奨なので、この同時接続数を増やしてブラウザを高速化する裏技をいまだによく見掛けることがあります。

 現在主流のHTTP/1.1では、Keep Aliveという機能が追加され、HTTP/1.1に対応したサーバでは、サーバとの接続を維持したまま複数のファイルを取得することができるようになりました。

 Keep Aliveはサーバへの接続・切断コストを減少させるもので、それだけでも効果は大きいのですが、あくまでも、1つのコネクションに対してリクエストは、1つずつ処理されていきます。

 1つ1つファイルを取得している途中で、レスポンスの遅いデータが存在すると、そのレスポンスが終わるまで次のリクエストは待たされることになります。

 パイプライン機能は、さらにサーバとの転送効率を良くするために、1つのリクエストのレスポンスを待たずに次のリクエストを連続的に発行するという機能です。これにより、データの転送効率も向上し、ネットワーク上のトラフィックを軽減する効果も得られます。

 図6に HTTP/1.0、HTTP/1.1(Keep Alive)、HTTP/1.1(パイプライン)それぞれにて、3つのデータを受信するときのシーケンスの概念図を描いてみました。実際にはこんなに単純な話ではありませんが、Keep Alive、パイプラインの有用性が理解できると思います。

 パイプライン機能はHTTP/1.1で定義されているものの、実際のHTTPサーバではパイプライン機能の実装にバグが含まれていることが多く、Firefoxなどのブラウザでもパイプライン機能は実装されていますが設定は隠されていて、デフォルトでは無効にされているのが現状です。

 Polipoの公式サイトの解説では、Polipoは接続先のサーバのパイプラインサポートが有効かどうか慎重に調べたうえで、できる限りパイプライン機能を利用するようにプログラムされていると書かれています。

 いちからのやり直しでなく、キャッシュを活用しよう

(2)データのダウンロード時に、データを部分的にキャッシュして、中断されたらそこから再開する。

 HTTP/1.1 にはRangeという機能もあります。これは、1つのリクエストに含まれるデータの一部分を指定して取得する機能です。

 大きなデータを取得中に、突然コネクションが切断されたとき、通常だとデータを一から取得し直しになるのですが、Polipoは部分的なデータをキャッシュしておいて中断された部分から再開することで高速化を図っています。

 サーバとクライアントの通訳で転送の効率化を図る

(3)クライアントがHTTP/1.0でリクエストした場合、PolipoがHTTP/1.1に変換しサーバにリクエストし、必要であれば再度HTTP/1.0に戻してクライアントに伝える。

 これは、ほとんど(1)で解説した内容です。HTTP/1.1は、1.0に比べてデータ転送を効率化するための機能が多数取り入れられています。

 しかし、クライアントのリクエストがHTTP/1.0として発行されると、HTTP/1.1の機能が使えなくなってしまうため、Polipoが中継に入ってHTTP/1.0<->HTTP/1.1の変換を行い転送の効率化を図っています。

 1つのコネクション上で複数リクエストを同時に発行してみる

(4)サーバの遅延をさらに軽減させるために、Poor Man's Multiplexingと呼ぶテクニックを利用することもできる(オプション)

 最後に紹介するのがPoor Man's Multiplexing(以下PMM)として紹介されている高速化技術です。この機能は、デフォルトではオフになっています。

 これは、Polipoの解説を見ると、どうもパイプライン機能よりさらに積極的にデータを取得するための技術のようです。

 パイプライン技術を利用しても、データはあくまでも1つのコネクション上で取得することになります。どこかにボトルネックがあれば、データの遅延は存在してしまいます。

 本来であれば、複数のデータは複数のコネクションに分割して取得する方が効率がよいのですが、これも前述のようにRFC 2616で1サーバ2コネクションまで制限され、サーバ負荷の観点から大量のコネクションは推奨できません。そこで、PMM技術を使って、1つのコネクション上で複数リクエストを同時に発行しようという試みのようです。

 また、Rangeリクエストを併用して、データを分割して取得することも行っているようです。画像データなどは、先頭のヘッダを見ればデータのサイズなどは取得できるので、すべての情報を取得しなくてもブラウザがレンダリングを開始できる効果が得られるようです。

 ただ、PMMはパイプライン機能が動作して初めて効果を発揮する機能ですし、本家のWebサイトでも本質的には信頼できないと記載されているので、あまり推奨できる機能ではないようです。

 dolipoの場合、PMMの機能を有効にするには、dolipoのメニューバー(図4)のOptionからEnable PMMをチェックしてください。簡単に有効・無効を切り替えられるので、問題が起きたらオフにするという使い方でパフォーマンスの違いを検証してみるのもいいと思います。

dolipoの種明かし
  Page1
少しでもネットワークを高速化したいヨーロッパ圏から学ぶ
インターネットを過激に加速するアプリdolipo技術解説
Page2
Polipo技術解説
反応の遅いデータはすっとばせ!
いちからのやり直しでなく、キャッシュを活用しよう
サーバとクライアントの通訳で転送の効率化を図る
1つのコネクション上で複数リクエストを同時に発行してみる
  Page3
dolipo Tips
Proxy設定の自動切り替えと除外サーバの設定
adブロックフィルタのカスタマイズ
さらなるカスタマイズ
ネットワークレイヤの課題に残された可能性

 

「Master of IP Network総合インデックス」

ホワイトペーパーTechTargetジャパン

Master of IP Network フォーラム 新着記事
  • どこまで出る? LTEの通信速度 (2010/3/17)
     光ファイバに匹敵する通信速度を実現すると期待されているLTE。ホントにそんなに出るの? という疑問に答えます
  • インターネット世界の地図 (2010/2/23)
     荷物の届け先まではどの道を通っていけばいいのでしょう? それを決める「経路選択」の仕組みを説明します
  • Androidアプリはビジネスになるのか (2010/2/12)
     「iPhoneアプリの次はAndroid?!」NECビッグローブのAndroidアプリ販売サイト「andronavi」を通して、その可能性に迫る
  • 知られざるLTEのネットワーク構成 (2010/1/13)
     LTEのネットワーク構成やプロトコルスタックを詳解。それぞれどんな役割を果たしているかを解説します

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?