Aurora DBについて(global database, cross region replication)

## AuroraDB
- 標準のMySQL、PostgreSQLと比べて、それぞれ最大5倍、最大3倍高速
- 高速なデータ同期・フェイルオーバー
    - 　プライマリインスタンス、リードレプリカともに、3つのアベイラビリティゾーンにレプリケートされた同じクラスタボリュームのデータコピーを参照するので、レプリカの非同期更新時間が小さくなる
    - 　プライマリインスタンスに障害が発生した場合は、RDSより高速にリードレプリカへフェイルオーバーすることができます
        - 　https://business.ntt-east.co.jp/content/cloudsolution/column-71.html
- 自動ストレージ拡張
    - データは10GBずつ「protection groups」と呼ばれる論理的なグループに保存され、64TBまで自動的にスケールアップすることができます
- リードレプリカのオートスケーリング
    - メトリクスに応じて自動増減する「オートスケーリング」に対応しています。リードレプリカへの読み取りクエリの分散や、リクエストの増減分に応じたコスト最適化が可能
- DBバックアップ機能の拡充
    - RDSと同様、自動バックアップが常に有効になります。バックアップでもパフォーマンスに影響を与えることなく、セグメントごとにS3へ継続的にスナップショットが保存され


## AuroraDBとRDSの違い
| 特徴           | Aurora                                    | RDS                                   |
|----------------|------------------------------------------|---------------------------------------|
| アーキテクチャ | クラウドネイティブな分散ストレージエンジン | 単一のマスターインスタンスとスタンバイレプリカ |
| パフォーマンス | MySQLの最大5倍、PostgreSQLの最大3倍の高速性 | 標準的なパフォーマンス                |
| スケーラビリティ| 事実上無制限（10GB単位で自動拡張）      | 最大32 vCPUと244 GiBのメモリ         |
| ストレージ容量 | 最大128 TiB                             | 最大64 TiB（SQL Serverは16 TiB）     |
| レプリカ数     | 最大15個                                 | 最大5個                               |
| 高可用性       | 複数のAZにわたる自動フェイルオーバー   | マルチAZ配置可能                      |
| バックアップ    | 継続的バックアップ、35日間のポイントインタイムリカバリ | 自動バックアップ、手動スナップショット |
| サーバーレス   | サポート                                 | 非サポート                            |
| データベースエンジン | MySQL、PostgreSQLとの互換性            | より多様なエンジンをサポート          |
| コスト         | 比較的高価                               | 比較的低コスト                        |
| モニタリング   | より詳細な監視機能                       | 標準的な監視機能                      |
| 料金   | 1)DBインスタンスの起動時間 2)ストレージの容量に応じた料金 3)I/Oリクエスト数 | 1)DBインスタンスの起動時間 2)ストレージの容量に応じた料金 |


![スクリーンショット 2024-12-26 11.49.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748934/f7f8e7a5-ccdc-d2c4-f383-6b6c8fbefda2.png)



## グローバルデータベースとクロスリージョンレプリケーションの違い

### **グローバルデータベース (Global Database)**
- **目的**: 複数のリージョンでの高可用性と低レイテンシのデータベースレプリケーションを提供。
- **特徴**:
  - **プライマリリージョン**と**セカンダリリージョン**の間でデータが同期される。
  - 読み書きはプライマリリージョンで行い、セカンダリリージョンでは読み取り専用として運用される。
  - セカンダリリージョンはプライマリリージョンがダウンした場合に、**フェイルオーバー**で自動的にプライマリとして昇格することが可能。
  - **低レイテンシ**でのデータアクセスを提供し、グローバル規模でのアプリケーションをサポート。

### **クロスリージョンレプリケーション (Cross-Region Replication)**
- **目的**: 複数のリージョンでデータベースを複製して、レプリケーションを確立する。
- **特徴**:
  - クロスリージョンレプリケーションは、特にバックアップや災害復旧 (DR) に用いられる。
  - 各リージョンのインスタンスは独立しているため、フェイルオーバーなどの自動化は手動で行う必要がある。
  - セカンダリリージョンは読み取り専用であり、プライマリリージョンからの一方向レプリケーションでデータを同期。
- [やってみた](https://qiita.com/heyjun33/items/562104f9b277a02a76b1)
  
### **主な違い**:
- **フェイルオーバーの可用性**: グローバルデータベースではセカンダリリージョンがフェイルオーバーをサポートしますが、クロスリージョンレプリケーションでは手動でのフェイルオーバー設定が必要です。
- **使用用途**: グローバルデータベースはグローバル規模のアプリケーションにおいて、低レイテンシを提供するために設計されています。クロスリージョンレプリケーションは主にバックアップと災害復旧を目的としています。


| 項目                     | グローバルデータベース                           | クロスリージョンレプリケーション                     |
|--------------------------|-----------------------------------------------|------------------------------------------------|
| **同期方式**             | 専用リンクによる低レイテンシ同期                     | 通常のネットワークを介した非同期レプリケーション             |
| **読み取り専用のインスタンス** | セカンダリリージョンに自動構成、昇格可能               | 手動設定が必要、昇格機能はなし                           |
| **フェイルオーバー**       | 自動昇格が可能                                   | フェイルオーバーなし、手動対応                             |
| **目的**                 | 高可用性・グローバル分散アクセス                     | 災害復旧 (DR)、バックアップ                          |

---


---

## グローバルデータベースのプライマリークラス・セカンダリークラス・ライター・リーダーの違い

### **プライマリークラス (Primary Instance)**
- **役割**: グローバルデータベースの**書き込み操作**を処理するインスタンスです。
- **特徴**:
  - データベースに対するすべての書き込みリクエストを受け付けます。
  - レプリケーションのソースとなるため、プライマリリージョンに存在します。

### **セカンダリークラス (Secondary Instance)**
- **役割**: グローバルデータベースの**読み取り専用**のインスタンスです。
- **特徴**:
  - データのレプリケーション先で、主に読み取り操作を担当します。
  - セカンダリリージョンに配置されることが多いです。
  - プライマリリージョンがダウンした場合、セカンダリリージョンが昇格し、**フェイルオーバー**が発生します。

### **ライター (Writer)**
- **役割**: 書き込み操作を受け付けるインスタンスです。
- **特徴**:
  - グローバルデータベース内でプライマリインスタンスまたはリーダーインスタンスに昇格することができます。
  - 通常、プライマリインスタンスがライターとして機能しますが、セカンダリリージョンにもライターが設定できる場合があります。

### **リーダー (Reader)**
- **役割**: 読み取り操作専用のインスタンスです。
- **特徴**:
  - レプリケーションされたデータを基に、アプリケーションからの読み取りリクエストを処理します。
  - 読み取り専用であり、書き込み操作は行えません。

### **まとめ**
- **プライマリークラス**は書き込みを担当するインスタンスで、全体のデータ更新の責任を負います。
- **セカンダリークラス**はプライマリリージョンからデータを同期し、主に読み取り専用です。
- **ライター**はデータベースへの書き込みを行うインスタンスで、プライマリまたはセカンダリリージョンに設定されることがあります。
- **リーダー**はプライマリリージョンとセカンダリリージョンの両方で読み取り専用の操作を担当します。