RDS Proxyを使ってAuroraと仲良くなる

52f95e52a6d71b67361ac179fb8405f4?s=47 chimame
February 19, 2020

RDS Proxyを使ってAuroraと仲良くなる

HIGOBASHI.AWS #13
〜令和新春!AWSだらけのLT大会〜

52f95e52a6d71b67361ac179fb8405f4?s=128

chimame

February 19, 2020
Tweet

Transcript

  1. RDS Proxyを使って Auroraと仲良くなる 2020/01/30 HIGOBASHI.AWS #13 〜令和新春!AWSだらけのLT大会〜

  2. RDS Proxy Agenda 自己紹介 まとめ

  3. Whoa! 名前: rito 職業: Webエンジニア (アプリケーションエンジニア) 分野: Ruby on Rails,

    Nodejs, React, Docker, AWS, GCP 所属: Ateam Finergy Inc. コミュニティ: GDG Osaka Rails follow-up Osaka Osaka Web Developers Meetup twitter: @chimame_rt GitHub: chimame
  4. “Auroraとコネクション プーリングの仕組みは 相性が悪い”

  5. コネクションプーリングとは? 5

  6. Application Connections 使用中 使用中 使用中 未使用 未使用

  7. 7 Q.なんで相性が悪い?

  8. Application Connections 使用中 使用中 使用中 未使用 未使用 replica master フェイルオーバーが発生したらmaster

    だったreplicaに繋いだまま
  9. RDS Proxy Managing Connections with Amazon RDS Proxy (Preview)

  10. AWS re:Invent 2019で発表された新しいサービス。 • その名の通りRDS(データベース)用のプロキシ • RDS接続コスト(メモリ、CPU)を肩代わりする • 接続にIAM認証が使えてセキュアになる 特に発表された段階の巷ではAWS

    LambdaとRDSの接続相 性の悪さを軽減できると期待されました。 RDS Proxyとは? 10
  11. Application Connections 使用中 使用中 使用中 未使用 未使用 Aurora RDS Proxy

    new!
  12. RDS Proxyの利点 Benefits of using RDS Proxy

  13. コネクションプーリング問題の解決

  14. なんで? • アプリケーションはProxyに対して、コネクションプールをしている • Auroraがフェイルオーバーして接続が借り変わるのはProxyが管理している そのため、Read/Writeが入れ替わってもアプリケーションは意識する必要がない 相性が悪いというフェイルオーバー時の動作 が解消される 14

  15. 15 Q.フェイルオーバー時の読み込みないし書 き込み不可時間はどれくらい?

  16. 16 A.接続が入れ替わる瞬間の 1.4秒間くらい発生する

  17. def show Rails.logger.debug("start: #{Time.zone.now.iso8601(3)}") Test.where(id: 1).pluck(:id) head :ok rescue Rails.logger.debug("error:

    #{Time.zone.now.iso8601(3)}") head :forbidden end
  18. フェイルオーバーとしては20秒ほど

  19. 約1.2秒の間、Readができない事象が 発生。

  20. def show Rails.logger.debug("start: #{Time.zone.now.iso8601(3)}") Test.create(name: "#{Time.zone.now.iso8601(3)}") head :ok rescue Rails.logger.debug("error:

    #{Time.zone.now.iso8601(3)}") head :forbidden end
  21. フェイルオーバーとしては30秒ほど

  22. 約1.4秒の間、Writeができない事象が 発生。

  23. RDS Proxyの欠点 Disadvantages of using RDS Proxy

  24. レイテンシーが高くなる

  25. def start # 1万件のデータ登録にProxyのありなしでどれくらい時間差が出るか 10000.times do |i| Test.create(name: "proxy #{i}")

    end end
  26. Proxyを介した場合は約3分15秒で完了 直接接続した場合には約1分8秒で完了

  27. Proxyを介した場合と直接繋いだ場合のネットワーク送受信のスループットに大きな差が出 た RDS Proxyを挟むことで通信が制御され る? 27

  28. Proxyを介した場合と直接繋いだ場合のネットワーク送受信のスループットに大きな差が出 た RDS Proxyを挟むことで通信が制御され る? 28 Proxyを介した場合 直接の場合

  29. Readエンドポイントがなくなる

  30. ここに接続エンドポイントのスクリーンショットを貼る masterへのエンドポイントしかない

  31. まとめ STAY 障害性の保険と考えれば 費用として悪くない フェイルオーバーに は対応できる GOOD! Readエンドポイントは直接Aurora 参照することになりそう STAY

    スループットが落ちるけど プレビューだからと思いたい BAD
  32. Thanks! Does anyone have any questions? rito@chimame