インターネット上のサービスで重要なのはスケーラビリティ、つまり、ユーザのアクセスの増大に対して一定のサービス品質を提供することである。
スケーラブルなサービスを提供するために分散Key-Value store Cassandra が注目されている。 RDBの個々のテーブルも、Key-Value store と見ることができる。
本研究では,特に汎用性のある木構造を扱うインターネットサービスに着目する。Cassandra 上に木構造を取り扱うサービスをスケーラブルに提供するフレームワークを設計し実装する。
1Qでは、Cassandra のPCクラスタを用いたスケーラビリティを実験する環境を構築した。
しかし、1対1の環境ではmySQLの方が性能が良かった。
今回はCassandraが実際にスケールすることを確認した。
その結果を元に、木構造をスケーラブルに取り扱うシステムの設計を行なった。
前回の発表では以下のことについて発表を行った.
シンプルなベンチマークではMySQLにCassandraでは超えられられなかった
課題として,Cassandraがスケールする条件の検証が残った.
3Qの課題としてCassandraのノード数を増やした場合、コア数の多いサーバの場合の検証が必要なこともわかった。
プロタイプ実装でも実験によってスケーラビリティを確認しながら設計/実装を深めていく必要がある。
ベンチマークを取るために構築した環境
クラスタ | MacMini | Core i7 | |
---|---|---|---|
クライアント | サーバ | サーバ | |
CPU | Core Duo 2G (1) | Core 2 Duo 2.53G (2) | Core i7 3.0G (4) |
Memory | 1GB | 4GB | 14GB |
OS | CentOS 5 | OSX 10.6 | CentOS 5 |
このうちクラスタは80台用意されている.
()内はコア数で,Core i7のみ4コア8スレッドである.
Cassandraの特徴・性能を検証できた,ではどのようにシステムを開発すればスケールするのか?
クラスタを用いたベンチマークにより, Cassandraの性能とスケーラビリティの検証方法を確認することができた.
これを踏まえた上でCassandraを利用したスケーラビリティのあるサービスを開発する.
スケーラビリティがあるということは?
[方法1]データの複製を多く用意する
[方法2]データの伝搬にはポーリングを利用する
CassandraとWebサーバーが直接通信するのではなく, 間にサービスのAPIを提供するサーバーを挟む
テストをサービスAPIの段階で行える PHP, Grails, Servlet 等にも対応可能 |
スケールするサービスを開発するためにはスケールするデータ構造を考える必要がある
サービスのデータ構造として木構造を利用したい,しかし,これがスケールする必要がある
今回は非破壊的木構造を使用して開発を行う
編集する木構造の内容を変更せずに, 変更するノードのコピーと変更がないノードで新しく木構造を作る
[方法1]に則ってスケールするためには,複製を作成しやすいデータ構造である必要がある.
破壊の場合は変更を複製全部に通知する必要がある
非破壊の場合は自由に複製を作って良い
[方法2]に則って変更の通知をポーリングでやりやすいデータ構造を選択する必要がある.
破壊的変更の場合はポーリングでは木全体を見る必要がある.なので通知の方が現実的
非破壊の場合は木の先頭を見れば更新されているかどうかがわかる(ポーリングのアクセスの集中を防ぐ工夫は必要)
ロックを必要としない・複製を自由に作成できるという利点からスケールするのではないかと考えられる
これは書くの必要ですか?
これは書くの必要ですか?