Connect」が9月21日から23日まで、サンフランシスコで開催されました。OpenWorld、JavaOneとの同時開催でした。FacebookにおけるMySQLの役割、大規模運用の背景などを紹介しています。その内容をダイジェストで紹介しましょう。Facebookでデータパフォーマンスチームのマネージャをしている。Hadoopなどにも関わっている。どんな種類のデータをMySQLで扱っているのかについて。Facebookとは基本的にグラフだ。グラフにはVertices(頂点)とEdge(端)がある。図ではページ、ユーザー、コメント、写真、アルバムなどがあるが、これらがVertices、あるいはObjectsと呼んでいる。Likes(いいね)、友人、アップロードなどはEdgeであり、一方向だったり双方向だったりする。ビッグデータと呼ばれる分野で出てくるHadoopやデータウェアハウスの多くでは、バッチ処理でデータが分析されたりする。FacebookではMySQLのデータはリアルタイムにアクセスされている。あなたがFacebookのページ上でフレンドリストを参照したとすると、そのデータはMySQLから引き出されたものかもしれない。われわれは、ペタバイト級のデータに対して1桁ミリ秒単位でレスポンスタイムを考える。いくつかの数字を示そう。(1秒あたり1120万件の更新)これはピーク時の最大処理速度だ。このほとんどが写真やコメントといったユーザーによって生成されたデータであり、それらがMySQLで処理されていく。その処理にはインサートもアップデートも、もちろんデリートもある。われわれはデータのデリートもしているんだ。(1秒あたり6060万回の検索処理)どれだけのリクエストがユーザーから来ているのか、ということ。(1秒あたり25億件の読み込み)これはキャッシュ後のデータ読み込みだけれど、これだけの件数がユーザーに届けられている。Facebookのページはすべてが動的生成だ。「いいね」といった小さな要素もページを構成しており、データアクセス件数の増加の要因である。したさまざまな種類のデータがリアルタイムにデータベースから取得されてFacebookのページが生成されている。Facebookユーザーは世界中に広がっており、地理的にまったく分散している。Facebookはこうしたデータを扱っている。Facebookアーキテクチャ概要こうしたデータをFacebookがどう管理しているのか、ソフトウェア構造を見ていこう。マスターリージョンとスレーブリージョンの2つに大きく分かれていて、この2つは地理的にも離れている。Clusterがある。ClusterにはWebサーバがあり、そこではHPHPが動いている。クラスタごとにキャッシュも用意されている。ClusterにはMySQLデータベースがあり、キャッシュもある。マスタリージョンとスレーブリージョンのあいだではMySQLのレプリケーションが行われている。それぞれを見ていこう。Facebook独自のPHPHPHPは、Facebook独自のPHPであり、Facebookが自社用に作っている。理由の1つは性能向上のためだ。HPHPには2つのバージョンがあり、1つはコンパイルバージョンで、PHPをC++に変換し、それをバイナリにコンパイルすることで、実行時の処理が軽くなる。1つはJavaVMのようにPHPをバイトコードに変換してVM上で実行するものだ。これもCPUの処理負荷を軽くできる。次はMemcache。オープンソース版だがいくつかの拡張を加えている。Cacheがあり、ここには非常にホットな最新のデータが入っている。Cacheに入り、それぞれのクラスタはそこへアクセスする。Cacheはそれにより負荷を分散する役割があるため、Webサーバの近くにあることが大事なのだ。Cacheはデータベースへのアクセスを回避して高速化するためのキャッシュだ。TAOはわれわれが開発したもので、基本的にはMemcacheをベースにしたカスタムなグラフサーバだ。Facebookのグラフモデルを理解している。WormholeはPub/Subシステムで、MySQLがログをここに書くと、その内容をほかにディストリビューとしていくというものだ。5.6へマイグレーション中MySQLは5.1を使っている。これはFacebookがヘビーにカスタマイズしたもの。非同期クライアントライブラリや性能改善のためのパラレルスキャン、ダンプ最適化、モニタリング機能などを社内で開発しており、Facebookの環境で優れた性能をだせるようにしている。5.6へのマイグレーションに取り組んでいて、数台が本番で使われ始めている。数カ月でマイグレーションが完了するだろう。Slaveに期待している。やって世界中にある何千何万ものMySQLを管理しているか。Scannerを作った。これは自動化システムで、マシンが本番環境に向かってどれだけ進捗しているかを報告してくれる。まっさらなサーバが配備されると、OSなどのイメージを入れてMySQLをインストール、必要なデータをサーバへコピーして本番投入となる。本番稼働中はモニタリングを行い、壊れれば修理し、再びイメージを入れ直していく。ストレージ活用のため圧縮が重要にFlash/Flachcacheの2種類のストレージを使っている。Facebookでは高速なストレージとして100%SSDを用いたシステムを採用している。つねにこれが最良のものとは行かないのは、コストが高いためだ。そこでSSDと巨大な容量のHDDを組み合わせることで、大容量かつSSDで高速アクセスを実現する。圧縮はいまのわれわれにとって非常に重要だ。多くのフラッシュストレージを使っていて、そこには容量的な制約があるからだ。その制約を乗り越えるために圧縮は非常に重要であり、いまでは本番データのほとんどには圧縮がかかっている。私たちは優れた圧縮のためにリソースを投入しており、現在のところ非常にうまく機能している。≫次の記事さくらのクラウドがアベイラビリティゾーン提供。backend」を提供開始。Niino(jniino)IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。WebAssembly」正式版を5月にリリース。Backupに新機能。EC2インスタンスをEBSごとバックアップ/リストア可能に。クロスリージョンにも対応クラウド上のアプリケーションでもExcelファイルの入出力を可能にするライブラリ。Cloud、大容量長期アーカイブ向け「Archive」ストレージを提供開始。CodeのJava環境が強化。usPublickeyについて/運営者についてお問い合わせ広告についてプライバシーポリシ。