Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloud Native RDBMS Aurora 〜進化は止まらず〜

Ae763d151aeee101b40ae10cc13ebe63?s=47 maroon1st
November 11, 2017

Cloud Native RDBMS Aurora 〜進化は止まらず〜

Ae763d151aeee101b40ae10cc13ebe63?s=128

maroon1st

November 11, 2017
Tweet

More Decks by maroon1st

Other Decks in Technology

Transcript

  1. $MPVE/BUJWF3%#.4 "VSPSB ʙਐԽ͸ࢭ·Βͣʙ $MBTTNFUIPE *OD"84%JW4FOJPS4PMVUJPOT"SDIJUFDU )BKJNF0HVSJ %FWFMPQFST*0 #cmdevio2017

  2. ໔੹ࣄ߲  本発表は2017年11⽉11⽇時点で 公開されている情報を元にしています 将来仕様が変わる可能性があります

  3. スライドは後で入手することが出来ますので 発表中の内容をメモする必要はありません。 写真撮影をする場合は フラッシュ・シャッター音が出ないようにご配慮ください

  4.  質問タイムを(できれば)取ります 質問を考えながら聞いてください 分かる範囲で回答します

  5. None
  6. 8IPBN*  ⼤栗 宗(@maroon1st) メーカー系SIerに10年ほど在籍して クラスメソッドにジョイン 現在はAWSの導⼊コンサルティングや インフラ構築を⾏っています

  7. "HFOEB  話すこと・話さないこと Auroraの特徴 RDBMSを再設計したから実現できる機能 Aurora使いこなしの例 まとめ

  8.  今⽇話すこと・話さないこと

  9. ࠓ೔࿩͢͜ͱɾ࿩͞ͳ͍͜ͱ  今⽇話すこと Auroraの特徴 Auroraのアーキテクチャ Auroraを使いこなす⽅法

  10. ࠓ೔࿩͢͜ͱɾ࿩͞ͳ͍͜ͱ  今⽇話さないこと ⼀般的なRDBMSの機能 Aurora以外のRDSのこと Auroraの網羅的な機能説明

  11.  Auroraの特徴

  12.  最近⾰新的なデータベースが いろいろ出ていますよね!

  13.  「モンキーレンチ」(2017年2月19日 (日) 10:10 UTCの版)『ウィキペディア日本語版』。 https://ja.wikipedia.org/wiki/モンキーレンチ

  14.  European Southern Observatory(ESO) / Creative Commons Attribution 4.0 International

    https://upload.wikimedia.org/wikipedia/commons/3/38/Artist%27s_rendering_ULAS_J1120%2B0641.jpg
  15.  でも、やっぱり

  16.  Creative Commons Attribution-Share Alike 3.0 Unported https://upload.wikimedia.org/wikipedia/commons/b/b0/Aurora_Borealis_NO.JPG

  17.  Auroraの話です

  18. "NB[PO"VSPSB  SF*OWFOUͰൃද "84্࢙࠷΋ૣ͘੒௕ .Z42-ͱ1PTUHSF42-

  19. "VSPSBͷಛ௃  w ؅ཧ͕؆୯ w ߴ͍εέʔϥϏϦςΟ w Մ༻ੑͱ଱ٱੑ w ߴ଎

    w ҆શ w ҆Ձ Creative Commons Attribution-Share Alike 3.0 Unported https://commons.wikimedia.org/wiki/File:Aurora_Borealis_22Jan2004.jpg
  20. "VSPSBͷಛ௃ ⾼性能 MySQL の5倍 PostgreSQL の2倍 Read 最⼤ 500,000 IOPS

    Write 最⼤ 100,000 IOPS 10msのレプリカレイテンシ ⾼いスケーラビリティ 1 vCPU/2 GB 〜 32 vCPU/244 GB 64 TBまで⾃動拡張 最⼤15個のレプリカ 
  21. "VSPSBͷಛ௃  ⾼い安全性 ネットワークの分離(VPC) KMSによる暗号化 コネクション暗号化 ⾼可⽤性と耐久性 99.99%の可⽤性で設計 30秒でフェイルオーバー データを3AZに6重化

  22. "VSPSBͷಛ௃  互換性 MySQL 5.6 互換 PostgreSQL 9.6 互換 完全マネージド型

    管理タスクに悩まない ⾃動的なモニタリング ⾃動バックアップ
  23. "VSPSBͷಛ௃  AuroraはOSSのRDBMSをベースにして、 ⼤量アクセスを捌くためにスループットが向上する ⽅針で開発しています。 ⼀つ⼀つのクエリが⼤きいユースケースの場合は、 オリジナルのRDBMS(MySQL / PostgreSQL)が 良い場合があります。

  24.  RDBMSを再設計したから 実現できる機能

  25.  Auroraの最重要部分 Storage

  26. "VSPSB$MVTUFSͷશମ৅  Availability Zone A Aurora Storage Engine 論理的な共有ストレージボリューム 10GB単位のProtection

    Group Availability Zone B Availability Zone C Cache Cache Cache Cache Cache
  27. "VSPSB4UPSBHF&OHJOF  Availability Zone A Aurora Storage Engine 論理的な共有ストレージボリューム 10GB単位のProtection

    Group Availability Zone B Availability Zone C
  28. 4UPSBHF/PEF  インメモリキューイング Update Queue Hot Log Data Blocks S3

    Backup ACK 振り分けて 集める レコードを記録 GC 洗浄 合体 ポイントインタイム スナップショット P2Pで通信 ① レコードを受信しインメモリの キューに追加 ② レコードを永続化してACK ③ レコードを整理してギャップを把握 ④ ピアと通信して⽳埋め ⑤ ログレコードを新しいバージョンの データブロックに合体 ⑥ 定期的にログと新しいバージョンの ブロックをS3に転送 ⑦ 定期的に古いバージョンのガベージ コレクションを実施 ⑧ 定期的にブロックのCRCを検証 ⑧ ⑦ ⑥ ⑤ ④ ③ ② ①
  29. -PH4USVDUVSFE4UPSBHF  • データをログのように先頭から追記する • 各々のログレコードはLog Sequence Number (LSN)を持ち不⾜・重複を判別できる •

    既存のデータがあるブロックを上書きしない • (個⼈の感想ですが)DDDのEvent Sourcingに通じる 空きスペース data data data data data 時系列
  30. -PH4USVDUVSFE4UPSBHF  LSNに関する略称。意味は後述。 • LSN: Log Sequence Number • VCL:

    Volume Complete LSN • VDL: Volume Durable LSN • CPL: Consistency Point LSN • LAL: LSN Allocation Limit • SCL: Segment Complete LSN • PGMRPL: Protection Group Min Read Point LSN
  31. -PH4USVDUVSFE4UPSBHFʢ8SJUFʣ  Zone-A Segment A1 Segment A2 SCL:10000 SCL:10000 Zone-B

    Segment B1 Segment B2 SCL:10000 SCL:10000 Zone-C Segment C1 Segment C2 SCL:10000 SCL:10000 VCL:Volume Complete LSN(ボリューム完了LSN) VDL:Volume Durable LSN(ボリューム耐久LSN) CPL:Consistency Point LSN(⼀貫性ポイントLSN)
  32. -PH4USVDUVSFE4UPSBHFʢ8SJUFʣ  Zone-A Segment A1 Segment A2 SCL:10300 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10300 SCL:10050 Zone-C Segment C1 Segment C2 SCL:10300 SCL:10000 CPL VCL VDL CPL 書き込み1
  33. -PH4USVDUVSFE4UPSBHFʢ8SJUFʣ  Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10050 CPL VDL CPL VCL 書き込み1 書き込み2
  34. -PH4USVDUVSFE4UPSBHFʢ8SJUFʣ  Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10300 CPL VDL CPL VCL 書き込み1 書き込み2 データの補完 同AZのデータを コピーして補完する
  35. -PH4USVDUVSFE4UPSBHFʢ$PNNJUʣ  Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10300 CPL VDL CPL コミットLSNよりVDLが進んでいれば コミットができる 書き込み1 書き込み2
  36. -PH4USVDUVSFE4UPSBHFʢ3FBEʣ  ⼀般的なDBのページキャッシュ 普通はダーティページがあれば置き換え前に ディスクにフラッシュ Zone-A Segment A1 Segment A2

    SCL:10600 SCL:10300 Zone-B Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10050 CPL VDL CPL Cache
  37. -PH4USVDUVSFE4UPSBHFʢ3FBEʣ  Auroraのページキャッシュ キャッシュがページLSNを保持 Zone-A Segment A1 Segment A2 SCL:10600

    SCL:10300 Zone-B Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10050 CPL VDL CPL Cache ページLSN
  38. -PH4USVDUVSFE4UPSBHFʢ3FBEʣ  Auroraのページキャッシュ キャッシュがページLSNを保持 Zone-A Segment A1 Segment A2 SCL:10600

    SCL:10300 Zone-B Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10050 CPL VDL CPL Cache ページLSN ページLSN ≧ VDL でページアウト
  39. -PH4USVDUVSFE4UPSBHFʢ3FBEʣ  Auroraのページキャッシュ キャッシュミスの場合はVDLを要求 Zone-A Segment A1 Segment A2 SCL:10600

    SCL:10300 Zone-B Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10050 CPL VDL CPL Cache ページLSN VDLを要求
  40. -PH4USVDUVSFE4UPSBHFʢ3FBEʣ  レプリカがデータを読む場合 データが読込済みのLSNをProtection Group Min Read Point LSN (PGMRPL)

    Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10050 CPL VDL CPL PGMRPL Cache Cache Cache
  41. -PH4USVDUVSFE4UPSBHFʢ3FBEʣ  レプリカがデータを読む場合 PGMRPLをRead Replica間で交換する それ以降のデータを読めば良い Cache Cache Zone-A Segment

    A1 Segment A2 SCL:10600 SCL:10300 Zone-B Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10050 CPL VDL Cache PGMRPL
  42. -PH4USVDUVSFE4UPSBHFʢ3FQMJDBʣ  Protection Group Availability Zone Availability Zone Availability Zone

    Storage Node Storage Node Storage Node Storage Node Storage Node Storage Node Cache Cache ログのLSN Cache
  43. -PH4USVDUVSFE4UPSBHFʢ3FQMJDBʣ  Protection Group Availability Zone Availability Zone Availability Zone

    Storage Node Storage Node Storage Node Storage Node Storage Node Storage Node Cache Cache 削除 Cache 削除 VDL以下のLSNのログレコードである場合
  44. -PH4USVDUVSFE4UPSBHFʢ5SBOTBDUJPO3FDPWFSZʣ  Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10300 CPL VDL CPL 書き込み1 書き込み2
  45. -PH4USVDUVSFE4UPSBHFʢ5SBOTBDUJPO3FDPWFSZʣ  Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10300 CPL VDL CPL 書き込み1 書き込み2 書き込み中に クラッシュ
  46. -PH4USVDUVSFE4UPSBHFʢ5SBOTBDUJPO3FDPWFSZʣ  Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10300 CPL VDL CPL 書き込み1 書き込み2
  47. -PH4USVDUVSFE4UPSBHFʢ5SBOTBDUJPO3FDPWFSZʣ  Zone-A Segment A1 Segment A2 SCL:10600 SCL:10300 Zone-B

    Segment B1 Segment B2 SCL:10600 SCL:10450 Zone-C Segment C1 Segment C2 SCL:10600 SCL:10300 CPL VDL CPL 書き込み1 書き込み2 書き込み3 Segment A1 Segment A2 Segment B1 Segment B2 Segment C1 Segment C2 LAL:LSN Allocation Limit (LSN割当上限)
  48. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2:PG1 故障 クォーラムA
  49. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2:PG1 クォーラムA Segment C2-2:PG1 新規に選出
  50. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2:PG1 クォーラムA Segment C2-2:PG1 クォーラムB
  51. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2:PG1 クォーラムA Segment C2-2:PG1 クォーラムB 修復
  52. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2:PG1 クォーラムA Segment C2-2:PG1 クォーラムB 完了
  53. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2:PG1 クォーラムA (正常) Segment C2-2:PG1 クォーラムB (正常)
  54. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2:PG1 Segment C2-2:PG1 クォーラムB (正常)
  55. -PH4USVDUVSFE4UPSBHFʢ3FDPWFSZʣ  Zone-A Segment A1:PG1 Segment A2:PG1 Zone-B Segment B1:PG1

    Segment B2:PG1 Zone-C Segment C1:PG1 Segment C2-2:PG1 クォーラムB (正常)
  56.  レプリケーションとフェイルオーバー

  57. ϑΣΠϧΦʔόʔ  Protection Group Availability Zone Availability Zone Availability Zone

    Storage Node Storage Node Storage Node Storage Node Storage Node Storage Node Cache Cache Cache
  58. ϑΣΠϧΦʔόʔ  Protection Group Availability Zone Availability Zone Availability Zone

    Storage Node Storage Node Storage Node Storage Node Storage Node Storage Node Cache Cache 昇格 Cache
  59. ϑΣΠϧΦʔόʔ  Protection Group Availability Zone Availability Zone Availability Zone

    Storage Node Storage Node Storage Node Storage Node Storage Node Storage Node Cache Cache 全て削除 Cache 全て削除
  60.  Auroraの全体像

  61. "VSPSBͷશମਤ Primary RW DB RDS VPC Customer VPC Storage VPC

    Customer Application 3%4 )PTU.BOBHFS "VSPSB .Z42- Secondary RO DB 3%4 )PTU.BOBHFS "VSPSB .Z42- Local SSDs Storage Node Local SSDs Storage Node Local SSDs Storage Node Local SSDs Storage Node Backup Backup 
  62.  AWSサービスとの連携

  63. -BNCEB'VODUJPO*OUFHSBUJPO  AuroraからLambdaを呼べる 実装はストアドプロシージャ (⾮同期で戻り値なし) トリガーやイベントスケジューラ と組み合わせ可能 AWS Lambda Amazon

    Aurora
  64. -BNCEB'VODUJPO*OUFHSBUJPO  AuroraからLambdaを呼べる 実装はストアドプロシージャ (⾮同期で戻り値なし) トリガーやイベントスケジューラ と組み合わせ可能 Auroraのデータ更新でイベント ドリブンに各サービスを呼べる Amazon

    CloudWatch Amazon Kinesis Amazon SNS Amazon DynamoDB Amazon ES AWS Lambda Amazon Aurora
  65. *"."VUIFOUJDBUJPO*OUFHSBUJPO  AuroraにIAM権限でログイン ① 認証情報を問合せる ② 認証情報を取得する ③ Auroraにアクセスする(SSL) ④

    (おそらく)認証情報を検証する ⑤ (おそらく)権限を取得する ※ スループットが低いのが難点 (20接続/秒、db.t2.microは10接続/秒) client IAM temporary security credential permissions AWSAuthenticationPlugin Amazon Aurora ⑤ ④ ③ ② ①
  66.  データ管理

  67. %BUBCBTF$MPOJOH  即座にDBデータを複製 コピーせずに同じデータを参照 ほぼ即座に作成完了 クローン先で変更(追加/更新/ 削除)した時にコピー オリジナルで変更してもクロー ン先のデータサイズに影響なし クローン数は15まで作成可能

    本番クラスタ 100GB Cloning 検証クラスタ ほぼ 0GB 変更データ 変更データ オリジナル コピー +
  68. %BUBCBTF$MPOJOH 即座にDBデータを複製 コピーせずに同じデータを参照 ほぼ即座に作成完了 クローン先で変更(追加/更新/ 削除)した時にコピー オリジナルで変更してもクロー ン先のデータサイズに影響なし クローン数は15まで作成可能 (それ以上はコピー)

    本番クラスタ 100GB Cloning 検証クラスタ ほぼ 0GB …… 20個⽬ 100GB Cloning Copy 
  69. DBデータを任意の時点に⾼速に巻き戻す t2でt1に戻す場合、t1とt2の間のLSNのレコードを⾒えなくする。 するとt1からの更新が消える。 同様にt4からt3に戻す場合にはt3〜t4のレコードを⾒えなくする。 Log Structured Storageの特徴が出た機能だと思われる。 Invisible Invisible %BUBCBTFCBDLUSBDLʢ$0.*/(400/ʁʣ

     t0 t1 t2 t3 t4 t5
  70.  でも、⾶び道具的な機能だけじゃない

  71. ஍ಓͳύϑΥʔϚϯεվળ  ロック競合の改善 ⾮同期グループコミット スレッドプールの実装 プライマリキーの⾛査⽅法の改善

  72.  Aurora使いこなしの例

  73.  Auroraの実⾏中クエリを監視する

  74. "VSPSBͷ࣮ߦதΫΤϦΛ؂ࢹ͢Δ  Slow Queryは完了後の出⼒。『実⾏中』の状況が⾒たい。 Event Schedulerでクエリ実⾏ PROCESSLISTの結果を Lambdaへ送る LambdaからCloudWatch Logsへ

    詳細はこちらへ http://dev.classmethod.jp/cloud/aws/aurora-processlist-to-cloudwatch-logs/ ※ ReaderはEvent Schedulerが動かなくてツラい Amazon CloudWatch AWS Lambda EVENT SCHEDULER PROCESSLIST TABLE call lambda_async
  75. Կނ"VSPSB͔Β-BNCEB࣮ߦʁ  Lambdaを定期実⾏させてAuroraにアクセス可能 AuroraからLambdaを使ってみたかった。 VPC内のAuroraにアクセスするにはENIが必要だが、 作成に時間がかかる。 「監視対象に報告させるな」だが計測が⽬的なので問題無し

  76.  まとめ

  77. ·ͱΊ  • Auroraの要はストレージ • Log Structured Storageをベースにして豊富な 機能を実現している •

    Auroraを使いこなすことで⾊々なユースケースに 対応できる
  78. 2VFTUJPO5JNF  ?

  79. None