Opera’s newest Web browser introduces a new technology platform, Opera Unite, allowing you to stream music or share files, photos and more, right from the browser.

Cosimo Streppone - My Opera front page caching and Varnish hackingにおいて、My Operaのフロントページのアクセスを高速化するためにVarnishを導入した経緯と、効果的にVarnishを使うために実施したチューニングが紹介されている。大規模サイトにおけるVarnishの採用事例としてや、モバイルデバイスに対するVarnishの適用事例、カスタム設定の方法として参考になる。

Varnishはアクセラレーションを目的としたリバースキャッシュプロクシ。アクセスの高速化を目的にオペレーティングシステムの機能をフルに発揮するように開発されている。余計なIOを発生させず、設定ファイルすらコンパイルしてバイナリとして読み込むなど、高速化という一点に絞って最適化されている。既存のサーバインフラに挟み込み、あとは設定を記述するだけでよく、高い効果が期待できる。

Cosimo Streppone - My Opera front page caching and Varnish hackingによれば管理しているサーバのトラフィックはMy Operaのフロントページのアクセス数の増減に一致しており、同サーバのチューニングに長い時間をかけているという。Opera Mini 5.0のデフォルトのスピードダイヤル候補にOpera Mini 5.0が含められることになってからは、さらに詳しく状況を調査し、迅速にさらなる高速化の手を検討する必要がでたという。その結果採用したのがVarnishというわけだ。最初の導入は2009年10月であり、特に静的コンテンツを対象として動作させたと説明されている。

My Operaのフロントページはおもに次の区分向けにコンテンツが作成されているという。

  • 4種類のブラウザタイプ - Opera Mini、Opera Mobile、IE、そのほか標準規約に準拠したブラウザ
  • 18種類の言語
  • 2種類のビュー - モバイル、デスクトップ

この組み合わせですでに単一ページに対して100を超えるバージョンのページが存在することになる。画像といった特定のコンテンツのみならず、HTMLページ全体にまでVarnishを適用するには、これらの対象をどこまで絞り込むかが課題というわけだ。特に問題となったのがAccept-Languageの内容だという。分析結果では10,000ブラウザリクエストに対して500の違う値が存在するという。提供している言語は18だから、できればここを500から18にまで絞り込む必要がある。

de-DE,tr;q=0.999,en;q=0.75,fr;q=0.9,it;q=0.8,ja;q=0.2,ru;q=0.1

そこでVarish VCLファイルへAccept-Languageの値をパースして最終的に18言語に落とし込む関数を実装。そのままVarish VCLファイルへ組み込んで利用することにしたという。これで500という対象を18に絞り込むことができ、Varnishでキャッシュが効果的に働くようになったという。

注目されることが少ないポイントではあるが、Varnishの設定ファイルにはC言語のソースコードを組み込むことができる。設定ファイルはGCCでコンパイルされVarnishに読み込まれて利用される。この特徴を活かしてMy Operaの状況に合うように機能を拡張したというわけだ。同機能は設定ファイルよりもVarnishそのもので処理できた方がスケールが出るため、Varnishへの統合にも取り組んでいるという。ソースコードはcosimo's varnish-accept-language at master - GitHubにて公開されている。