Mais conteúdo relacionado
Semelhante a スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料) (20)
Mais de NTT DATA Technology & Innovation (20)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
- 2. 2
© 2020 NTT DATA Corporation
自己紹介
藤井 雅雄
Database Technical Lead
データベース研究開発
PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション
WAL圧縮、バックアップ進捗
@fujii_masao
- 3. 3
© 2020 NTT DATA Corporation
アジェンダ
スケールアウトとは?
PostgreSQLで利用できるスケールアウト機能とその課題について
よりよいスケールアウト機能を目指して、
その第一歩としてのグローバルトランザクションの実現について
- 4. 4
© 2020 NTT DATA Corporation
スケールアウトとは?
スケールアップ
サーバのスペックを増強して、システム全体の性能を向上させること
スケールアウト
サーバの台数を増やして、システム全体の性能を向上させること
スペック増強
(CPU/メモリ等)
サーバ追加
- 5. 5
© 2020 NTT DATA Corporation
PostgreSQLで利用できるスケールアウト機能と課題
レプリケーション
FDW (Foreign Data Wrapper)
1
2
- 6. 6
© 2020 NTT DATA Corporation
PostgreSQLで利用できるスケールアウト機能と課題
レプリケーション
プライマリ1台からレプリカ複数台にDBを複製
参照SQLを実行可能なレプリカの台数を増やすことで、参照処理をスケールアウトできる
更新SQLを実行可能なプライマリは1台のみのため、更新処理はスケールアウトできない
1
複製
参照と更新
プライマリ レプリカ1 レプリカ2 レプリカ3
複製
複製
参照のみ 参照のみ 参照のみ
- 7. 7
© 2020 NTT DATA Corporation
PostgreSQLで利用できるスケールアウト機能と課題
FDW (Foreign Data Wrapper)
外部のデータをPostgreSQLのテーブル(外部テーブル)として扱う機能
FDWを介してサーバ間でデータを参照・更新できる
2
ID 場所
1 千葉
2 埼玉
…
外部
テーブル
サーバ1
1,千葉
2,埼玉
…
CSV
ファイル
ID 部署
a1 総務
a2 営業
…
実
テーブル
外部
テーブル サーバ2
ID 部署
a1 総務
a2 営業
…
FDW
FDW
SELECT read()
- 8. 8
© 2020 NTT DATA Corporation
PostgreSQLで利用できるスケールアウト機能と課題
FDW (Foreign Data Wrapper)
外部のデータをPostgreSQLのテーブル(外部テーブル)として扱う機能
FDWを介してサーバ間でデータを参照・更新できる
2
ID 場所
1 千葉
2 埼玉
…
外部
テーブル
サーバ1
1,千葉
2,埼玉
…
CSV
ファイル
ID 部署
a1 総務
a2 営業
…
実
テーブル
外部
テーブル サーバ2
ID 部署
a1 総務
a2 営業
…
FDW
FDW
UPDATE
UPDATE
- 9. 9
© 2020 NTT DATA Corporation
PostgreSQLで利用できるスケールアウト機能と課題
FDW (Foreign Data Wrapper)
データベースを複数台のPostgreSQLに分割配置して、
FDWを介して処理を分散することで、参照と更新ともにスケールアウトできる
複数台のサーバをまたがったトランザクションであるグローバルトランザクションをサポートしていない
A B C
B C
2
サーバ1
サーバ2 サーバ3
参照と更新 参照と更新 参照と更新
FDW FDW
- 10. 10
© 2020 NTT DATA Corporation
よりよいスケールアウト機能を目指して
参照と更新ともにスケールアウトさせる
グローバルトランザクションをサポートする
目指す方向性
PostgreSQLコミュニティで、
スケールアウト機能の開発・改善が始まっている
レプリケーション
更新をスケールアウトできない
FDW
グローバルトランザクションを未サポート
既存機能の課題
2
1
- 11. 11
© 2020 NTT DATA Corporation
よりよいスケールアウト機能を目指して
参照と更新ともにスケールアウトさせる
レプリケーション
更新をスケールアウトできない
グローバルトランザクションをサポートする
FDW
グローバルトランザクションを未サポート
目指す方向性
既存機能の課題
PostgreSQLコミュニティで、
スケールアウト機能の開発・改善が始まっている
PostgreSQL本体に機能を組み込む!!
2
1
- 12. © 2020 NTT DATA Corporation 12
【アンケート】
実際、PostgreSQLのスケールアウトは必要でしょうか?
A. トランザクションを保証した上で、参照も更新もスケールアウトしたい!
B. 課題はあるが、既存機能のスケールアウトで十分!
C. スケールアップで十分で、スケールアウトまでは不要!
D. スケールアップとスケールアウトのどちらも不要!
- 13. 13
© 2020 NTT DATA Corporation
よりよいスケールアウト機能を目指して、その第一歩
FDWベースのスケールアウト構成に、
グローバルトランザクションのサポートを追加する方向性
1
2
Atomic Commit
Atomic Visibility
グローバル
トランザクション
A B C
B C
サーバ1
サーバ2 サーバ3
参照と更新 参照と更新 参照と更新
FDW FDW
- 14. 14
© 2020 NTT DATA Corporation
Atomic Commit
サーバ間でトランザクションの実行結果に整合性があること
複数のサーバ上で行われる複数の操作について、
すべての操作が成功(COMMIT)するか、
すべての操作が失敗(ROLLBACK)すること
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション
COMMIT
成功
Atomic Commitで解消したいトランザクションの不整合
- 15. 15
© 2020 NTT DATA Corporation
Atomic Commit
サーバ間でトランザクションの実行結果に整合性があること
複数のサーバ上で行われる複数の操作について、
すべての操作が成功(COMMIT)するか、
すべての操作が失敗(ROLLBACK)すること
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション
COMMIT
成功
COMMIT
成功
Atomic Commitで解消したいトランザクションの不整合
- 16. 16
© 2020 NTT DATA Corporation
Atomic Commit
サーバ間でトランザクションの実行結果に整合性があること
複数のサーバ上で行われる複数の操作について、
すべての操作が成功(COMMIT)するか、
すべての操作が失敗(ROLLBACK)すること
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション
COMMIT
失敗
COMMIT
成功
COMMIT
成功
Atomic Commitで解消したいトランザクションの不整合
トランザクションがサーバ3のみ
COMMITに失敗すると、
サーバ間のトランザクションの
整合性が失われる!!
- 17. 17
© 2020 NTT DATA Corporation
二相コミットによるAtomic Commitの実現
複数台のサーバをまたがったトランザクションをCOMMITする際に、
二相コミットを使って、Atomic Commitを実現する方向性
COMMIT要求
COMMIT準備
トランザクション
COMMIT準備
A
サーバ1 サーバ2 サーバ3
B C
FDW
FDW
まずはFDWを介して
COMMIT準備を行い、
すべてのCOMMIT準備が
成功したらCOMMITを行う
- 18. 18
© 2020 NTT DATA Corporation
二相コミットによるAtomic Commitの実現
複数台のサーバをまたがったトランザクションをCOMMITする際に、
二相コミットを使って、Atomic Commitを実現する方向性
COMMIT要求
COMMIT準備
トランザクション
COMMIT
COMMIT準備
COMMIT
A
サーバ1 サーバ2 サーバ3
B C
COMMIT成功
COMMIT
まずはFDWを介して
COMMIT準備を行い、
すべてのCOMMIT準備が
成功したらCOMMITを行う
FDW
FDW
FDW
FDW
- 19. 19
© 2020 NTT DATA Corporation
二相コミットによるAtomic Commitの実現
複数台のサーバをまたがったトランザクションをCOMMITする際に、
二相コミットを使って、Atomic Commitを実現する方向性
COMMIT要求
COMMIT準備
トランザクション
COMMIT準備
A
サーバ1 サーバ2 サーバ3
B C
FDW
FDW
まずはFDWを介して
COMMIT準備を行い、
COMMIT準備が
失敗したサーバがあれば、
ROLLBACKを行う
- 20. 20
© 2020 NTT DATA Corporation
二相コミットによるAtomic Commitの実現
複数台のサーバをまたがったトランザクションをCOMMITする際に、
二相コミットを使って、Atomic Commitを実現する方向性
COMMIT要求
COMMIT準備
トランザクション
COMMIT準備失敗
A
サーバ1 サーバ2 サーバ3
B C
FDW
FDW
まずはFDWを介して
COMMIT準備を行い、
COMMIT準備が
失敗したサーバがあれば、
ROLLBACKを行う
ROLLBACK
COMMIT失敗
ROLLBACK
FDW
- 21. © 2020 NTT DATA Corporation 21
【アンケート結果】
実際、PostgreSQLのスケールアウトは必要でしょうか?
A. トランザクションを保証した上で、参照も更新もスケールアウトしたい!
B. 課題はあるが、既存機能のスケールアウトで十分!
C. スケールアップで十分で、スケールアウトまでは不要!
D. スケールアップとスケールアウトのどちらも不要!
- 22. 22
© 2020 NTT DATA Corporation
Atomic Visibility
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション①
COMMIT
途中
COMMIT
成功
COMMIT
成功
サーバ間でトランザクション実行の観測結果に整合性があること
複数のサーバ上で行われる複数の操作について
すべての操作が成功(COMMIT)、すべての操作が失敗(ROLLBACK)、
すべての操作が実行中のいずれかだと、他のトランザクションから観測できること
Atomic Visibilityで解消したいトランザクションの不整合 トランザクション①がCOMMITしたとき、
実行タイミングのずれにより、
サーバ3のみCOMMIT実行途中の状態
- 23. 23
© 2020 NTT DATA Corporation
Atomic Visibility
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション①
COMMIT
途中
COMMIT
成功
COMMIT
成功
トランザクション②
サーバ間でトランザクション実行の観測結果に整合性があること
複数のサーバ上で行われる複数の操作について
すべての操作が成功(COMMIT)、すべての操作が失敗(ROLLBACK)、
すべての操作が実行中のいずれかだと、他のトランザクションから観測できること
Atomic Visibilityで解消したいトランザクションの不整合 トランザクション②が全サーバを参照すると、
サーバ3だけトランザクション①は
未COMMITに見えて不整合が発生!!
参照
参照
参照
- 24. 24
© 2020 NTT DATA Corporation
集中管理によるAtomic Visibilityの実現
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
グローバルトランザクションマネージャでサーバ間のトランザクションを集中管理
トランザクションの開始・終了を管理
トランザクションの開始・終了を通知 → 通知結果をベースに参照
グローバル
トランザクション
マネージャ
- 25. 25
© 2020 NTT DATA Corporation
集中管理によるAtomic Visibilityの実現
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション①
グローバルトランザクションマネージャでサーバ間のトランザクションを集中管理
トランザクションの開始・終了を管理
トランザクションの開始・終了を通知 → 通知結果をベースに参照
COMMIT
途中
COMMIT
成功
COMMIT
成功
グローバル
トランザクション
マネージャ
「トランザクション①のCOMMITは
まだ完了していない」と管理
- 26. 26
© 2020 NTT DATA Corporation
集中管理によるAtomic Visibilityの実現
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション①
グローバルトランザクションマネージャでサーバ間のトランザクションを集中管理
トランザクションの開始・終了を管理
トランザクションの開始・終了を通知 → 通知結果をベースに参照
COMMIT
途中
COMMIT
成功
COMMIT
成功
グローバル
トランザクション
マネージャ
トランザクション②
「トランザクション①のCOMMITは
まだ完了していない」と通知
- 27. 27
© 2020 NTT DATA Corporation
集中管理によるAtomic Visibilityの実現
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション①
グローバルトランザクションマネージャでサーバ間のトランザクションを集中管理
トランザクションの開始・終了を管理
トランザクションの開始・終了を通知 → 通知結果をベースに参照
COMMIT
途中
COMMIT
成功
COMMIT
成功
グローバル
トランザクション
マネージャ
トランザクション②
参照
参照
参照
通知結果から、トランザクション①の処理結果
はすべてのサーバで参照しないと判断
- 28. 28
© 2020 NTT DATA Corporation
集中管理しないAtomic Visibilityの実現
A B C
FDW FDW
B C
サーバ1
サーバ2 サーバ3
トランザクション①
集中管理しない Clock-SI などの方式も検討されている
集中管理の方式では、グローバルトランザクションマネージャが
性能ボトルネックやSPoFになるリスクがある
COMMIT
途中
COMMIT
成功
COMMIT
成功
トランザクション②
参照
参照
参照
• どのトランザクションの処理結果を参照してよいか、
サーバの時刻情報から判断
• 参照先がCOMMIT途中の場合は、
COMMIT/ROLLBACKが確定するまで待つ
- 29. 29
© 2020 NTT DATA Corporation
おわりに
よりよいスケールアウト機能を目指して開発が始まっています。
その第一弾として、複数台のPostgreSQLをまたがる
グローバルトランザクションをサポートするために
の実現に取り組んでいます!
PostgreSQLのスケールアウト機能に、
ぜひご期待ください!
1
2
Atomic Commit
Atomic Visibility