【レポート】

Facebookのデータセンターに見るMySQL活用事例 - MySQLカンファレンス

2 大規模事例におけるMySQL/キャッシュサーバの構成例

    松信嘉範  [2008/04/28]

    Facebookの環境

     キーノートにおいて、Facebookの環境は以下のようになっていると発表された。

    • アクティブユーザー数…7,000万人
    • ユーザー数の増加率…多いときで4日で100万人くらいのペース
    • Webサーバ台数…1万台
    • memcachedサーバ台数…805台
    • MySQLサーバ台数…1,800台(マスター/スレーブ各900台ずつ)
    • Webサーバへのリクエスト量…毎秒2,000万回
    • memcachedのヒット率…95%
    • MySQLサーバへのSQL文発行量…毎秒50万回
    • memcachedのメモリ搭載量…15TB
    • MySQLサーバのメモリ搭載量…25TB
    • MySQLのバージョン…5.0.44 Enterpriseをベースに改変(後述)

    ユーザー数や台数、クエリ量、メモリ量などは桁違いに多いのがわかる。memcachedのヒット率95%や、memcachedとMySQLサーバの台数/メモリ搭載量の比率など、参考になる数値も多い。

    大規模環境のアーキテクチャ

    Facebookのアーキテクチャの話に入る前に、前提知識として、MySQLやキャッシュサーバ(memcached)が、一般的にどのように使われているかを簡単に紹介しよう。この構成は日本でもよく使われている。

    アプリケーションの規模が大きくなるに従って、1台のMySQLサーバでは処理が追いつかなくなるケースが出てくる。処理が追いつかなくなる原因としては、大きく分けて以下の2つ(およびその混合)が挙げられる。

    • SQL文の実行頻度が多いこと(多くの場合、CPUネックになる)
    • データ量が多いこと(多くの場合、ディスクネックになる)

    読み込みが多い場合は、「スレーブの追加」や後述の「キャッシュサーバ」の追加によって、本体のMySQLサーバ(マスター)への負荷を軽減できる。一方で書き込みが多い場合やデータ量が多い場合は、マスター1台ではディスクI/Oネックになって、効率的に処理を行なえない。そこで「アプリケーションパーティショニング(Sharding)」方式によって、複数台のマスターを用意し、大量のデータと書き込み要求を分散させる。多くの大規模環境では、これらを組み合わせた形を取っている。

    アプリケーションパーティショニングがうまくいく(リニアにスケールする)かどうかは、アプリケーションがどのように作られているかに大きく依存する。多くの場合、機能別に分けたり、ユーザーごとに分けたりするが、大きな副作用としてジョインがやりづらくなるという点がある。ジョインを使えばずっと効率良く書けるクエリも、アプリケーション側で処理しなければならなくなるので非効率になる。そのため、できるだけ効率が良くなるようなテーブル設計なども重要なポイントになってくる。

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン