Slide 1

Slide 1 text

RDS Proxyは世界を変えるか︖ 2020年6⽉26⽇ CX事業本部 岩⽥ 智哉

Slide 2

Slide 2 text

⾃⼰紹介 CX事業本部 ⻄⽇本チーム サーバーサイドエンジニア 2020 Japan APN Ambassadors 2020 APN ALL AWS Certifications Engineer 岩⽥ 智哉 2

Slide 3

Slide 3 text

⼤事なこと 資料作成時点でRDS Proxyは まだGAされていません なのでRDS Proxy⾃体の話はあまりしません…

Slide 4

Slide 4 text

2020年は サーバーレス元年︖

Slide 5

Slide 5 text

直近1年間でのLambda関連アップデート •VPC Lambdaのアーキテクチャ改善 •Lambda Destinations •並列化係数のサポート •Provisioned Concurrency •RDS Proxy(まだプレビュー) •EFS統合(NEW!!) 5

Slide 6

Slide 6 text

Lambda×RDBはアンチパターン︖︖ •コールドスタートの問題 •IPアドレスやENIの枯渇問題 •スケールアップとスケールアウト の相性問題 6

Slide 7

Slide 7 text

Lambda×RDBはアンチパターン︖︖ •コールドスタートの問題 •IPアドレスやENIの枯渇問題 •スケールアップとスケールアウトの 相性問題 7

Slide 8

Slide 8 text

LambdaとRDSの ミスマッチを緩和する技術として RDS Proxyに期待

Slide 9

Slide 9 text

そもそもコネクションプーリングとは︖ プログラムがデータベース管理システム(DBMS) へアクセスする際、アクセス要求のたびに接続や 切断を繰り返すのではなく、⼀度形成した 接続窓⼝(コネクション)を維持し続けて 使い回す⼿法。[1] [1]:IT⽤語辞典 e-Words より引⽤ http://e-words.jp/w/コネクションプーリング 9

Slide 10

Slide 10 text

• 各プログラミング⾔語のライブラリ アプリでプーリング • アプリとDBの間にプロキシを挟む • Ex)Pgpool-II,PgBouncer… ミドルウェアでプーリング コネクションプーリングざっくり分類 10

Slide 11

Slide 11 text

アプリでプーリングするパターン コネクションプール connection worker worker connection connection worker connection Users Application Database 11

Slide 12

Slide 12 text

ミドルウェアでプーリングするパターン コネクションプール connection worker worker worker connection connection Users Application Database Middle ware 12

Slide 13

Slide 13 text

コネクションプーリングのメリット •接続のオーバーヘッド削減 •論理的接続と物理的接続の分離 13

Slide 14

Slide 14 text

接続の オーバーヘッド削減

Slide 15

Slide 15 text

コネクションプーリング 無い時

Slide 16

Slide 16 text

コネクションプーリングが無い時 16

Slide 17

Slide 17 text

コネクションプーリングが無い時 リクエスト 17

Slide 18

Slide 18 text

コネクションプーリングが無い時 接続要求 • TCPの3WAYハンドシェイク • DBユーザーの認証/認可 • …etc 18

Slide 19

Slide 19 text

コネクションプーリングが無い時 接続確⽴ 19

Slide 20

Slide 20 text

コネクションプーリングが無い時 SQL 20

Slide 21

Slide 21 text

コネクションプーリングが無い時 切断 21

Slide 22

Slide 22 text

コネクションプーリングが無い時 レスポンス 22

Slide 23

Slide 23 text

コネクションプーリングが無い時 最初に戻る 23

Slide 24

Slide 24 text

コネクションプーリング ある時

Slide 25

Slide 25 text

コネクションプーリングがある時 未使⽤ 使⽤中 25

Slide 26

Slide 26 text

コネクションプーリングがある時 未使⽤ 使⽤中 接続 26

Slide 27

Slide 27 text

コネクションプーリングがある時 未使⽤ 使⽤中 connection プーリング 27

Slide 28

Slide 28 text

コネクションプーリングがある時 未使⽤ 使⽤中 connection リクエスト 28

Slide 29

Slide 29 text

コネクションプーリングがある時 未使⽤ 使⽤中 connection プール済のコネクションを チェックアウトして利⽤ SQL 29

Slide 30

Slide 30 text

コネクションプーリングがある時 未使⽤ 使⽤中 connection 使⽤済みのコネクションは プールの未使⽤領域に戻る レスポンス 30

Slide 31

Slide 31 text

論理的接続と 物理的接続の分断

Slide 32

Slide 32 text

コネクションプーリング ある時

Slide 33

Slide 33 text

コネクションプーリングがある時 物理 論理 connection リクエスト 33

Slide 34

Slide 34 text

コネクションプーリングがある時 物理 論理 connection connection 接続 34

Slide 35

Slide 35 text

コネクションプーリングがある時 物理 論理 SQL connection connection 35

Slide 36

Slide 36 text

コネクションプーリングがある時 物理 論理 connection connection DBアクセスを 伴わない処理 36

Slide 37

Slide 37 text

コネクションプーリングがある時 物理 論理 connection connection リクエスト 37

Slide 38

Slide 38 text

コネクションプーリングがある時 物理 論理 connection connection connection 接続 38

Slide 39

Slide 39 text

コネクションプーリングがある時 物理 論理 connection SQL connection connection 39

Slide 40

Slide 40 text

コネクションプーリングがある時 物理 論理 connection connection connection DBアクセスを 伴わない処理 40

Slide 41

Slide 41 text

コネクションプーリングがある時 物理 論理 connection connection レスポンス 41

Slide 42

Slide 42 text

コネクションプーリングがある時 物理 論理 connection レスポンス 42

Slide 43

Slide 43 text

スパイク耐性の向上

Slide 44

Slide 44 text

コネクションプーリング 無い時

Slide 45

Slide 45 text

コネクションプーリングのメリット 25 30 35 40 45 50 55 60 リクエスト数 接続エラー コネクションプーリングを使わない場合 最⼤同時接続数を超過した接続要求はエラー 45

Slide 46

Slide 46 text

コネクションプーリングが無い時 46

Slide 47

Slide 47 text

コネクションプーリングが無い時 リクエスト 47

Slide 48

Slide 48 text

コネクションプーリングが無い時 接続要求 48

Slide 49

Slide 49 text

コネクションプーリングが無い時 接続確⽴ connection 49

Slide 50

Slide 50 text

コネクションプーリングが無い時 リクエスト connection 50

Slide 51

Slide 51 text

コネクションプーリングが無い時 接続要求 connection 51

Slide 52

Slide 52 text

コネクションプーリングが無い時 最⼤同時接続数超過エラー connection 52

Slide 53

Slide 53 text

コネクションプーリングが無い時 DB接続エラー connection 53

Slide 54

Slide 54 text

コネクションプーリング ある時 コネクションプーリング ある時

Slide 55

Slide 55 text

コネクションプーリングのメリット プーリングレイヤがDBへの流量を制御 25 30 35 40 45 50 55 60 プールへのリクエスト数 DBへのリクエスト数 55

Slide 56

Slide 56 text

コネクションプーリングがある時 物理 論理 connection リクエスト 56

Slide 57

Slide 57 text

コネクションプーリングがある時 物理 論理 connection connection 接続 57

Slide 58

Slide 58 text

コネクションプーリングがある時 物理 論理 SQL connection connection 58

Slide 59

Slide 59 text

コネクションプーリングがある時 物理 論理 リクエスト SQL connection connection 59

Slide 60

Slide 60 text

コネクションプーリングがある時 物理 論理 connection 接続 SQL connection connection 60

Slide 61

Slide 61 text

コネクションプーリングがある時 物理 論理 connection SQL SQL connection connection 61

Slide 62

Slide 62 text

コネクションプーリングがある時 物理 論理 connection 利⽤可能な物理接続が無い場合はWAIT SQL SQL connection connection 62

Slide 63

Slide 63 text

コネクションプーリングがある時 物理 論理 connection SQL 物理接続が利⽤可能になったら処理続⾏ connection connection 63

Slide 64

Slide 64 text

コネクションプーリング 良い事づくめ︖︕

Slide 65

Slide 65 text

よく⽿にする話… Lambdaは コネクションプーリングが 使えない︖︖

Slide 66

Slide 66 text

Lambdaのアーキテクチャ • Lambda実⾏環境はコンテナ内に構築される • リクエストに応じてLambda実⾏環境を⽣成 • アイドル状態のLambda実⾏環境は破棄される • 1つのLambda実⾏環境に対して同時に ルーティングされるリクエストは1つだけ 66

Slide 67

Slide 67 text

アプリ側でプーリングしても有効活⽤されない Lambda 実⾏環境 Database Users connection worker connection Lambda 実⾏環境 connection worker connection 無駄 無駄 67

Slide 68

Slide 68 text

Lambdaの プログラミングモデル

Slide 69

Slide 69 text

Lambdaのプログラミングモデル 関数・メソッド 実⾏ ランタイム 起動・初期化 コールドスタート時、 ウォームスタート時共に毎回実⾏ コールドスタート時のみ実⾏ 69

Slide 70

Slide 70 text

Lambdaのプログラミングモデル 初期化処理の中でDBに接 続することで、ウォーム スタート時は接続処理を スキップ可能 ただし、接続クローズは Lambda 実⾏環境破棄の タイミングになる 70

Slide 71

Slide 71 text

アイドル状態の実⾏環境がコネクションを消費する Lambda Function 2 Lambda 実⾏環境 connection Lambda Function 1 Lambda 実⾏環境 connection Lambda 実⾏環境 connection Users Database 71

Slide 72

Slide 72 text

アイドル状態の実⾏環境がコネクションを消費する Lambda 実⾏環境 connection Lambda Function 2 Lambda 実⾏環境 connection Lambda Function 1 Lambda 実⾏環境 connection Lambda 実⾏環境 connection Users Database 72

Slide 73

Slide 73 text

Lambdaにおけるコネクションプーリング • 物理的接続と論理的接続を分割するメリットが薄い • 接続を永続化することに懸念事項が多い アプリでプーリング • ⾃前でEC2を⽴てるほどのメリットがあるのか︖ • サーバーレスとは︖ ミドルウェアでプーリング 73

Slide 74

Slide 74 text

Lambdaはコネクショ ンプーリングを活⽤ しづらい

Slide 75

Slide 75 text

と思いきや… re:invent2019にて RDS Proxy発表

Slide 76

Slide 76 text

RDSプロキシとは • RDS向けのフルマネージドなDBプロキシ • MySQLとPostgreSQLに対応(Aurora含む) • IAM認証にも対応 76

Slide 77

Slide 77 text

77 RDSプロキシのメリット •⼀般的なコネクションプーリングと 同様のメリット •フルマネージド •負荷に応じて⾃動的にスケール •フェイルオーバー時間の短縮

Slide 78

Slide 78 text

78 RDSプロキシのデメリット •料⾦が増える •5ms程度のレイテンシ増加 •障害点が増える

Slide 79

Slide 79 text

RDSプロキシの料⾦体系 •基となるデータベースインスタンス のvCPU数に応じて課⾦ •0.018USD/時間 ※2020/6時点の東京リージョンにおける料⾦体系 79

Slide 80

Slide 80 text

RDSプロキシが向いている ワークロード

Slide 81

Slide 81 text

RDSプロキシが向いているワークロード • DBアクセスを伴わない処理が 多くの割合を占める場合 • トランザクションを使⽤しない 場合 81

Slide 82

Slide 82 text

RDSプロキシが不向きな ワークロード

Slide 83

Slide 83 text

RDSプロキシが不向きなワークロード • DBアクセスを伴う処理が 多くの割合を占める場合 • ロングトランザクション • リクエストが多すぎる場合 • 「ピン留め」を誘発するよう なワークロード 83

Slide 84

Slide 84 text

RDSプロキシが無意味なパターン 25 30 35 40 45 50 55 60 リクエスト数 接続エラー DBスペックに対してリクエスト数が 多すぎる場合はどうしようもない 84

Slide 85

Slide 85 text

ロングトランザクション 物理 論理 BEGIN connection connection 85

Slide 86

Slide 86 text

ロングトランザクション 物理 論理 connection connection Idle in transaction 86

Slide 87

Slide 87 text

ロングトランザクション 物理 論理 リクエスト connection connection Idle in transaction 87

Slide 88

Slide 88 text

ロングトランザクション 物理 論理 connection SQL connection connection Idle in transaction 88

Slide 89

Slide 89 text

ロングトランザクション 物理 論理 connection SQL connection connection Idle in transaction connection 89

Slide 90

Slide 90 text

ピン留め • プールされた接続が特定のクライアントに固定され 複数のクライアント間で共有できない状況 • クライアントからのリクエストによりDBセッション 固有の情報が変更された場合、以後のリクエストは 変更後の状態に依存するため発⽣ 90

Slide 91

Slide 91 text

ピン留めが発⽣する場合 物理 論理 SET WORK_MEM=‘1MB’ connection connection WORK_MEM=‘2MB’ 91

Slide 92

Slide 92 text

ピン留めが発⽣する場合 物理 論理 connection connection connection WORK_MEM=‘1MB’ リクエスト 92

Slide 93

Slide 93 text

ピン留めが発⽣する場合 物理 論理 connection connection connection connection WORK_MEM=‘1MB’ WORK_MEM=‘2MB’ パラメータが更新されており、再利⽤できない 93

Slide 94

Slide 94 text

ピン留めが発⽣するケース https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html#rds-proxy-pinning Amazon RDS Proxy (プレビュー) による接続の管理 ピン留めを回避する • ⼀時テーブルを作成した場合 • プリペアドステートメント • 拡張クエリプロトコルの使⽤(PostgreSQLの場合) …etc 94

Slide 95

Slide 95 text

RDSプロキシ以外の 選択肢は無いのか︖

Slide 96

Slide 96 text

RDS Proxy以外に検討したいポイント •DBエンジンは適切なのか︖ •RDBという選択肢は適切なのか︖ •そもそもLambdaは適切なのか︖ 96

Slide 97

Slide 97 text

まとめ まとめ

Slide 98

Slide 98 text

98 まとめ RDS ProxyによってLambdaとRDSの相性の 悪さを緩和することができる。 緩和はあくまで緩和 まずはDynamoDBから検討したい

Slide 99

Slide 99 text

99 まとめ • RDS Proxyが有効に機能するかは ワークロードに依存 • 思考停⽌的に導⼊するのではなく 事前分析と検証を • 場合によってはアプリの改修も

Slide 100

Slide 100 text

No content