CDP:Read Replicaパターン
提供:AWS-CloudDesignPattern
読込専用レプリカによる負荷分散
目次 |
解決したい課題
データベースへのアクセス頻度が高くDBサーバーのリソースが逼迫している場合、サーバーのスペックを上げる(つまりスケールアップする)ことが多い。スケールアップが困難になると、DBサーバーを水平分散するスケールアウトが行なわれるが、一般的には難しいとされる。通常は、データベースの書き込みより読み込み比率が高いため、読み込み処理を分散してシステム全体のパフォーマンス向上を目指すことが求められる。
クラウドでの解決/パターンの説明
読み込みパフォーマンスを向上するには、幾つかの対処方法がある。このパターンでは、読み込みを複数の「リードレプリカ(読み込み用のレプリカ)」に分散させることで、全体のパフォーマンスを向上している。リードレプリカは、マスターに対する書き込みに追随する形で、自分自身のデータを反映させる。読み込みは主にリードレプリカを利用することで、マスターの負荷も減らすことになる。
実装
AWSのRDBMSサービスである「RDS」には、「Read Replica」という読み取り専用データベースを容易に作成できる機能がある。また、EC2を利用して読み取り専用のデータベースを作成することも可能である。
- マスターDBのリード専用のレプリカを作成する。RDSが対応しているデータベースの場合は、Read Replica機能で作成する。
- アプリケーションからデータを読み込む際、リードレプリカをアクセス先に設定する。
- 複数のリードレプリカを利用することは可能だが、アプリケーション側で振り分けする必要がある。その際、HAProxyやMySQL Proxyなどのミドルウエアを用いてもよい。[関連ブログ 1]
構造
利点
- データベースからの読み込み負荷が高い場合、負荷を分散できる。
- データ解析用途などでマスターに負荷をかけずに処理したいときにも有効である。
注意
- リードレプリカは冗長構成の目的のためのものではないので、データベースの耐久性を高めたい際には、リードレプリカではなく、DBのレプリケーションそのものを考える。もちろん、リードレプリカとDBレプリケーションを併用することも可能である。
- 一般的にリードレプリカは非同期のレプリケーションであるため、マスターとリードレプリカの間には若干のラグが存在することに注意する。
- RDSは自動バックアップを無効("Backup Retention Period"を0)にすると、そのRDSからリードレプリカを作成することができない。[関連ブログ 2]
その他
- 作成したリードレプリカは、マスターへ昇格させることもできる。シャーディングへの移行に利用したり、障害回復時に利用したりすることができる。
- リージョンを超えたリードレプリカ(クロスリージョンリードレプリカ)を利用すると、異なるリージョンへリードレプリカを作成できる。