Posted at

AWS Summit 2019 Tokyo(6/13 Deep Dive on Amazon Aurora)

聴きながらとったメモ


Amazon Aurora MySQL/PostgreSQLの内部構造

登壇者: Yoav Eilat


  • 3AZに数百〜数千インスタンスのストレージノードを配置

  • それぞれにAZに2つづつ、合計6つのデータコピーを保存。

  • 10GB単位で64TBまで自動的にスケールする(データ保存領域を気にする必要がない)。

  • データは6ノードに非同期・並列で書き込む。

  • 4つのノードに書き込めた時点で書き込み成功とみなす。


    • 4つ未満で終わったら書き込み失敗。この場合の際書き込みはアプリ側で行う。



  • 3つのノードから読み込めた時点で読み込み成功とみなす。

  • DBインターフェイスからの要求は一旦Inccomming Queueに入り、そこからUpdate Queueに送られて更新処理を行う。

  • 読み込み時間は本家MySQLの2.5倍、本家PostgreSQLの2倍高速

  • 複数のAZに最大15のリードレプリカを置くことができる。リードレプリカはマスターに昇格可能。

  • MySQLは通常5つのステップでデータを同期する。

  • Auroraが早い理由は、データストレージが各ノードで共有されているから。


    • MySQLはノードごとに独立したストレージを持つが、Auroraは各ノードのストレージが共有されている。

    • プライマリが書き込むと、変更が他のノードにすぐにいきわたる。

    • プライマリ以外は、読み込みのみ行う。



  • インプット/アプトプット時間が1/8ですむ。

  • 負荷状況に応じてレプリカの追加を自動的に行うAuto-scalingレプリカにできる。

  • Aurora Global Databaseを使えば複数のリージョンにデータベースを分散配置できる。

  • データの同期を行うのはデータベースアプリケーションではなく、ストレージレベルで行われるため早い。


    • リージョン間レプリケーションの遅延は1秒未満。



  • 仮にマスターを配置したリージョンが完全に落ちても、コンソールから別のリージョンをマスターに指定すれば1分以内に復旧できる。

  • Parallel Query(並列クエリ)によりクエリが高速化できる。

  • MySQLのロックでは、すべての対象データがロックされてしまう。Auroraではひとつひとつの行がそれぞれ管理されており、ロックが並列に行われる。

  • 通常のデータベースでは5分ごとにチェックポイントが作られ、データベースが完全にクラッシュした場合はそこから再開できるが立ち上げに時間がかかることがある。Auroraにはチェックポイントという概念がなく、復旧後の読み込み時に並列・分散・非同期にデータ復旧が行われていく。したがって非常に高速にデータベースを復旧できる。

  • 通常、データベースをバックアップしてキャッシュをウォームアップするのに5分程度の時間がかかる。しかしAuroraの新機能であるCluster Cache Managementにより、ウォームアップされたキャッシュを使って起動されるため、30秒程度でトップレンジの速度での読み書きが可能になる。

  • Aurora Backtrackにより、バックアップから復元せずに過去72時間のどこかの時点に数秒で戻すことができる。

  • Fast Database Cloningにより、データのクローンをClone Storage上に持ち、(ここで時間切れ)