set setting reset

脂肪と糖にはたらくやつ

20181121. Aurora Architecture Night メモ

表題のイベントに参加してきました。 ハイパー殴り書きです。Auroraすげーくらいの感想しかなかった。

postgresql compatibility

  • pg10 に対応
  • RDS Snapshot -> Aurora Migration
  • 様々なExtensionをサポート
    • GIS
    • pgceypto
    • plpgsql
    • pg_hint_plan
    • postgres_fdw
    • dblink -> 関数として実装されている
      • Aurora -> Redshift
        • Redshiftに計算、集計をオフロードするなど
    • 相変わらず pg_bigm と textsearch_ja がない

Concurrency

  • remove log buffer

    • WAL Buffer -> buffer がいっぱいになるとワーカーが待たされる
      • これがオーバーヘッドになると判断したらしいとか
    • ワーカーが直接ストレージにアクセスする
    • Durability tracking
  • Checkpoint

    • CheckPointがない
      • Bufferがないからストレージ直接書き込み
  • Redoしない

    • ?

Vacuum

  • XID周回問題
    • CloudWatchにメトリクスがある
  • freeze map
    • 9.6から
    • VACUUMすべきタプルを管理
    • Aurora には Filesystem がない
      • ?
    • Intelligent VACUUM Prefech
      • VACUUMが86%速い

Scalability

  • 各AZに2つずつ、系6つのデーターのコピーを保持
  • master / repllica が同じストレージを参照している
  • Write のパフォーマンスが一定
  • クラッシュリカバリをストレージ側で行う

Auroraの新機能

  • Backtrack

    • 全てのログレコードを保持
      • LSN(Logical Sequence Number)が付与されている
    • ストレージ側が見せるブロック(LSN?)をヘッドノードに伝えることで制御している
    • 最大3日
    • 専用の領域を必要とするのでストレージ課金対象
    • 常に一貫性のある時間にBacktrackを行う
      • Votingが確定していることかな
  • Aurora Serverless

    • 完全マネージドな感じ
    • 設定とかできない
    • 軽いロードのDB向け
    • proxy endpoint -> Request Router -> NLB -> DB
    • ダウンタイムなしの自動スケールアウト
    • 0からスケール
      • 使わなければインスタンスだけ削除するという設定が可能
      • 超かっこいい
  • parallel query

    • クエリをストレージノードの数千のCPUにプッシュダウン
    • クエリを分解 -> 分解されたクエリにパラレルクエリコンテキストなるメタデータを付与
    • ストレージの台数分並列化する
      • 16並列まで?
  • Aurora Multi Master

    • Single Region Multi Master
    • Multi Region Multi Master
    • ダウンタイム0
      • アプリ側に対応が必要
    • conflict
      • 1つの条件でのみコンフリクト解消のプロセスが発動する
      • COMMIT先勝ち
      • パーティショニングすることがコンフリクトを軽減するために有効
    • Global replication physical
      • ちょっと何を言っているのか
      • 1sec以下の遅延
      • レプリケーション専用インフラが背後に自動で作成

Auroraのなかみ

  • キャシュレイヤーの分離
    • ヘッドノードにはいるが、DBプロセスにいない
  • カスタムエンドポイント

    • ヘッドノードのまとまりをつくれる
    • キャッシュの取り回しのために使うなど
  • Quoram

    • writerが6つのストレージノードに一斉に書き込み
    • 4つ以上のノードが完了したら、COMMITする
      • Vr + Vw > V
      • Vw > V/2
      • 少なくとも1つの共通のコピーを保持
      • 必ず重複するように
  • ストレージノードが10GBごとの論理ブロックに分割

    • なぜ10GBなのかはわからなかった
  • protection groupという単位
  • Auroraはクォーラムセットとエポックを使用
    • ノードの正常性が疑わしい状態になったらエポックが作成される
epoc1 abcdef

epoc2 abcdef(?)
      abcdeg(new)

epoc3 abcdef(NG)
      abcdeg(OK)
  • Auroraはデータページを全て送信することでレプリケーションしているわけではない
    • 差分のみを送っている