論文メモ Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases
November 13, 2020AWSで提供されるRDBM, Amazon Auroraのアーキテクチャを解説した論文。 分散システムをクラウドにおく場合、計算やIOはノードに分散され、ボトルネックではなくなる。 そして、ボトルネックは、DBインスタンスとストレージ間のネットワークになる。 この仮説もと、プライマリインスタンスが、別テナントのストレージに直接Redoログを送ることで、レプリカインスタンスとストレージ間の負荷を減らし、処理性能の向上をはかる。 また、レプリケーションのために、MySQLがRedoログだけでなくバイナリログなど複数種類のログをスレーブに送るのに対し、AuroraはRedoログだけを転送する。 これにより、リカバリや縮退、フェールオーバの性能も向上している。
AuroraはAZ横断でインスタンスを配置することができ、レプリケーション管理にクオーラムを採用している。 コピーの数を\(V\), 読み込みの投票を\(V_r\), 書き込みの投票を\(V_w\)とする。 このとき、最新の書き込み内容を読み込むためには\(V_r + V_w > V\)でなければならない。 また、書き込みの競合を防ぐためには\(V_w > \frac{V}{2}\)でなければならない。 Auroraでのコピー数と投票数は、\(V=6, V_w=4, V_r=3\)に設定されている。 3つのAZに2つのコピーを配置するため、1つのAZとノードが落ちた場合でも、読み込みを維持できる。 また、2つのノードが落ちた場合でも、書き込みを維持できる。
Auroraは、ネットワーク越しのレプリカのストレージに直接Redoログだけを送る。 Redoログのレコードの実態は、変更されるページの前後の差分にあたる。 次の図は、Redoログを転送する様子を示す。
ストレージにRedoログを直接送り、フォアグラウンドのレプリカにかかる負荷を下げることで処理性能の向上をはかっている。 下図は、インスタンスとレプリカのストレージでのデータの転送の様子を示す。 各ステップは非同期で、1, 2だけがフォアグラウンドの処理でレイテインシに影響する。
Auroraは、2層コミットを使わず、Redoログだけで一貫性を確保する。 Redoログのレコードには単調増加する数(Log Sequence Number, LSN)が割り当てられる。 LSNはデータベースで生成される。 ストレージノードは受信したLSNに欠損が見つかるとゴシッププロトコルで他のレプリケーションに問い合せて欠損を補う。 データベースがクラッシュした場合は、欠落なく取得できたレコード系列上のあるレコードより大きいLSNをもつレコードを消し、レコードをストレージに適用することで一貫性を回復する。
論文をこちらからダウンロードできます。