Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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