Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Auroraの特徴

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

でも、やっぱり

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Auroraの話です

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

"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

Slide 20

Slide 20 text

"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個のレプリカ

Slide 21

Slide 21 text

"VSPSBͷಛ௃ ⾼い安全性 ネットワークの分離(VPC) KMSによる暗号化 コネクション暗号化 ⾼可⽤性と耐久性 99.99%の可⽤性で設計 30秒でフェイルオーバー データを3AZに6重化

Slide 22

Slide 22 text

"VSPSBͷಛ௃ 互換性 MySQL 5.6 互換 PostgreSQL 9.6 互換 完全マネージド型 管理タスクに悩まない ⾃動的なモニタリング ⾃動バックアップ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Auroraの最重要部分 Storage

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

4UPSBHF/PEF インメモリキューイング Update Queue Hot Log Data Blocks S3 Backup ACK 振り分けて 集める レコードを記録 GC 洗浄 合体 ポイントインタイム スナップショット P2Pで通信 ① レコードを受信しインメモリの キューに追加 ② レコードを永続化してACK ③ レコードを整理してギャップを把握 ④ ピアと通信して⽳埋め ⑤ ログレコードを新しいバージョンの データブロックに合体 ⑥ 定期的にログと新しいバージョンの ブロックをS3に転送 ⑦ 定期的に古いバージョンのガベージ コレクションを実施 ⑧ 定期的にブロックのCRCを検証 ⑧ ⑦ ⑥ ⑤ ④ ③ ② ①

Slide 29

Slide 29 text

-PH4USVDUVSFE4UPSBHF • データをログのように先頭から追記する • 各々のログレコードはLog Sequence Number (LSN)を持ち不⾜・重複を判別できる • 既存のデータがあるブロックを上書きしない • (個⼈の感想ですが)DDDのEvent Sourcingに通じる 空きスペース data data data data data 時系列

Slide 30

Slide 30 text

-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

Slide 31

Slide 31 text

-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)

Slide 32

Slide 32 text

-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

Slide 33

Slide 33 text

-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

Slide 34

Slide 34 text

-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のデータを コピーして補完する

Slide 35

Slide 35 text

-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

Slide 36

Slide 36 text

-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

Slide 37

Slide 37 text

-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

Slide 38

Slide 38 text

-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 でページアウト

Slide 39

Slide 39 text

-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を要求

Slide 40

Slide 40 text

-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

Slide 41

Slide 41 text

-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

Slide 42

Slide 42 text

-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

Slide 43

Slide 43 text

-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のログレコードである場合

Slide 44

Slide 44 text

-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

Slide 45

Slide 45 text

-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 書き込み中に クラッシュ

Slide 46

Slide 46 text

-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

Slide 47

Slide 47 text

-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割当上限)

Slide 48

Slide 48 text

-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

Slide 49

Slide 49 text

-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 新規に選出

Slide 50

Slide 50 text

-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

Slide 51

Slide 51 text

-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 修復

Slide 52

Slide 52 text

-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 完了

Slide 53

Slide 53 text

-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 (正常)

Slide 54

Slide 54 text

-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 (正常)

Slide 55

Slide 55 text

-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 (正常)

Slide 56

Slide 56 text

レプリケーションとフェイルオーバー

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

ϑΣΠϧΦʔόʔ Protection Group Availability Zone Availability Zone Availability Zone Storage Node Storage Node Storage Node Storage Node Storage Node Storage Node Cache Cache 全て削除 Cache 全て削除

Slide 60

Slide 60 text

Auroraの全体像

Slide 61

Slide 61 text

"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

Slide 62

Slide 62 text

AWSサービスとの連携

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

*"."VUIFOUJDBUJPO*OUFHSBUJPO AuroraにIAM権限でログイン ① 認証情報を問合せる ② 認証情報を取得する ③ Auroraにアクセスする(SSL) ④ (おそらく)認証情報を検証する ⑤ (おそらく)権限を取得する ※ スループットが低いのが難点 (20接続/秒、db.t2.microは10接続/秒) client IAM temporary security credential permissions AWSAuthenticationPlugin Amazon Aurora ⑤ ④ ③ ② ①

Slide 66

Slide 66 text

データ管理

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

でも、⾶び道具的な機能だけじゃない

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

Aurora使いこなしの例

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

"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

Slide 75

Slide 75 text

Կނ"VSPSB͔Β-BNCEB࣮ߦʁ Lambdaを定期実⾏させてAuroraにアクセス可能 AuroraからLambdaを使ってみたかった。 VPC内のAuroraにアクセスするにはENIが必要だが、 作成に時間がかかる。 「監視対象に報告させるな」だが計測が⽬的なので問題無し

Slide 76

Slide 76 text

まとめ

Slide 77

Slide 77 text

·ͱΊ • Auroraの要はストレージ • Log Structured Storageをベースにして豊富な 機能を実現している • Auroraを使いこなすことで⾊々なユースケースに 対応できる

Slide 78

Slide 78 text

2VFTUJPO5JNF ?

Slide 79

Slide 79 text

No content