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.5k
to B プロダクトで Vite + React Router を採用して半年後の感想 / Impressions after 6 months of using Vite + React Router
mh4gf
11
3.6k
Playwright で一番小さく始める VRT と、次のステップの選択肢
mh4gf
13
2.7k
学習しながらアーキテクチャを進化させていくためのモノレポ
mh4gf
3
810
pnpm workspace実践ノウハウ
mh4gf
8
3.1k
sassc-railsを利用している我々は、Sassの@importの非推奨化をどのように乗り越えていくか
mh4gf
4
1.8k
平成Ruby会議 株式会社タイミースポンサーセッション
mh4gf
0
540
コーディング規約で悲しみを生みたくない話
mh4gf
0
250
平成.rb 株式会社タイミー チーム開発紹介資料
mh4gf
0
630
Other Decks in Technology
See All in Technology
個人的、Kubernetes の最新注目機能! (2024年5月版) / TechFeed Experts Night#28 〜 コンテナ技術最前線
pfn
PRO
3
210
kcp: Kubernetes APIs Are All You Need #techfeed_live / TechFeed Experts Night 28th
ytaka23
1
180
DevRelによる信頼構築とデータ駆動で変わるエンジニア採用 / DevRel Trust Building to Data Driven Engineering Hiring
bobtani
1
120
TanStack Routerで型安全かつ効率的なルーティングを実現
ytaisei
4
760
TiDBにおけるテーブル設計と最適化の事例
cygames
0
770
複雑なビジネスルールに挑む:正確性と効率性を両立するfp-tsのチーム活用術 / Strike a balance between correctness and efficiency with fp-ts
kakehashi
5
3.4k
株式会社EventHub・エンジニア採用資料
eventhub
0
2.1k
TDD - Test Driven Drupal
opdavies
0
3k
拓展QA日常工作的邊界
line_developers_tw
PRO
0
510
シンプルなHITL機械学習と様々なタスクにおけるHITL機械学習
naohachi89
0
310
AI JIMY - 登壇(インストール編)
hanacchi
0
150
本当のガバクラ基礎
toru_kubota
0
310
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
9
1.3k
Designing Experiences People Love
moore
136
23k
Producing Creativity
orderedlist
PRO
338
39k
Web Components: a chance to create the future
zenorocha
306
41k
Building Flexible Design Systems
yeseniaperezcruz
320
37k
[RailsConf 2023] Rails as a piece of cake
palkan
28
4k
Building Effective Engineering Teams - LeadDev
addyosmani
33
1.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
Into the Great Unknown - MozCon
thekraken
15
1.1k
Teambox: Starting and Learning
jrom
128
8.4k
Side Projects
sachag
451
41k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
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を使うかどうかの意思決定 • フェイルオーバー時のコネクションプールをどうする