用語集
2024/04/23
上田 裕大

AWSの基礎 〜Part4: データベースサービス〜

今回はストレージサービスに引き続き、データを保持するために必要なサービスであるデータベースサービスについて紹介します。たくさんの種類があるので、代表的な一部の紹介になりますが、参考にしていただければ幸いです。

はじめに

第4回となる今回は、検索等をしやすい形でデータを保存するためのデータベースを作成するサービスについて紹介します。

データベースに求められること

データベースは多くの場合、大量のデータが格納され、ある程度の頻度でアクセスされることが想定されます。一方で、リスクを低減することを目的にデータを分散して保管されることになります。そのようなことを考慮すると、以下のような3つの条件が重要になってきます。

1. 一貫性 (Consistency): 読み込んだデータが最新のものか
2. 可用性 (Availability): データに対してどの程度アクセス可能か
3. ネットワーク分断耐性 (Partition Tolerance): ネットワークが分断した際にどの程度体制があるか

これらの条件は一般的な分散データベースにおいてはトレードオフの関係にあり、高々2つまでしか同時に達成できないことが知られています (ブリューワのCAP定理) 。AWSではどのような条件を重視するのかに応じて、複数のデータベースサービスが存在します。

AWSの提供するデータベースサービスがどのような条件を重視しているのかは下図のようです。その中で代表的なAmazon RDS (Relational Database Service)、Amazon DynamoDB、Amazon ElastiCacheについて本記事では紹介いたします。

Amazon RDS (Relational Database Service)

概要
AWSの提供するリレーショナルデータベースサービスです。以下のようなデータベースエンジンを使用することができます。
・ MySQL
・ PostgreSQL
・ MariaDB
・ SQL Server
・ Oracle Database
・ Aurora (= Amazon Aurora)

スケールは稼働時のパフォーマンスに応じて変動させることが可能で、設定により自動のスケーリングを行うことも可能です。また、自動バックアップ機能がついており、S3にスナップショットを保存します。可用性を高めるためにマルチAZ配置を行うことも可能です。

RDSの自動フェイルオーバー

上図はマルチAZ配置を行った上で、1つのリードレプリカを配置した場合の構成図になります。

RDSではプライマリとセカンダリという2種類のサーバが存在します。プライマリはメインとなるデータベースでユーザーが通常アクセスするもので、そのバックアップとしてセカンダリがあります。これらのデータは同期しており、プライマリサーバに異常が発生した場合にはエンドポイントがセカンダリにユーザーがアクセスするように自動的に変更します。

マルチAZ配置では、プライマリとセカンダリは別のAZに配置されるようになり、システムの可用性を向上させることができます。

リードレプリカ
リードレプリカを作成すると、プライマリサーバから非同期的にデータがコピーされるようになります。このリードレプリカはユーザーが読み取りアクセスを行った場合に、参照されるデータベースとなります。これによりデータベースの負荷分散を行います。

また、リードレプリカは別のリージョンに作成することも可能で、かつ、非常時にリードレプリカをスタンドアロンなデータベースに昇格させることもできます。これにより、非常時にはリードレプリカを別のリージョンにある待機系として使うといった災害対策等も可能です。

Amazon DynamoDB


Amazon DynamoDBはNoSQL型のフルマネージドデータベースサービスです。複数のAZに対してデータベースを分散した状態で配置します。

ポイントになるのは複数のAZにそれぞれ存在するデータベースに、データが分散して置かれていて1つのAZのデータベースを見てもすべてのデータが揃うわけではないということです。これにより単一障害点を取り除くとともに、ネットワーク分断耐性を獲得しています。

一方で、1つのテーブルでもデータが複数に分割されて存在しているため、データにアクセスするためにはプライマリキーと呼ばれるキーによって、どのノードのどの部分に該当のデータが存在するのかを指定する必要があります。また、テーブル間の結合ができない等の処理における制約もあるので注意が必要です。

Amazon ElastiCache

このサービスはディスクではなくメモリにロードを行うインメモリ型のキーバリューストアを提供します。これにより、高速でキーに対して対応する値を読み出すことが可能となっており、キャッシュとしての機能を提供します。キャッシュソフトウェアとしては
・ Memcached
・ Redis
の2種類をサポートしています。ここではRedisを使用したElastiCache for Redisについて説明します。

ElastiCache for Redis
このサービスにはクラスタモードというものがあります。これを有効化しない場合には、マルチAZ配置をとったRDSと同じような構成となり、プライマリとセカンダリ(こちらもリードレプリカと呼ばれる)、リードレプリカが異なるAZに作成されます。

一方で、クラスタモードを有効化することによってシャードと呼ばれるデータの分散保存が可能です。3つのシャードを使う場合の構成図が下図のようです。

ここで、図の縦方向で見た際の、異なるAZに存在するプライマリ、2つのリードレプリカの組をシャードと言います。このような構成を取ることで、RDSのような構成と比較してすべてのAZに実際のノードと待機系を分散配置することができます。

終わりに

今回はデータベースサービスについて紹介しました。特徴が違う多くのサービスがあるので、混同しないようにしましょう。次回は監視用のサービスについてご紹介します。

New call-to-action