クラウドシステムにおいては、従来のリレーショナルDBでは限界があることは、以下の記事でまとめました。
そのため、クラウドシステムではKVS(キー・バリュー・ストア)と呼ばれるデータストアを用いることになります。今日は、KVSの機能要件と、3つの実現方法について、おさらいしたいと思います。
1.クラウドシステムにおけるKVSの機能概要
クラウドの大規模分散システムで使用されるKVSには、3つの機能要件が求められます。
- 多くのサーバーに分散配置されても、登録・参照・更新などで整合性のあるアクセスができること
- KVSが分散して格納されるサーバーが、登録データボリュームが増加した際にサーバーの割り当てを増やして分割できること、またそのようなデータ構造になっていること
- 可用性を維持するために、同一データストアの複製を配置できること、またそのようなデータ構造になっていること
これに対応するため、KVSは①主キーとデータ項目だけの単純なファイル/レコード構造、②スキーマのないファイルシステム、という2つの特性を持っています。また、アクセスパフォーマンスの向上のため、大量PCサーバーにそれぞれメモリキャッシュ(クラウドシステムのほとんどがmemcachedを使用)を割り当て、通常使用されるデータのほとんどをオンメモリ状態にしてデスクヘッドのシークを減らしています。
2.KVSでデータストア情報をクライアント側に配置した場合
KVSでは、同一種類のテーブルが分割され、それぞれのレコードがインデックスによってソートされています。同じテーブル名のデータストアがかなりの数に分かれて分散配置された場合、クライアントからのデータアクセスに対応するためにはどのデータストアにどのレコードがあるのかをどこかで管理する必要があります。
まずは、データストア情報をクライアント側で管理した場合を見てみます。
この場合、データストア情報を全てクライアント側で維持管理するため、かなりの負荷がかかることになります。例えばデータストアの内容に追加や変更があった際には、全てのクライアントに通知・更新する必要があります。中にはデータストア情報の更新が遅れ、クライアントに対して正確なデータストアサーバーの割り当てが出来ず、障害につながる可能性もあります。
特に管理対象サーバーが多いクラウドシステムにおいては、向かない方法だと言えます。
3.KVSでデータストア情報をサーバー側に配置した場合
次に、データストア情報をサーバー側に配置した場合を見てみます。
この時クライアント側は、どのデータストアに必要なデータがあるかがわからないため、代表となるサーバーにアクセスして、そのサーバーが持つデータストア情報を使用して目的のデータストアを探すことになります。
しかしこの方法では、代表となるサーバーにアクセスが集中してしまい、負荷集中による障害が発生する可能性が高くなります。
4.KVSでデータストア情報をデータストアマネージャに配置した場合
最後に、データストア情報を別途サーバー(データストアマネージャ)を立てて管理する方法を見てみます。
データストアマネージャは管理範囲内の全てのテーブルを把握し、また同じテーブルに属する複数の分散データストア情報を把握します。データストアマネージャは基本的にはクライアントの起動時にしか参照されないため、それほど負荷がかかる心配がありません。
データストアの大規模化に対して、最も無理なく対応できる方式と言えます。
参考書籍
クラウド・アーキテクチャの設計と解析―分散システムの基礎から大規模データストアまで | |
清野 克行
秀和システム 2010-08 |