CDP:Read Replicaパターン
From AWS-CloudDesignPattern
頻度の高い読み込みの複製
Contents |
解決したい課題
データベースへのアクセスが高くてそのリソースが逼迫している際の対処方法として、サーバそのものをスペックを上げる、 つまりスケールアップを用いることは多い。しかし、データベースへの書き込みと、データベースからの読み込みの比率を見てみると、 大抵の場合は、少しの書き込みに対して、非常に多くの読み込みがある。このようなリードヘビー(読み込みが多い)なワークロードに関しては、 読み込みのパフォーマンスを改善すれば、システム全体のパフォーマンスが向上することになる。
クラウドでの解決/パターンの説明
読み込みのパフォーマンスを向上にするには、幾つかの対処方法がある。このパターンでは、読み込みを、 複数の“リードレプリカ(読み込み用のレプリカ)”に分散させることで、全体のパフォーマンスを向上している。 リードレプリカは、マスターに対する書き込みに追随する形で、自分自身のデータを反映させる。アプリケーション側で、 読み込みに対しては主にリードレプリカを用いることで、マスターの負荷も減らすことになる。
実装
AWSにはRDSと呼ばれるRDMS専用のサービスがあり、その機能の一つとして、Read Replicaという読み取り専用の データベースを容易に作成できるものがある。また、当然EC2を利用して読み取り専用のデータベースを作成することも可能である。
- マスターDBのリード専用のレプリカを作成する。RDSが対応しているデータベースの場合は、Read Replica機能で容易に作成することもできる。
- アプリケーション側で読み込み時に対しては、リードレプリカを用いるよう設定する。
- 複数のリードレプリカを利用することでも、そのリードレプリカを複数のデータセンタに配置することも可能だが、アプリケーション側でその振り分けを行う必要がある。HA ProxyやMySQL Proxy等のミドルウェアを用いても良い。
構造
利点
- 読み込みの負荷が高いときにこのパターンは有効であるが、データ解析の用途などでマスターに負荷をかけずに処理を行いたいときにも用いることができる
- 一般的にリードレプリカは非同期のレプリケーションであるため、マスターとリードレプリカの間には若干のラグが存在することに注意する。
注意
- リードレプリカは冗長構成の目的のためのものではないので、データベースの耐久性を高めたい際には、リードレプリカではなく、DBのレプリケーションそのものを考える。もちろん、リードレプリカとDBレプリケーションを併用することも可能である。
- 一般的にリードレプリカは非同期のレプリケーションであるため、マスターとリードレプリカの間には若干のラグが存在することに注意する。