Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ProductionでRails6マルチDB対応を小さく始める
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hirotaka Miyagi
January 23, 2020
Technology
1.7k
1
Share
ProductionでRails6マルチDB対応を小さく始める
平成.rb #11で話したスライドです。
Hirotaka Miyagi
January 23, 2020
More Decks by Hirotaka Miyagi
See All by Hirotaka Miyagi
チームの性質によって変わる ADR との向き合い方と、生成 AI 時代のこれから / How to deal with ADR depends on the characteristics of the team
mh4gf
5
1.7k
Playwright でテストを書いててよかった!と思えた事例紹介
mh4gf
0
290
GraphQL 成熟度モデルの紹介と、プロダクトに当てはめた事例 / GraphQL maturity model
mh4gf
8
2.2k
to B プロダクトで Vite + React Router を採用して半年後の感想 / Impressions after 6 months of using Vite + React Router
mh4gf
16
6.9k
Playwright で一番小さく始める VRT と、次のステップの選択肢
mh4gf
14
5.8k
学習しながらアーキテクチャを進化させていくためのモノレポ
mh4gf
3
1.2k
pnpm workspace実践ノウハウ
mh4gf
12
9.1k
sassc-railsを利用している我々は、Sassの@importの非推奨化をどのように乗り越えていくか
mh4gf
4
2.9k
平成Ruby会議 株式会社タイミースポンサーセッション
mh4gf
0
660
Other Decks in Technology
See All in Technology
【技術書典20】OpenFOAM(自宅で深める流体解析)流れと熱移動(2)
kamakiri1225
0
390
SLI/SLO、「完全に理解した」から「チョットデキル」へ
maruloop
3
380
Sociotechnical Architecture Reviews: Understanding Teams, not just Artefacts
ewolff
1
160
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
1.4k
古今東西SRE
okaru
2
180
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
450
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
shuta13
3
300
QAエンジニアはどうやって プロダクト議論の場に入れるのか?
moritamasami
2
410
全社統制を維持しながら現場負担をどう減らすか〜プラットフォームチームとセキュリティチームで進めたSecurity Hub活用によるAWS統制の見直し〜/secjaws-security-hub-custom-insights
mhrtech
1
360
エージェント時代の UIとAPI、CLI戦略
coincheck_recruit
0
170
セキュリティ対策、何からはじめる? CloudNative環境の脅威モデリングと リスク評価実践入門 #cloudnativekaigi
varu3
5
760
AIの揺らぎに“コシ”を与える階層化品質設計
ickx
0
270
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
690
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
510
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
320
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Building Applications with DynamoDB
mza
96
7k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
160
Marketing to machines
jonoalderson
1
5.2k
First, design no harm
axbom
PRO
2
1.2k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
130
Exploring anti-patterns in Rails
aemeredith
3
350
Transcript
ProductionでRails6 Multi DB対応を小さく始める 株式会社タイミー 宮城広隆
自己紹介 宮城 広隆 Ruby/Rails歴は2年 @MH4GF
平成Ruby会議のスポンサートークでマルチDB対応の 話を軽くしたところ、懇親会でどのように運用しているの かと聞かれることが多かったので 今回はその話をします
話すこと - Multi DBの概要 - 導入の流れ - 導入後の結果
話すこと - Multi DBの概要 - 導入の流れ - 導入後の結果
• 複数の「primary」データベースと、それぞれに対応する1つの 「replica」 • モデルでのコネクション自動切り替え • HTTP verbや直近の書き込みに応じたprimaryとreplicaの 自動スワップ •
マルチプルデータベースの作成、削除、マイグレーション、やり とりを行うRailsタスク Multi DBの概要
• 複数の「primary」データベースと、それぞれに対応する1つの 「replica」 • モデルでのコネクション自動切り替え • HTTP verbや直近の書き込みに応じたprimaryとreplicaの 自動スワップ •
マルチプルデータベースの作成、削除、マイグレーション、やり とりを行うRailsタスク Multi DBの概要
話すこと - Multi DBの概要 - 導入の流れ - 導入後の結果
• リードレプリカの導入 • 特定のGETエンドポイントのみリードレプリカに接続 • DatabaseSelectorは使わない 今回やったこと
• Ruby2.6.1 • Rails6.0.2.1 • Amazon Aurora MySQL 環境
なぜマルチDBが必要だったのか
なぜマルチDBが必要だったのか • 一番はCMによる負荷増大の保険のため • 最悪の場合のフェイルオーバーの選択肢を作るため
実戦投入 RDS RDSで「リーダーの追加」を選択し、リードレプリカのDBインス タンスを追加
実戦投入 RDS クラスターのリード用エンドポイントが作られるので、こちらを 控えておく
実戦投入 database.yml
実戦投入 モデル 各モデルで継承している抽象クラス(デフォルトのままでは ApplicationRecord)で、databaseとroleを設定
実戦投入 コントローラー リードレプリカを読みたい箇所でconntected_toを呼ぶ
実戦投入 コントローラー 以上!!!!
実戦投入 100行以下の修正で実装完了
実戦投入 コントローラー around_actionで呼ぶこともできます
DatabaseSelectorを使いたい場合 Railsガイドから引用 https://railsguides.jp/active_record_multiple_databases.html
できたこと • デフォルトでは変わらずprimaryのDBに接続し、叩かれる頻度 の高いSELECTクエリだけ明示的にreplicaのDBに接続でき るようになった • クエリが詰まることもなくCMを乗り越えられた ◦ 保険として用意していた形だが、何も問題が起きないことが 正義
• 副次的な効果として、フェイルオーバーができるようになり再起 動が発生してもダウンタイムの短縮が期待できるようになった
まだできていないこと/次にやる必要があること • 開発/テスト環境でのリードレプリカ • DBユーザーの適切な権限付与 • DatabaseSelectorを使うかどうかの意思決定 • フェイルオーバー時のコネクションプールをどうする