使える!サーバ運用の実践テクニック

第10回 [キャリアアップ編②]大規模サイトのサーバはどのように構成/運用されているのか?

この記事を読むのに必要な時間:およそ 3 分

CDN化を実現するプロダクトとサービス

それではこれらのシステムはどのように構築されるべきものなのでしょうか? 具体的なサービスやプロダクトで見てみましょう。

アカマイ(Akamai)によるCDNサービス

CDN環境を実現するための専門のインフラ設備を持った業者です。現時点ではディー・エヌ・エーをはじめ,名高い企業が利用しており,正に業界最大手であります。 コンテンツ転送量を積算にて課金したりするため,サービスが成長すると比例してコストを必要としますが,急成長による,通信量,負荷等の吸収,サービス開始までのリードタイムが短くて済む等の利点があります。

有償サービスを利用しない場合,自社でサーバや回線の調達を行い,運用まで含めて面倒を見る必要があります。その際に利用するべきプロダクトとしていくつかありますので,よく検証をして,自社のスタイルにあったプロダクトを選定することをお勧めします。

squid

比較的歴史が古く,有名なプロダクトです。設計が古いため,昨今のプロダクトと比較するとハードウェアリソースを使い切れないとか,そもそもプロダクトとしてのパフォーマンスの限界等と言われることもあるようです。たとえば,ロードアベレージが高い割にはCPUのコアが単一でしか利用できない(他のコアを利用しないなど)これは直近のハードウエアとの組み合わせでよく聞かれることですが,逆に非常に安定している事と,有力な情報がたくさん手に入ると思います。展開するサービスが安定している等といったことなどと総合して検討すればと思います。

nginx

軽量Webサーバやリバースプロキシ,L7などでのロード分散としての資料は手に入りやすいのですが,コンテンツキャッシュとしての事例がなかなか見当たらず,実際に利用する場合は検証が必要かと思います。

TrafficServer

USのYahoo!が部分的に採用していたもので,元々は昔買収したInktomi(懐かしい)にも同様のものがあったかと思います。それを進化させたものかどうかの確証はありませんが,日本のYahoo!でも一部採用されているらしいとのこと。ビッグユーザが大々的に利用し,オープンソース化に踏み込んだプロダクトとあれば,今後注目される可能性があります。

varnish

少し前から名前を聞き始めるようになりました。国内外,名高いサービスでも採用されているようで,少し検索してみれば(利用しているサービスは限定的な可能性もありますが)Twitter,FacebookをはじめWikia,Slashdot,Opera,VGなどで利用しているようです。

自社サービスのコンテンツをCDN化する場合,以上のような性質を持つプロダクトを,図6の静的コンテンツのキャッシュ部分に該当するサーバに導入,設定を行いサービス展開します。

CDNのシステム構成

それでは,静的コンテンツを分散してキャッシュするシステム構成はどのようにすべきでしょうか? ここからは机上の設計と検証,本番への一部組み込みを行い改善するというサイクルを重ねて安定させていく所ではありますが,一番最初の大方針は重要です。特に,現状同等の構成でさらなるアクセス向上を前提に考えるようであれば,インターネット側に負荷分散できる仕組みを置き,その内部は階層的になるようキャッシュサーバを配置することを検討します。

最終的には,キャッシュサーバ側の代表(親)を決めて,キャッシュ内で解決できなかったコンテンツをオリジナルからロードできる形を検討します。

図7 キャッシュサーバの構成

図7 キャッシュサーバの構成

基本中の基本の構成,動きはそんなに複雑ではありません。内部にあるものを外部に出すために必要な関連付けを行うことと,内部の動きを理解しておけば,初めてでもそれなりに構築できると思います。たとえば,リクエストを受け付ける部分をキャッシュ側にするのであれば,DNSの名前解決の先を変更したりする必要があります。

CDN内のキャッシュサーバは,リクエストされたデータをある一定の単位で保持することができること,キャッシュに無い場合の挙動(APサーバなど後ろへパスする⁠⁠,利用状況からよりアクセス頻度の高いコンテンツと,そうでないコンテンツを,たとえばメモリ上へ展開する,ディスクへ退避させるなどを定義できること,特定のコンテンツなど,明示的にpurgingすることができることが基本機能として求められることかと思います。

同じように運用機能として何を提供するべきか十分に検討する必要があります。たとえば,間違ってコンテンツを登録したため,緊急で消したい(部分的なキャッシュクリア⁠⁠,ある程度まとめて消したい(バッチ的な機能)などは実際にアプリケーションを開発,運用している担当が必要とする機能だと思います。

また,安定運用,効率化という観点では,ヒット率向上のスコアリング化,コンテンツ消滅のためのルール等を決め,チューニングする必要があるでしょう。

まとめ

ディー・エヌ・エーの場合,現在外部サービスを利用している関係上,上記に関わる「サービスを通じた実践的なノウハウ」を今の所は持ち合わせておりませんが,いろいろな可能性を日々検証しています。

次回は,どのような検証を行っているか,その内容と結果について紹介できればと思います。

著者プロフィール

高岡将(たかおかすすむ)

2010年7月より株式会社ディー・エヌ・エーにて,主にインフラ,サービスアプリケーションが関わらないミドルウエアなどで,コスト,パフォーマンス改善につながる仕組みを模索する。

趣味は(ほぼ)サブ4の足前を誇るジョギングと音楽(管楽器)を少し。

twitter:http://twitter.com/susutwi