Amazon RDSとAmazon Auroraの耐障害性を考える

# はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧は[こちら](https://qiita.com/tech4anyone/items/b06f88035d27c6ef13b2)。

この記事ではRDSとAuroraを耐障害性の観点から超詳細解説しています。

具体的には以下流れで説明します。

- Amazon RDSとは
- Amazon RDSのスケーラビリティ
- Amazon RDSのディザスタリカバリ
- Amazon Auroraとは
- Amazon Auroraのスケーラビリティ
- Amazon Auroraのディザスタリカバリ

AWSの区分でいう「Level 200：トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

# この記事を読んでほしい人
- RDSとAuroraを採用するときのベストプラクティスを説明できるようになりたい人
- RDSとAuroraの耐障害性に不安を感じている人
- AWS Certified DevOps Engineer Professionalを目指している人


# Amazon RDSとは
Amazon RDSは、フルマネージドなリレーショナルデータベースサービスです。
RDSでは、MySQL、PostgreSQL、Oracle、Microsoft SQL Serverなどの主要なデータベースエンジンをサポートしており、データベースの設定、バックアップ、パッチ適用、スケーリングなどの運用作業をAWSが管理します。

RDSは高可用性、耐久性、セキュリティを確保するためのベストプラクティスが組み込まれており、データベースのパフォーマンス最適化もサポートしています。

# Amazon RDSのスケーラビリティ
Amazon RDSは、マネージドなリレーショナルデータベースサービスとして、データベースのスケーラビリティを強化するために複数のアプローチを提供しています。

## 垂直スケーリング
垂直スケーリングは、単一のデータベースインスタンスの性能を向上させる手段です。
Amazon RDSでは、インスタンスサイズを変更することで、CPU、メモリ、ストレージのリソースを調整できます。
これにより、単一のデータベースインスタンスの性能向上が可能であり、簡単かつ柔軟なスケーリングが実現されます。

## 水平スケーリング
Amazon RDSはリードレプリカと呼ばれる複製を作成し、リードトラフィックを分散することで水平スケーリングを実現します。
リードレプリカは読み取り専用で、主データベースに対してリードトラフィックを分散させることで読み取りの性能向上が期待できます。
これにより、読み取り負荷が高い場合でもスケーラビリティを確保できます。

# Amazon RDSのディザスタリカバリ
Amazon RDSでは、ディザスタリカバリのために以下のベストプラクティスと機能を提供しています。

## マルチ-AZ デプロイメント
Amazon RDSのマルチ-AZデプロイメントは、データベースを自動的に複製し、プライマリデータベースとセカンダリデータベースのペアを複数の可用性ゾーンにまたがって配置します。
これにより、プライマリが利用できない場合に自動的にフェイルオーバーし、高い可用性を確保します。

## 自動バックアップとデータベーススナップショット
Amazon RDSは自動的にデータベースをバックアップし、連続的なバックアップのスナップショットを作成します。
これにより、データの損失を最小限に抑え、必要に応じて任意の時点にデータベースを復元できます。

# Amazon Auroraとは
Amazon Auroraは、Amazon RDSの一部として提供されるクラウドネイティブなリレーショナルデータベースエンジンです。
AuroraはMySQLやPostgreSQLと互換性があり、これらのデータベースエンジンと比べて高いパフォーマンスと耐久性を実現しています。

Auroraは、複数の可用性ゾーンにまたがる6つのコピーにデータを自動的にレプリケートし、障害が発生しても瞬時にフェイルオーバーできる高可用性構成を提供します。
また、Aurora Replicaを使用して読み取りトラフィックを分散し、スケーラビリティを向上させることができます。

さらに、Amazon Auroraは自動的にデータをバックアップし、連続的なバックアップのスナップショットを作成することでデータの保護を強化します。

# Amazon Auroraのスケーラビリティ
Amazon Auroraは、高いパフォーマンスとスケーラビリティを実現するために以下の機能を提供しています。

## Aurora Replicaの作成
Amazon Auroraは、複数のAurora Replicaを作成して、読み取りトラフィックを分散できます。
これにより、大量の読み取りトラフィックに対して柔軟にスケールアウトできます。
Replicaはプライマリデータベースと同等のパフォーマンスを提供し、自動的なフェイルオーバーもサポートしています。

## グローバルデータベース
Amazon Auroraのグローバルデータベースは、複数のAWSリージョンにまたがるAuroraデータベースのレプリケーションを可能にします。
これにより、異なる地理的なリージョンにおいても低レイテンシで読み取り可能なデータベースの構築が可能です。

# Amazon Auroraのディザスタリカバリ
Amazon Auroraはディザスタリカバリに関しても高度な機能を提供しています。

## グローバルデータベースのフェイルオーバー
グローバルデータベースを使用している場合、Amazon Auroraはリージョン全体のフェイルオーバーをサポートします。これにより、AWSリージョン全体での障害に対しても迅速な復旧が可能です。

## バックトラック
Amazon Auroraは、バックトラックと呼ばれる機能を提供しています。これにより、誤ってデータを変更したり削除したりした場合に、特定のポイントまでデータベースを巻き戻すことができます。バックトラックは不測の事態に対する迅速な対応を可能にします。


# 比較と選定のポイント

| 比較軸 | Amazon RDSの評価 | Amazon Auroraの評価 |
|--- | --- | ---|
| パフォーマンスとスケーラビリティ | データベースエンジンにより異なりますが、拡張性に制限がある場合があります。 | 高いパフォーマンスと自動的なスケーラビリティが特長で、大規模なトラフィックにも対応可能です。 |
| 可用性と耐久性 | マルチ-AZデプロイメントにより高可用性が確保されますが、フェイルオーバーに若干のダウンタイムが発生する可能性があります。 | 複数の可用性ゾーンにまたがるレプリケーションにより、ほぼゼロのフェイルオーバータイムで高可用性を実現しています。 |
| コスト | 通常、他のリレーショナルデータベースエンジンよりも低いコストで利用できます。 | 高い性能と耐久性が提供されるため、若干高価ですが、その差額は高いパフォーマンスと信頼性に見合ったものです。 |
| 互換性 | MySQL、PostgreSQL、Oracle、Microsoft SQL Serverなど、複数のデータベースエンジンをサポート。 | MySQLとPostgreSQLとの互換性がありますが、他のエンジンとは互換性がありません。 |

# まとめ
この記事ではAmazon RDSとAmazon Auroraを耐障害性の観点から超詳細解説しました。

- Amazon RDSとは
- Amazon RDSのスケーラビリティ
- Amazon RDSのディザスタリカバリ
- Amazon Auroraとは
- Amazon Auroraのスケーラビリティ
- Amazon Auroraのディザスタリカバリ

次回はElastic Cacheの耐障害性を考えます。