Amazon Web Services ブログ
カリフォルニア州立工科大学ソフトウェア工学科のキャップストーンで MySQL のキャプチャーリプレイを AWS に構築
カリフォルニア州立工科大学は、「Learn by Doing」(実践で学ぶ) という同大学の理念にのっとり、ソフトウェア工学科のキャップストーンを開講しました。この科目で学生は 1 年を通じて協働産業プロジェクトとはどういうものかを体験します。今回で David Janzen 博士がこの科目を教えるのは 10 年目になります。博士は、この長さの科目に最適なプロジェクトを見付け、適切な難易度を与えることに長けています。
今年のプロジェクトは「AWS MyCRT」でした。これは「MySQL Capture and Replay Tool」のことです。 Amazon RDS のチームがサポートしました。30 人の学生が能力に基づいてチームに分かれた結果、5 つの多才なチームができ、それぞれが独自の MyCRT を実装しました。
チーム会議、顧客との会議、Amazon RDS チームの Brian Welcker、Rosa Thomas、Sachin Honnudike との要件導出がプロジェクトを方向付けました。これらの会議から、チーム Titans が以下のようなプロジェクトの背景を導き出しました。
アマゾン ウェブ サービス (AWS) では、Amazon のマネージドデータベースサービスである Relational Database Service (RDS) が利用できます。さまざまなサーバーハードウェアから、顧客の要求に最適なものを選ぶ必要があります。しかし、性能要求に合うハードウェアの選択は難しい判断です。また、性能が不足していたり、不必要に性能が高かったりするのも大変不経済です。Amazon の顧客は、異なるサーバー設定の間で性能を比較し、要求に対して適切なサーバーリソースかどうかを確認したいと言っていました。
この問題に対する MyCRT のソリューションは、RDS MySQL データベースでのワークロードとメトリクスをキャプチャーすることです。これにより、キャプチャーしたワークロードを異なるデータベース設定でリプレイし、メトリクスを収集することができます。また、収集した結果を解析することにより、ビジネス要求に対して理想的な MySQL と RDS の設定を選ぶこともできます。どのチームも、AWS と Janzen 博士の支援を受け、1 年間のプロジェクトを進めることができました。
最初の 11 週間は、ソフトウェアの要件に取り組みました。そこでは、要件の導出、分析、文書化について学びました。チームでは、ソフトウェアのアーキテクチャデザインとプロトタイピングに取り組みます。学生らは、チームプロセスの基盤とリソースの見積もりが適切な品質レベルを支えられるかについてレビューしました。次の 10 週間では、製品の構築に進みました。ここでは、ソフトウェア開発工程のモデル、ソフトウェアデザイン、文書化、開発工程での品質保証、CASE ツールを使った単体テストと結合テストに取り組みました。また、開発環境、セキュリティのベストプラクティス、テストツール、継続的インテグレーション、構成管理にも取り組みました。
最後の 10 週間では、ソフトウェアのデプロイに取り組み、ソフトウェアの保守、デプロイ、経済的な問題、バージョン管理、テクニカルサポートについて学びました。5 つのチームとも、さまざまなツール、技術、アーキテクチャを使って、問題を解決するソリューションを実装しました。
MyCRT プロジェクトの一例
例えば、チーム Lil Bobby Tables による MyCRT の実装を見れば、MyCRT が何をするのか理解しやすくなるでしょう。ソースコードは GitHub から入手可能です。このソリューションは、スコープの異なる複数のユースケースを念頭に作られています。大まかにいうと、MyCRT は、クライアント (ウェブ) アプリケーションを提供し、ターゲットの RDS データベースに対するキャプチャーとリプレイを行う EC2 インスタンスにインストールされたサービスです。キャプチャーとリプレイは、コマンドラインからも実行できる独立したプログラムになっています。プロジェクト全体は、NPM で管理され、TypeScript で構築されており、NodeJS とブラウザ (GUI クライアント) のどちらからでも実行できます。
ユーザーは、さまざまなレベルで MyCRT を使うことができます。ほとんどの場合、GUI クライアントの機能で十分ですが、上級者向けのオプションもあります。オプションには、REST API を直接使うものや、コマンドラインからキャプチャーリプレイツールを手動で起動するものなどがあります。また、チーム Lil Bobby Tables は、環境という概念も実装しました。この概念により、ユースケースに合わせて機能を減らすことができます。同じ MyCRT のインストールを使う他のユーザーは、そのまま別のプロジェクトに使えます。MyCRT の機能を異なるインターフェイスで提供することにより、MyCRT を柔軟に使うことができます。
キャプチャーを実行するときには、キャプチャーしたいワークロードを発生させる RDS MySQL データベースを指定します。MySQL の一般ログを有効にするとキャプチャーが始まります。すると、MyCRT は定期的にソース RDS データベースをポーリングして、アクティビティと CloudWatch のメトリクスを取得します。取得するメトリクスは、CPU 利用率、読み書きの IOPS、解放可能なメモリ量などです。データは、Amazon S3 のユーザーが指定した場所に生の JSON 形式で保存されます。キャプチャーは、手動で停止されるか、指定された時間が経過して停止するまで、この処理を繰り返します。ユーザーは、この時点でキャプチャーしたワークロードと収集した CloudWatch のメトリクスにアクセスできます。
リプレイを実行するときには、ターゲットの RDS MySQL データベースと、前もってキャプチャーしたリプレイしたいワークロードを指定します。リプレイは、指定されたワークロードをひとつずつ追って、ターゲットのデータベースに MySQL のクエリを再現します。キャプチャーの際に収集したメトリクスと同じように、リプレイでも定期的にメトリクスを取得し S3 に保存します。
キャプチャーとリプレイが終わると、同じワークロードに対する異なる RDS MySQL データベースでの 2 つのメトリクスのセットが S3 に保存されています。2 つのメトリクスのセットを比較するには、MyCRT の GUI クライアントを使うのが最も簡単です。メトリクスは以下のようなグラフで表示され、表示するメトリクスは選ぶことができます。メトリクスのファイルに対してより詳しい分析をしたい場合、すべてのデータは S3 に生の JSON 形式で保存されています。環境は組織に対する追加レイヤーになっています。環境を使うことにより、同じ組織の複数のユーザーやチームが、他のユーザーとデータを共有することなく、キャプチャーとリプレイを行うことができます。同時に、環境を使うことによって、ユーザーを関心のあるキャプチャーとリプレイに隔離することができ、これにより全体の工程がはるかに円滑に進むようになります。各環境では、キャプチャーするソースデータベースを 1 つ指定し、ターゲットデータベースは、その環境内で作られたリプレイごとに指定します。
MyCRT の 5 つの実装の詳細を知りたい場合には、ご自身の AWS 環境に構成して実行することができます。ソースコードはすべてオープンソースです。GitHub のキャップストーンプロジェクトのページからダウンロードできます。
著者について
Amy Lewis は、カリフォルニア州立工科大学のソフトウェア工学科を卒業する最上級生です。 来年は同大学の 4+1 プログラムでコンピュータサイエンスの修士課程に進みます。この夏にはロサンゼルスで SpaceX 社のフライトシステムのチームにインターンとして参加する予定です。休みには、読書をしたり、ビーチに行ったり、水泳をしたり、バックパッカーになったりしています。
Cameron Taylor は、カリフォルニア州立工科大学ソフトウェア工学科を卒業します。 卒業後は、Redmond の Microsoft 社で商用ソフトウェアエンジニアリングのチームに加わる予定です。
Christiana Ushana は、カリフォルニア州立工科大学サンルイスオビスポ校のソフトウェア工学科を卒業します。 現在は、Bishop Peak Technology 社でフロントエンドソフトウェア開発者として働いています。数か月後には、Sapient Razorfish 社でソフトウェアエンジニアとして働く予定です。サンルイスオビスポのビスタ教会でボランティアをしています。休みには、新しい技術の学習や室内ロッククライミング、水泳、ハイキングをしています。