Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で

Avatar for Koya Masuda Koya Masuda
September 26, 2025

GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で

Avatar for Koya Masuda

Koya Masuda

September 26, 2025
Tweet

More Decks by Koya Masuda

Other Decks in Programming

Transcript

  1. 1 DB負荷分散することになった背景 3 技術選定プロセス 2 Read / Write Splittingの技術 4

    GraphQL × RailsでRead / Write Splittingしようとすると困ること 13 アウトライン 5 リスク管理しながら導入する
  2. DBサーバー 前提知識:レプリケーション • 複数のサーバーにデータベースを複製 する技術 • 同じデータを持つデータベースに同じ SQLを実行したら、同じ状態になるよね、 という考え方 •

    複製されたデータベースをレプリカと呼 ぶ 28 アプリケーション サーバー CRUD データ同期 プライマリ レプリカ https://www.shoeisha.co.jp/book/detail/9784798186627
  3. DBサーバー リードレプリカによる負荷分散 • 参照専用のレプリカをリードレプリカと呼 ぶ • リードレプリカを増やすことで参照SQLを 分散できる • Read(参照)とWrite(更新)のSQLを分

    離して別のDBに処理させることを「Read / Write Splitting」という ※以降、プライマリ=writer、レプリカ=readerと表現します 29 アプリケーション サーバー Write データ同期 Read プライマリ リードレプリカ
  4. Railsの複数DB • 複数DBのマイグレーション • r/wのロールの自動切り替え • 手動のデータベース接続切替 • モデル単位の切替 34

    https://railsguides.jp/v8.0/active_record_multiple_databases.html config/database.yml レプリカには replica: trueを指定する
  5. 技術選定のポイント 38 • 技術に関すること ◦ 要件を満たせる技術なのか? ◦ 拡張性があるか? • 組織に関すること

    ◦ 普段の開発速度に影響するか? ◦ 扱えるメンバーがどれくらいいるか? https://book.impress.co.jp/books/1118101029