一昨日から今日まで3日間の日程で開催されていた、MySQL Conference & Expo 2007に行ってきました。日帰り圏内どころか、自転車圏内で、こういうカンファレンスがあるのは、素晴しいです。

詳細は、随時アップされるであろうプレゼン資料と、Planet MySQLに大量の報告があります(全部英語ですけど)。

個人的に注目していたのは、Digg.com、Flickr.comとYoutube.comのDB周りアーキテクチャのセッションでした。あとは、http://www.mysqlperformaceblog.com/の人のセッションは、細かいTipsが多く、具体的にだいぶ役に立ちそうです。

というわけで、簡単に注目したセッションの内容を紹介してみます。ちなみに、内容の正確さは無保証です:P 気が向けば、もっといろいろ考察してみるかもしれません。





Technology at Digg.com, Eli White, Tim Ellis http://www.mysqlconf.com/cs/mysqluc2007/view/e_sess/12204 成長著しいDiggのインフラの話。わりと普通のアーキテクチャという印象です。 最初は、Apache 1.3, PHP 4.xから1台で初めた。徐々に、MySQL 4.0 myisam, MySQL full-text search, myisam -> innodb, replication, memcached, php 5.xと進化していった。

現在の標準構成 load balancer + PHP Servers, MySQL master + slaves phpとmysqlの関係はランダムで決定

Memcachedを使う ダイナミックなページにもキャッシュデータを使うことができる。FailoverやRedundancyもある。 サーバ故障時の失敗したデータを除去・無視できる レプリの遅延を隠すことができる。 Writeする時にmemcacachedのデータもupdateしている。いつなにをキャッシュするかが重要

データ分割 一つのDBを複数に分割することで、性能向上とスケーラビリティを得る JOINなどの一部のSQLが使えなくなる / PHPの負荷が増える / アプリケーションコードが複雑になる

現在のDB関連チャレンジ RAMを増やしてもスケールしなくなってきた I/O負荷が高く、SQLを書き直したい マスタがSPOF (でも、言うほど悪いものじゃない) Use diskTest.pl from http://faemalia.net/mysqlUtils

データセンタを冗長化のために複数使っている

全文検索には、Luceneを使っている

http://eliw.com/conference/ に資料はあるよ

Federation at Flickr: Doing Billions of Queries Per Day, Dathan Pattishall http://www.mysqlconf.com/cs/mysqluc2007/view/e_sess/11925 FlickrのDB担当の人

Flickrでの問題 一つのMasterに多数のSlaveという構成 Slaveへの遅延 たくさんのSPOF ページを返すのに秒単位の時間がかかる

解決案 Shard(破片)にデータベースを分割し、PHPロジックで、それらの結合と一貫性維持を行なう Shardは、Master-Master構成 ユーザを特定のShardに固定する 負荷に応じて、Shard間を移動させる 分割できないデータは、Global Ringに配置して、memcacheさせる 負荷は50%に抑えておいて、メンテ時や障害時にも問題なく処理できるようにする

一日、数億のクエリを処理する

ハードウェア EMT64, RHEL4 with 16GB ram, 6 disk 15 rpm raid-10 12 TB of user data (ちなみに他のプレゼンで、写真用ファイルサーバの容量は2ペタとか。奥さん、ペタですよペタ)

