CDP:Read Replicaパターン

提供:AWS-CloudDesignPattern
移動: 案内, 検索
寄贈したアーキテクト

読込専用レプリカによる負荷分散

目次

解決したい課題

 データベースへのアクセス頻度が高くDBサーバーのリソースが逼迫している場合、サーバーのスペックを上げる(つまりスケールアップする)ことが多い。スケールアップが困難になると、DBサーバーを水平分散するスケールアウトが行なわれるが、一般的には難しいとされる。通常は、データベースの書き込みより読み込み比率が高いため、読み込み処理を分散してシステム全体のパフォーマンス向上を目指すことが求められる。

クラウドでの解決/パターンの説明

 読み込みパフォーマンスを向上するには、幾つかの対処方法がある。このパターンでは、読み込みを複数の「リードレプリカ(読み込み用のレプリカ)」に分散させることで、全体のパフォーマンスを向上している。リードレプリカは、マスターに対する書き込みに追随する形で、自分自身のデータを反映させる。読み込みは主にリードレプリカを利用することで、マスターの負荷も減らすことになる。

実装

 AWSのRDBMSサービスである「RDS」には、「Read Replica」という読み取り専用データベースを容易に作成できる機能がある。また、EC2を利用して読み取り専用のデータベースを作成することも可能である。

  • マスターDBのリード専用のレプリカを作成する。RDSが対応しているデータベースの場合は、Read Replica機能で作成する。
  • アプリケーションからデータを読み込む際、リードレプリカをアクセス先に設定する。
  • 複数のリードレプリカを利用することは可能だが、アプリケーション側で振り分けする必要がある。その際、HAProxyやMySQL Proxyなどのミドルウエアを用いてもよい。[関連ブログ 1]

構造

6wNg0ISJczU5Pz1m-1506D.png

利点

  • データベースからの読み込み負荷が高い場合、負荷を分散できる。
  • データ解析用途などでマスターに負荷をかけずに処理したいときにも有効である。

注意

  • リードレプリカは冗長構成の目的のためのものではないので、データベースの耐久性を高めたい際には、リードレプリカではなく、DBのレプリケーションそのものを考える。もちろん、リードレプリカとDBレプリケーションを併用することも可能である。
  • 一般的にリードレプリカは非同期のレプリケーションであるため、マスターとリードレプリカの間には若干のラグが存在することに注意する。
  • RDSは自動バックアップを無効("Backup Retention Period"を0)にすると、そのRDSからリードレプリカを作成することができない。[関連ブログ 2]

その他

  • 作成したリードレプリカは、マスターへ昇格させることもできる。シャーディングへの移行に利用したり、障害回復時に利用したりすることができる。
  • リージョンを超えたリードレプリカ(クロスリージョンリードレプリカ)を利用すると、異なるリージョンへリードレプリカを作成できる。

関連ブログ

  1. suz-lab - blog の「HAProxyを用いた"Read Replica"(RDS)の振り分け」( http://blog.suz-lab.com/2012/04/haproxyread-replicards.html )
  2. suz-lab - blog の「RDSの自動バックアップを無効("Backup Retention Period"を"0")にすると」( http://blog.suz-lab.com/2012/09/rdsbackup-retention-period0.html )
個人用ツール
名前空間
変種
操作
CDPメニュー
ツールボックス