リードレプリカ (read replica) は、書き込み用のデータベース (主系) とは別に用意する、読み取り専用の複製 です。
参照 (SELECT) が多いシステムで、読み取りをレプリカに振り分け、主系の負荷を下げる目的で使われます。
まず押さえたいポイント
- 書き込みは主系、読み取りはレプリカ、と役割を分ける (読み書き分離)
- データは レプリケーション で主系から同期される
- レプリカは複数台に増やせるので、読み取りのスケールアウトがしやすい
どんなときに効くか
- 読み取りが書き込みより圧倒的に多い (ニュース、ECの商品閲覧など)
- 集計・分析の重いクエリを、本番の主系から切り離したい
- 主系のスペックを上げる (スケールアップ) だけでは読み取りをさばけない
主系との役割分担
アプリ側で、書き込み (INSERT / UPDATE / DELETE) は主系へ 読み取り (SELECT) はレプリカへ と接続先を振り分けます。
フレームワークによっては、この振り分けを設定で自動化できるものもあります。レプリカを増やせば読み取りの処理能力は伸ばせますが、全レプリカが主系から同期を受ける ため、主系の書き込み能力そのものが上限になる点は変わりません。
注意点
レプリケーションは多くの場合 非同期 のため、主系に書いた直後にレプリカを読むと、まだ反映されていない古いデータが返ることがあります (レプリケーションラグ)。
書き込み直後に必ず最新を見せたい処理 は主系から読む、それ以外はレプリカ、というように使い分けます。書き込み自体の負荷分散にはならない (書き込みは主系に集中する) 点も押さえておきます。
マネージドDBの RDS ではリードレプリカを設定だけで追加できます。DBサーバーを分ける構成の段階は、DBサーバーを分ける必要性とは?Webと同居の限界・分離するメリットと判断基準 で整理しています。