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
Hirotaka Miyagi
January 23, 2020
Technology
1
1.3k
ProductionでRails6マルチDB対応を小さく始める
平成.rb #11で話したスライドです。
Hirotaka Miyagi
January 23, 2020
Tweet
Share
More Decks by Hirotaka Miyagi
See All by Hirotaka Miyagi
GraphQL 成熟度モデルの紹介と、プロダクトに当てはめた事例 / GraphQL maturity model
mh4gf
8
1.8k
to B プロダクトで Vite + React Router を採用して半年後の感想 / Impressions after 6 months of using Vite + React Router
mh4gf
12
4.3k
Playwright で一番小さく始める VRT と、次のステップの選択肢
mh4gf
14
3.1k
学習しながらアーキテクチャを進化させていくためのモノレポ
mh4gf
3
900
pnpm workspace実践ノウハウ
mh4gf
9
3.9k
sassc-railsを利用している我々は、Sassの@importの非推奨化をどのように乗り越えていくか
mh4gf
4
1.9k
平成Ruby会議 株式会社タイミースポンサーセッション
mh4gf
0
550
コーディング規約で悲しみを生みたくない話
mh4gf
0
280
平成.rb 株式会社タイミー チーム開発紹介資料
mh4gf
0
710
Other Decks in Technology
See All in Technology
シフトレフトで挑む セキュリティの生産性向上
sekido
PRO
0
270
大規模ドラレコデータ収集・機械学習基盤を支える AWS CDK 〜導入・運用事例紹介〜
pemugi
0
110
Azure OpenAI Service Dev Day / LLMでできる!使える!生成AIエージェント
masahiro_nishimi
3
810
OSSコミットしてZennの課題を解決した話
dyoshikawa1993
0
150
CTOから見た事業開発とプロダクト開発 / My Perspective on Business and Product Development as CTO
keisuke69
4
960
テスト・設計研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
dxd2024-生成AIに振り回された3か月間の成功と失敗/dxd2024-link-and-motivation
lmi
2
260
スタートアップにおける組織設計とスクラムの長期戦略 / Scrum Fest Kanazawa 2024
yoshikiiida
13
3.6k
データベース研修 分析向けSQL入門【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
110
LINE WORKSへ簡単通知!Incoming Webhookアプリの紹介
mmclsntr
0
110
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
248
12k
How To Stay Up To Date on Web Technology
chriscoyier
784
250k
Principles of Awesome APIs and How to Build Them.
keavy
124
16k
Building Flexible Design Systems
yeseniaperezcruz
323
37k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
277
13k
Building a Scalable Design System with Sketch
lauravandoore
458
32k
Web Components: a chance to create the future
zenorocha
307
41k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
Bash Introduction
62gerente
607
210k
Building Adaptive Systems
keathley
34
2k
How GitHub (no longer) Works
holman
305
140k
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を使うかどうかの意思決定 • フェイルオーバー時のコネクションプールをどうする