CDP:State Sharingパターン
From AWS-CloudDesignPattern
Revision as of 15:25, 15 April 2012 by KenTamagawa (Talk | contribs)
ステート情報の共有
Contents |
解決したい課題
動的なコンテンツを生成する際に、ユーザ固有の状態を持つステート情報(HTTPセッションの情報)を利用する場合、 アプリケーションサーバにステート情報を持たせてしまうと、複数サーバで負荷分散している場合、サーバの障害や 減によって、ステート情報が消失してしまう場合がある。
クラウドでの解決/パターンの説明
このパターンは、サーバ台数増加時のステート情報引き継ぎと、障害も含めたサーバ台数減少時のステート情報消失を防ぐ際に利用する。 ステート情報を耐久性の高い共有データストア(メモリ/ディスク)に置き、複数サーバからその情報を参照する。 サーバが増加しても、共有データストアを参照するため、ステート情報の引き継ぎも行われる。
実装
AWSには、ElastiCache(インメモリキャッシュ)、SimpleDB(KVS)、DynamoDB(KVS)、RDS(RDBMS)、S3(インターネットストレージ)といった、 幾つかのデータストアのためのサービスが用意されており、ステート情報の性質(要件)により、適したものを選択できる。
- ステート情報を格納するためのデータストア(KVSサービスやRDBMSサービス)を準備する。AWSのサービスを利用する場合、ElastiCache(インメモリキャッシュ)、SimpleDB(KVS)、DynamoDB(KVS)、RDS(RDBMS)、S3(インターネットストレージ)が利用できる。
- このデータストアには、ユーザを特定するID(セッションIDやユーザID)をキーにして、ユーザ情報を値として格納する。
- アプリケーションサーバに、データストアへのアクセス情報を設定する。ステート情報の参照、更新は、すべてデータストアに対しておこなう。
構造
利点
- ステート情報を気にすることなく、Scale Outパターンを利用出来る
注意
- ステート情報へのアクセスが1カ所に集中するため、データストアの性能がボトルネックにならないよう気をつける必要がある。その観点では、DynamoDBなどパフォーマンスがボトルネックにならないKVSを選択するのは理に適っている。