AWS上でリレーショナルデータベースを構築する要件があります。「既存のMySQLやPostgreSQLのコードがそのまま動く互換性」と「クラウドネイティブに設計された分散ストレージによる高いスループットと可用性」の両方を満たす最適なサービスはどれですか?
解説
正解はAmazon Auroraです。Auroraは、MySQLおよびPostgreSQLと完全な互換性を持ちながら、AWSがクラウド向けにゼロから再設計した高性能なリレーショナルデータベース(RDB)です。既存のアプリケーションのコードやドライバを変更せずに移行でき、かつ商用データベースと同等のパフォーマンスをオープンソースのコストで実現します。「Amazon RDS for MySQL」もMySQLを動かせますが、後述するストレージアーキテクチャの点で要件の「クラウドネイティブな分散ストレージ」には該当しません。「Amazon Redshift」はデータ分析に特化したデータウェアハウス(DWH)であり、「Amazon DynamoDB」はキーバリューストア型のNoSQLデータベースであるため、通常のRDBを求める要件からは外れます。AuroraとRDSの決定的なアーキテクチャの違いAWSでデータベースを設計する際、多くの方が「RDS for MySQL」と「Aurora(MySQL互換)」のどちらを選ぶべきか迷います。両者の最大の違いはストレージ層の仕組みにあります。通常のRDSは、仮想サーバーにブロックストレージをアタッチし、そこにDBエンジンを稼働させる従来型の構成に近いです。一方、Auroraはコンピューティング層とストレージ層が完全に分離されています。データは、3つのアベイラビリティゾーン(AZ)にまたがる専用のストレージクラスターに自動的に6つのコピーとして分散保存されます。障害耐性: 6つのうち2つのコピーが失われても読み書きが継続でき、3つ失われても読み取りを継続できるなど、非常に高い自己修復能力を持ちます。パフォーマンス: ログベースの非同期レプリケーションを採用しており、ネットワークI/Oが大幅に削減されるため、標準的なMySQLと比べて高いスループットを発揮します。他のデータベースサービスとの使い分けと選定基準「RDBが必要だから」と常にAuroraを選ぶのが正解とは限りません。Auroraは高機能な分、小規模なシステムでは通常のRDSよりも最低稼働コストが割高になる傾向があります。実務では、「数秒のダウンタイムも許されない決済システム」や「リードレプリカ(読み取り専用の複製DB)を瞬時に追加してトラフィック増にスケールアウトさせたい」といった、高い可用性とスケーラビリティが求められる大規模システムでAuroraを採用します。逆に、大量のログデータを集計・分析したい場合はRedshiftを、ミリ秒単位の応答速度でJSONドキュメントを大量に処理したい場合はDynamoDBを選びます。用途やデータ構造(リレーショナルかNoSQLか)に応じて適切なサービスを選択することが、AWSアーキテクチャ設計の要となります。