CDP:Read Replicaパターン

From AWS-CloudDesignPattern
Jump to: navigation, search

頻度の高い読み込みの複製

Contents

解決したい課題

データベースへのアクセスが高くてそのリソースが逼迫している際の対処方法として、サーバそのものをスペックを上げる、 つまりスケールアップを用いることは多い。しかし、データベースへの書き込みと、データベースからの読み込みの比率を見てみると、 大抵の場合は、少しの書き込みに対して、非常に多くの読み込みがある。このようなリードヘビー(読み込みが多い)なワークロードに関しては、 読み込みのパフォーマンスを改善すれば、システム全体のパフォーマンスが向上することになる。

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

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

実装

AWSにはRDSと呼ばれるRDMS専用のサービスがあり、その機能の一つとして、Read Replicaという読み取り専用の データベースを容易に作成できるものがある。また、当然EC2を利用して読み取り専用のデータベースを作成することも可能である。

  • マスターDBのリード専用のレプリカを作成する。RDSが対応しているデータベースの場合は、Read Replica機能で容易に作成することもできる。
  • アプリケーション側で読み込み時に対しては、リードレプリカを用いるよう設定する。
  • 複数のリードレプリカを利用することでも、そのリードレプリカを複数のデータセンタに配置することも可能だが、アプリケーション側でその振り分けを行う必要がある。HA ProxyやMySQL Proxy等のミドルウェアを用いても良い。

構造

6wNg0ISJczU5Pz1m-1506D.png

利点

  • 読み込みの負荷が高いときにこのパターンは有効であるが、データ解析の用途などでマスターに負荷をかけずに処理を行いたいときにも用いることができる
  • 一般的にリードレプリカは非同期のレプリケーションであるため、マスターとリードレプリカの間には若干のラグが存在することに注意する。

注意

  • リードレプリカは冗長構成の目的のためのものではないので、データベースの耐久性を高めたい際には、リードレプリカではなく、DBのレプリケーションそのものを考える。もちろん、リードレプリカとDBレプリケーションを併用することも可能である。
  • 一般的にリードレプリカは非同期のレプリケーションであるため、マスターとリードレプリカの間には若干のラグが存在することに注意する。

寄贈したアーキテクト

Ninja of Three

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox