新機能！Amazon Aurora Limitless Database とは

:::note warn
本記事で言及している Amazon Aurora Limitless Database は 2023/12/25 時点で Preview の機能です。運用環境での使用は推奨されません。また将来的に動作や仕様が変更される可能性があります。
:::

# はじめに
AWS re:Invent 2023で発表されたAuroraの新機能「Amazon Aurora Limitless Database 」を使う側の目線でご紹介します。

[color is【クラウドLT大会vol.6】大型アップデート祭り](https://saison-coloris.connpass.com/event/303486/)で発表したセッションの内容に、時間の関係で話せなかった内容を加えて記事化したものです。

セッション資料

https://speakerdeck.com/chiharutsuboi/xin-ji-neng-amazon-aurora-limitless-database-toha


# Amazon Auroraとは？
- AWSが開発した独自のRDBエンジンで、RDSのひとつ
- 2種類の互換DBを選択可能
    - MySQL
    - PostgreSQL
- 高機能高性能
    - 通常の5倍のパフォーマンス
    - 最大128TBのストレージ
    - 最大15台のリードレプリカ
    - マルチAZでデータ保存し高い耐障害性

…でしたが、今回の新機能でさらにパワーアップしました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/05e90feb-501e-952c-82d8-f50ab974266a.png)



# Limitless Databaseとは？
<B>「AWS re:Invent 2023」で発表されたAuroraの新機能！</B>

- 既存のProvisioned、ServerlessV1、ServerlessV2に加えた4つ目の新たな稼働方式
- <B><font color=red>書き込み性能をスケールアウト／スケールイン</font></B>することができる
- <B><font color=red>1秒あたり数百万件の書き込みトランザクション</font></B>に対応
- <B><font color=red>ペタバイト単位のデータを管理</font></B>できる
- 現在はまだPostgreSQL互換のみを限定プレビュー
    - 一般には利用不可
    - 公式ドキュメントも未公開

:::note warn
私も限定プレビューへ申し込みましたが、まだ利用できていません。従って本記事の内容は一部推測が含まれますのでご了承ください
:::

# 従来方式との違い
<B>スケールアウト、アケールアップが無停止で可能になり、真のサーバレスに！</B>

- 書き込み性能のスケールアウト／スケールインが無停止でできる
- 数百万/秒のトランザクションを処理できる
- 従来の10倍以上のペタバイト単位のデータを管理できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/df404660-fb67-377d-1380-0144455c10e5.png)


<B>さらに、1つのエンドポイントで利用可能！</B>

従来は書き込み用と読み取り用でエンドポイントが分かれていたが、１つのエンドポイントでオートスケーリングできるように改善されました。

- <B>従来の稼働方式</B>
    - <B><font color=red>従来はアプリ側でエンドポイントの使い分けが必要でした
    - 読み込みはスケールアップ、スケールアウトどちらにも対応していましたが、スケールアウトは読み取り専用のリーダーエンドポイントのみが対応
    - 書き込みはスケールアウトができず、ライターエンドポイントに対するスケールアップのみ対応
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/6b133109-0f47-5636-d4ba-6941fa7465ab.png)
    :::note
    従来方式の詳細は過去記事を参照ください
    - [Amazon Aurora Serverless v2とそれ以外を比較（v1 / v2 / Provisioned）](https://qiita.com/Chiharu_Tsuboi/items/3fc311ad34e6fd3dedb7)
    - [Amazon Aurora Serverless v2とそれ以外を実測して比較（v1 / v2 / Provisioned）](https://qiita.com/Chiharu_Tsuboi/items/eff226c20a48be5fb7af)
:::

- <B>今回のLimitless Database</B>
    - <B><font color=red>アプリ側は使い分け不要になり、１つのエンドポイントに接続するだけ！
    - 新たに追加されたLimitless Database用の1つのエンドポイントで読み書きどちらもスケールアウト、スケールアップにマルチAZで対応
    - 従来のエンドポイントも残っており、合計３つのエンドポイントが利用できます。移行時の互換性のために残しているのではないかと推測します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/eb6c8e8f-124e-2a4d-9ffe-5cdd1103c265.png)

# 分散管理「シャーディング」
<B>データを「シャード」という単位で分割管理する仕組み</B>

- 複数のシャード（ノード）に分散してデータを書き込みすることでスケールアウトを実現
- シャードは通常、ユーザが管理するのは難しいがLimitless Databaseにより完全マネージド化

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/7b77bb27-dd21-0745-19a6-9a959a29b7ea.png)


# 使い方（インスタンス作成）
<B>クラスターにシャードグループを追加する方式</B>

- 従来通りコンソールまたはAPIでAuroraクラスターを作成
- DBシャードグループ（Limitless Database）を追加
    - Auroraキャパシティユニット(ACU)の最大値を選択可能
    - 既存のクラスターにも追加できると推測
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/3454e7f0-9df9-4798-0a46-cc47d74ae29c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/3ebef22f-4c02-4e1e-0f7c-a713a7e3e463.png)


# 使い方（テーブル作成）
<B>セッションパラメータでテーブルのモードを指定</B>

- テーブルに対してモードを指定し、関連性を定義することで、シャード内（ノード内）での高速なテーブル結合を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/2098929d-266b-5fb2-09cd-6da49f5644b1.png)
- テーブル作成時にモードとキーの指定します
    - Sharded：　シャーディング対象テーブル
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/da882da3-9044-3d4f-5193-99315c76c257.png)

    - Sharded(co-located)：　Shardedと同じシャードに配置したい対象テーブル
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/d14375c3-7982-6a38-1231-65bcc38ca56b.png)

    - Reference：　全てのシャードにコピーして配置されるテーブル
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/d778bb1d-9956-14e3-1562-6d3619ad03ec.png)

    - Standard：　シャード管理されない通常のテーブル
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/17ac1c0e-64c5-0aea-c32a-8bcf1518579c.png)



# Limitless Databaseを実現する内部の技術
内部では下記３つの技術で分散管理の複雑さを完全マネージド化しています。
利用する際には意識しませんが、ソフトウェア／ハードウェア両面ですごい技術を駆使していますので少しだけ紹介させてください。

- Grover
    - Auroraストレージエンジン
    - 3つのAZへ2つずつ分散して書き込み
    - <font color=red>AuroraのI/Oを80%削減！</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/18c580e0-2596-460f-7251-a068e037e61a.png)


- Caspian
    - 新たに開発したハイパーバイザ
    - <font color=red>無停止でスケールアップ／ダウンが可能に！</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/9c2e7a85-e797-acf1-538f-c697f5c705da.png)


- Amazon Time Sync Service
    - 既存の時刻同期サービス
    - 新たにPrecision Time Protocolに対応
    - <font color=red>マイクロ秒以下の精度で時刻同期が可能になり、ノード分散管理を実現！</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2741587/e7b649ca-16ac-41d5-fc79-6967b3c7c8fe.png)


# ユースケース
<B>大規模なトランザクションで有効</B>

- 1秒あたり数百万の書き込みトランザクションを処理し、ペタバイト単位のデータを管理できるため、今までAuroraで対応できなかった<font color=red>大規模なデータベースワークロードを１つのデータベースで利用可能
- 逆に小さすぎるワークロードではシャーディング等のオーバーヘッドで適さない可能性あり</font>
- これだけの高機能であるため、現行のAurora Serverlessよりも高単価となり、<font color=red>性能特性と費用対効果で使い分ける</font>ことになると推測します
- 移行の方法としては既存のクラスタに追加でき、従来のエンドポイントが残るのであれば、下記で容易に実現できるのではないかと思います。
    - 現行のクラスタにLimitless Databaseを追加
    - アプリ側のエンドポイントを切り替え
    - 従来のインスタンスを削除

# まとめ
Amazon Aurora Limitless Databaseは、AWSで今まで対応できなかった大規模なワークロードのRDBに対応できるようになりました。
テーブル作成DDLへのシャーディング設定等、使う上での考慮事項は多々ありそうです。
公式ドキュメントが発表されたら制約を熟読してどんどん使っていきましょう！


# 参考サイト
* AWS re:Invent 2023 - Monday Night Live Keynote with Peter DeSantis
https://www.youtube.com/watch?v=pJG6nmR7XxI

* AWS re:Invent 2023 - [LAUNCH] Achieving scale with Amazon Aurora Limitless Database (DAT344)
https://www.youtube.com/watch?v=a9FfjuVJ9d8

* Amazon Web Services ブログ 「Amazon Aurora Limitless Database のプレビューが公開」
https://aws.amazon.com/jp/blogs/news/join-the-preview-amazon-aurora-limitless-database/