Cassandraを利用したCMSのPCクラスタを用いたスケーラビリティの検証
Shoshi TAMAKI , Shinji KONO
概要
Cassandraという分散Key-Value Storeがある.Cassandraを用いることにより複数のサーバーでデータを分散させて管理することができる.
本研究では,スケーラビリティの高いCMSの開発をするため,PCクラスタを用いた検証環境を構築し,Cassandraのスケーラビリティの検証とMySQLとの比較を行った.
その結果,クラスタを用いたスケーラビリティの検証方法や,Cassandraの特徴や性能を発揮できる条件、他のデータベースとの違いを発見することができた.
Cassandraとは?
- 分散KeyValue Storeデータベースのひとつ
- FaceBookが自社のために使うデータベースとして開発し,2008年にオープンソースになる.
- 現在,Apacheのトップレベルプロジェクトで,盛んにアップデートが行われている.
- ConsistencyLevelというパラメータがあり,データの整合性とレイテンシを調整することができる.
- Stage based Event Driven Architectureというスレッドプールを複数用意して利用する形のマルチスレッドを採用しており特徴として,並列に負荷をかけると性能を発揮する.
Cassandraを利用したアプリケーション
- Twissandra
- TwitterのようなミニブログをCassandraで実装
- Cassandra公式サイトで紹介されている
- YukiWiki on Cassandra
- Cassandra上で動作するCMSのサンプルを作成するためにYukiWikiを改造した.
- データ構造がTIEHASHを使用しているため,容易に移植することができた.
- WordPress
- YukiWikiと同じようにCassandraに移植を試みたCMS.
- コード全体にSQL文が直に埋め込まれていたため移植が困難.
前回の実験
MySQLとCassandraをシンプルな方法でベンチマークを取った
1台のクライアントとサーバーで10000回のリクエストに要する時間を測定する
|
Read |
Write |
MySQL 5.1.46 |
9 seconds |
6 seconds |
Cassandra 0.6.2 |
42 seconds |
411 seconds |
- シンプルなベンチマークでは良い結果を得られなかった
- SEDAの性能を活かすためには並列に負荷を掛ける必要がある
ベンチマークの方法を変える必要がある.
今回の実験
- Torqueを利用して,任意台数のクラスタ(クライアント)に同時にスクリプトを実行させる
- スクリプトは,ある時間になると一斉に目的のサーバーに10000回のアクセスを開始する
- クラスタの台数を変動させCassandraとMySQLサーバーに負荷をかける.
- 複数台のクラスタが処理に要した時間の平均をグラフ化し比較する.
実験環境
ベンチマークを取るために構築した環境
|
クラスタ |
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 0.6.3
- MySQL 5.0
- Torque (クラスタリソース管理ツール)
- 特定の1台のサーバーに負荷をかけるスクリプト
MySQLとの比較のため,MySQLにはCassandraと似たテーブルを定義した.
CREATE TABLE tbl_benchmark(name VARCHAR(100) UNIQUE,
value VARCHAR(100),timeuuid long)
MacMiniを使用したベンチマーク
- CassandraのほうがMySQLより遅いが,平均時間の増加度は似たように推移している.
- MySQLは急激に平均時間が上昇しているが,Cassandraは緩やかに上昇している.
MacMiniを使用したベンチマーク
考察
- MacMiniはコア数が2のサーバーである,そのためSEDAの性能を発揮出来ていない
- コア数が少ないサーバーでは,MySQLと似たような平均時間の上昇の仕方をする
- WriteでMySQLの命令にREPLACEを使用したため,Cassandraより遥かに遅い結果になっていると考えられる.
- REPLACEを利用したのは,Cassandraの仕様にMySQLを合わせるためである.
Core i7を使用したベンチマーク
- Cassandraのほうが平均時間が緩やかに上昇しているため,70台付近でMySQLを上回る性能がでている.
- READと同様にCassandraの方が緩やかに上昇している.そのため,40台付近でMySQLを上回る性能がでている.
Core i7を使用したベンチマーク
考察
- Core i7はコア数が4、スレッド数が8のサーバーであり,SEDAの性能を活かすことが出来ている結果が得られた.
- コア数が多いサーバーでは,MySQLより平均時間の上昇度が少ない,これはSEDAの特徴であると考えられる.
- この実験から,コア数の多いサーバーを利用し,クライアントの台数を増加させると性能を発揮することができることが分かった.
MacMini Clusterを使用したベンチマーク
- 1台のときは,両方に差は無く,数を増やすとクラスタのほうが遅くなっている.
- READと同様に,台数を増やしてもCassandra1台を上回る性能は出ていない.
MacMini Clusterを使用したベンチマーク
考察
- 台数をただ単に増やし,クライアントの接続先を分散させるだけでは良い結果は得られなかった.
- 台数を増やしただけでは,性能は1台を超えることはできない.
- 台数を増やすだけではなく,アプリケーションが使用するデータにも工夫が必要である.
ベンチマークのまとめ
- 単純なベンチマーク(クライアントが1台)の場合,Cassandraは遅い.
- クライアントが複数いるときに性能を発揮する.
- コア数の少ないサーバーでは,性能を発揮することはできず,MySQLと同じような推移の仕方をする.
- コア数の多いサーバーでは,MySQLより平均時間の増加度が少ない.
- サーバーの台数を増やすだけでは1台の性能を超えることはできなく,データにも工夫が必要である.
- Cassandraの性能を活かすことのできる,条件はコア数の多いサーバーでかつ読み書きが頻繁に行われるアプリケーションであるということが分かった.
Cassandraの特徴・性能を検証できた,ではどのようにシステムを開発すればスケールするのか?
スケーラビリティのあるCMSの開発
クラスタを用いたベンチマークにより, Cassandraの性能とスケーラビリティの検証方法を確認することができた.
これを踏まえた上でCassandraを利用したスケーラビリティのあるシステムを開発する.
- スケーラビリティがあるということは?
- 負荷がかかっても遅くならない
- サーバーの台数を増やすだけで性能を維持できる
スケーラビリティの高いCMSを開発するためにはそれに合わせたスケールするデータ構造が必要
システムのアーキテクチャ
CassandraとWebサーバーが直接通信するのではなく, 間にCMSのAPIを提供するサーバーを挟む
|
ブラウザに限らない,クライアントを作成することができる(性能を評価するためのクライアントなど) |
システムのアーキテクチャ
- 開発言語はJava
- APIを提供するためにCassandraも利用しているRPCである,Thriftを使用する
- SEDAを採用するか,しないかは未定
- プロトタイプを作成してその性能を検証しながら開発をすすめる
データ構造
CMSのデータ構造として木構造を利用することができるが,スケールする必要がある
今回は非破壊的木構造を使用して開発を行う
非破壊的木構造
編集する木構造の内容を変更せずに, 変更するノードのコピーと変更がないノードで新しく木構造を作る
非破壊的木構造
- 利点
- ロックを必要としない
- 複製を自由に作成することができる(変更を伝搬する必要はなく,複製先が監視すればよい)
- 欠点
- 次々に複製を作成するため,メモリ使用量が多い
- 編集するための計算量が多い(編集対象のノードまでのパスの長さまで複製するため)
ロックを必要としない・複製を自由に作成できるという利点からスケールするのではないかと考えられる
スケーラビリティを検証する
まとめ
- Cassandraの性能を活かすことのできる,条件はコア数の多いサーバーでかつ読み書きが頻繁に行われるアプリケーションである.
- PCクラスタとTorqueを用いてスケーラビリティを検証することができる.
- 検証環境を利用してスケーラビリティの高いCMSを作成する.
- スケーラビリティの高いシステムを開発するためには,スケールするデータ構造が必要である.
- スケールすると考えられる非破壊的木構造を利用する.
今後の課題
- 引き続きCassandraがスケールする条件の検証
- CMSのさらに詳しい設計
- 非破壊的木構造を用いたプロトタイプの作成・検証
ご清聴ありがとうございました