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

RDSプロキシは未来を変えるか

 RDSプロキシは未来を変えるか

Developers.IO 2020 CONNECTの発表資料です

TomoyaIwata

June 26, 2020
Tweet

More Decks by TomoyaIwata

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  43. スパイク耐性の向上

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  97. まとめ
    まとめ

    View Slide

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

    View Slide

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

    View Slide

  100. View Slide