TwitterでのMySQL

先日公開されたTwitterで使っているMySQLに関して、面白そうだったのでブログ記事だけ翻訳してみました。

Twitter Engineering: MySQL at Twitter
twitter/mysql · GitHub


翻訳内容


MySQL はinterest graph, timeline, user data, twitter自身等のほとんどのTwitterデータの裏にある永続化ストレージ技術です。
我々の扱っているデータ規模のために、ほとんどの企業が扱うデータよりもかなり大量にMySQLへのpushが発生します。もちろん、MySQLオープンソースソフトウェアなので、我々の要求にあわせて変更することが可能です。そこで、知識をシェアする事とオープンソースソフトウェアがイノベーションを容易にする事を考慮して、我々がカスタマイズしたMySQLの内容をGitHub上でBSDライセンスのもと、オープンソースソフトウェアにすることに決めました。

この活動の目的はTwitterサービスの予測可能性を高め、我々の活動をより容易に運用できるようにすることにあります。この活動には、以下の内容が主に含まれています。

  • 作業負荷をハンドリングする時に、システムを効率的に監視し、さらに優れた振る舞いを理解するため、InnoDBの内部から追加されたステータス変数(additional status variables)を追加します。
  • 起動時に InnoDBのバッファプールを割り当て、もしもメモリが利用可能でないときにはfail fastな処理を行い、メモリに負荷がある状況でもパフォーマンスを保証します。このような処理を行い、NUMAシステム上でメモリ割り当てを最適化します。
  • サーバーサイドでのタイムアウトをサポートし、不要な作業を減らしています。ミリ秒粒度で長期的に実行されているクエリーをキャンセルすることができます。
  • 安全かつ軽量なメソッドを用いることでInnoDBのバッファプールをエクスポートしてリストアできます。コレを使えば、最小限のサービス停止(痛み)で済むようにローリング再起動をサポートするツールを構築することが可能です。
  • ページフラッシュや生存期間を改善するためにディスク書き込みを減らす処理を組み込み、SSDベースのマシンにMySQLを最適化しています。

MySQLを扱われる方々もMySQLに関係する他のベンダーの方々も一緒にMySQLを改善する目標をひとつにして、我々の活動をシェアすることを楽しみにしています。我々の活動を詳細に確認する場合は、change historyとdocumentationを確認してください。我々のMySQLの使い方をより詳しく学びたい場合、
4月12日のMySQLカンファレンスで
MySQL上でのsharding やreplicationフレームワークであるGizzardについて一緒に語りましょう。

もし質問があればGithub上でコミュニケーションを取るかissueを発行してください。

from scratch的感想


TwitterはもっとNoSQL的な技術の塊かと思っていたんですが、意外にもRDBMSを基本にしているようです。
リソースに負荷がかかっていても高速化する処理が入っていたり、ダウンタイムを最小限にする仕組みが入っていたりとかなり攻めの姿勢でMySQLを変えていて素晴らしいと思いました。今度試してみよう。