YouTubeのエンジニアたちは、オープンソースのMySQLデータベースを非常に大規模な本番環境でより効率的に動作させる「Vitess」と呼ばれるソフトウェアセットを開発しています。彼らはこのコードの作成にGoogleのプログラミング言語Goを使用しています。

YouTubeはすでにVitessのコンポーネント「Vtocc」を使用して、月間8億人のユーザー全員に動画を配信しています。Googleは2006年にYouTubeを買収しました。
Vtocc は「非常に安定しており、実稼働環境で使用するために必要なツールがすべて揃っています」と YouTube アーキテクトの Sugu Sougoumarane 氏は語りました。同氏は YouTube エンジニアの Mike Solomon 氏とともに、今週サンディエゴで開催された Usenix LISA (Large Installation System Administration) カンファレンスで Vitess について講演しました。
VitessがGoで書かれていることは、この比較的新しいプログラミング言語が大規模な本番環境で使用できるという考えを裏付けるものとなるかもしれません。Googleは3月にGoのバージョン1を発表しました。
YouTubeは毎月40億時間以上の動画を配信しています。毎分約72時間分の動画がアップロードされています。YouTubeはすべての動画をファイルシステムに直接保存していますが、ユーザー設定、広告情報、国別カスタマイズ、その他の必要な情報など、各動画の配信に必要なメタデータはすべてMySQLに保存しています。

YouTubeは信頼性の高さからMySQLを好んで使用していると、このサービスを最初に構築したエンジニアの一人であるソロモン氏は述べた。MySQLには癖があるが、それらはよく知られており、比較的簡単に軽減できると彼は述べた。しかし、MySQLはスケーリングに問題を抱えている。少なくとも、YouTubeのような大規模なサービスに対応するには問題が多い。
「MySQLの大きな問題は、ある程度の利用レベルに達すると、ハードウェアとインスタンス数の管理に多くの時間を費やしてしまうことです」とソロモン氏は述べた。「私たちは、その部分を自動化したいと考えています。複雑でエラーが発生しやすいあらゆるアクションを自動化し、自動的に修復できるようにしたいのです。」
MySQLは大規模な導入環境では効率があまり良くありません。通常、MySQLへの接続ごとにサーバー上で独自のスレッドが必要になります。しかし、このアプローチはYouTubeの運用規模では現実的ではありません。「数万件の接続を実行するのは現実的ではありません」とソロモン氏は言います。

しかし、同社のエンジニアたちは、複雑でやや理解しにくいMySQLのコアコード自体を変更することには消極的だ。複雑で理解しにくいコードに変更を加えると、予期せぬ影響が出ることがよくあるからだ。「簡単なことではありません。自分が何をやっているのか分かっていると思った瞬間に、トラブルに巻き込まれるのです」とソロモン氏は述べた。
そこで、VitessはMySQLと連携して動作し、追加の管理機能を提供するように開発されました。例えば、Vtoccコンポーネントは、数千ものSQLクエリを少数のバッチに統合することで、MySQLがこれらのリクエストを処理するために必要なリソースを削減します。また、Vtoccはクエリを解析してより効率的に実行できるようにし、あるクエリの結果を他の同一リクエストの処理に再利用することで、重複クエリによる作業負荷を軽減します。
Go を使用することで、YouTube 開発者は従来の言語を使用する場合よりも生産性を高めることができると Sougoumarane 氏は語った。
Goのコードはコンパイルが速いと彼は言う。Vitessの3万行のコードは、約30秒でバイナリにコンパイルできる。また、豊富なライブラリのおかげで、多くのタスクはそれほど多くのプログラミングを必要としない。例えば、Sougoumarane氏はログファイルを定期的にトリミングする105行のルーチンを作成したが、これはCやC++ではこれほど少ない行数では書けなかった機能だ。

「Goの表現力はまさにそれです」とソウゴマラン氏は述べた。「言語機能はよく考え抜かれており、従来の言語よりもはるかにエレガントな方法で言語を構成できます。」ソウゴマラン氏はまた、マルチコアプロセッサでの使用に不可欠なGoの並行処理サポートも高く評価した。「スレッドの管理を気にする必要はありません。Goが代わりに管理してくれるのです」と彼は述べた。
Sougoumarane氏も、この言語には欠点もあると認めている。例えば、エラー処理は改善の余地がある。スケジューリングとガベージコレクションにも改善の余地がある。
ソロモン氏は、今後、Vitess はデータベースのレプリケーションや自動シャーディングなどの追加機能も担うようになるため、管理者の介入なしにデータベースを複数のサーバーにまたがって拡張できるようになると述べた。
ジョアブ・ジャクソンは、IDGニュースサービスでエンタープライズソフトウェアとテクノロジー全般の最新ニュースを担当しています。Twitterで@Joab_Jacksonをフォローしてください。ジョアブのメールアドレスは[email protected]です。