Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

RDS Proxy Agenda 自己紹介 まとめ

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

“Auroraとコネクション プーリングの仕組みは 相性が悪い”

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Application Connections 使用中 使用中 使用中 未使用 未使用

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Application Connections 使用中 使用中 使用中 未使用 未使用 replica master フェイルオーバーが発生したらmaster だったreplicaに繋いだまま

Slide 9

Slide 9 text

RDS Proxy Managing Connections with Amazon RDS Proxy (Preview)

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Application Connections 使用中 使用中 使用中 未使用 未使用 Aurora RDS Proxy new!

Slide 12

Slide 12 text

RDS Proxyの利点 Benefits of using RDS Proxy

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

フェイルオーバーとしては20秒ほど

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

フェイルオーバーとしては30秒ほど

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

RDS Proxyの欠点 Disadvantages of using RDS Proxy

Slide 24

Slide 24 text

レイテンシーが高くなる

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

まとめ STAY 障害性の保険と考えれば 費用として悪くない フェイルオーバーに は対応できる GOOD! Readエンドポイントは直接Aurora 参照することになりそう STAY スループットが落ちるけど プレビューだからと思いたい BAD

Slide 32

Slide 32 text

Thanks! Does anyone have any questions? rito@chimame