view index.html @ 0:45e75b5a48db default tip

commit
author Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
date Mon, 27 Sep 2010 00:05:23 +0900
parents
children
line wrap: on
line source

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Cassandraを利用したCMSのPCクラスタを利用したスケーラビリティの検証</title>
<!-- metadata -->
<meta name="generator" content="S5" />
<meta name="version" content="S5 1.1" />
<meta name="presdate" content="20100807" />
<meta name="author" content="ShoshiTAMAKI" />
<meta name="company" content="University of Ryukyus" />
<meta http-equiv="ContentType : text/html; charset=UTF-8"/>
<!-- configuration parameters -->
<meta name="defaultView" content="slideshow" />
<meta name="controlVis" content="hidden" />
<!-- style sheet links -->
<link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
<link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
<link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
<link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
<!-- embedded styles -->
<style type="text/css" media="all">
.imgcon {width: 525px; margin: 0 auto; padding: 0; text-align: center;}
#anim {width: 270px; height: 320px; position: relative; margin-top: 0.5em;}
#anim img {position: absolute; top: 42px; left: 24px;}
img#me01 {top: 0; left: 0;}
img#me02 {left: 23px;}
img#me04 {top: 44px;}
img#me05 {top: 43px;left: 36px;}
</style>
<!-- S5 JS -->
<script src="ui/default/slides.js" type="text/javascript"></script>
</head>
<body>

<div class="layout">
<div id="controls"><!-- DO NOT EDIT --></div>
<div id="currentSlide"><!-- DO NOT EDIT --></div>
<div id="header"></div>
<div id="footer">
<h1>Cassandraを利用したCMSのPCクラスタを用いたスケーラビリティの検証</h1>
<h2>shizuku.cr.ie.u-ryukyu.ac.jp</h2>
</div>

</div>
<div class="presentation">

<div class="slide">
<h1>Cassandraを利用したCMSのPCクラスタを用いたスケーラビリティの検証</h1>
<h3>Shoshi TAMAKI , Shinji KONO</h3>
<h4><a href="http://www.cr.ie.u-ryukyu.ac.jp/">University of Ryukyus</a></h4>
</div>

<div class="slide">
<h1>概要</h1>
<p>Cassandraという分散Key-Value Storeがある.Cassandraを用いることにより複数のサーバーでデータを分散させて管理することができる.<br/>本研究では,スケーラビリティの高いCMSの開発をするため,PCクラスタを用いた検証環境を構築し,Cassandraのスケーラビリティの検証とMySQLとの比較を行った.<br/><br/>その結果,クラスタを用いたスケーラビリティの検証方法や,Cassandraの特徴や性能を発揮できる条件、他のデータベースとの違いを発見することができた.</p>
</div>

<!-- おさらい -->

<div class="slide">
<h1>Cassandraとは?</h1>
<ul>
<li>分散KeyValue Storeデータベースのひとつ</li>
<li>FaceBookが自社のために使うデータベースとして開発し,2008年にオープンソースになる.</li>
<li>現在,Apacheのトップレベルプロジェクトで,盛んにアップデートが行われている.</li>
<li><span style="color:red">ConsistencyLevel</span>というパラメータがあり,データの整合性とレイテンシを調整することができる.</li>
<li><span style="color:red">Stage based Event Driven Architecture</span>というスレッドプールを複数用意して利用する形のマルチスレッドを採用しており特徴として,並列に負荷をかけると性能を発揮する.</li>
</ul>
</div>

<div class="slide">
<h1>Cassandraを利用したアプリケーション</h1>
<ul>
<li style="color: red;">Twissandra</li>
<ul>
	<li>TwitterのようなミニブログをCassandraで実装</li>
	<li>Cassandra公式サイトで紹介されている</li>
</ul>
<li style="color: red;">YukiWiki on Cassandra</li>
<ul>
	<li>Cassandra上で動作するCMSのサンプルを作成するためにYukiWikiを改造した.</li>
	<li>データ構造がTIEHASHを使用しているため,容易に移植することができた.</li>
</ul>
<li style="color: red;">WordPress</li>
<ul>
	<li>YukiWikiと同じようにCassandraに移植を試みたCMS.</li>
	<li>コード全体にSQL文が直に埋め込まれていたため移植が困難.</li>
</ul>
</ul>
</div>

<div class="slide">
<h1>前回の実験</h1>
<!-- サーバーのスペック等を説明しないといけない -->
<p>MySQLとCassandraをシンプルな方法でベンチマークを取った</p>
<p>1台のクライアントとサーバーで10000回のリクエストに要する時間を測定する</p>
<small>
<table width="70%" border="1" align="center">
<tr>
	<th></th>
	<th>Read</th>
	<th>Write</th>
</tr>
<tr>
	<td>MySQL 5.1.46</td>
	<td>9 seconds</td>
	<td>6 seconds</td>
</tr>
<tr>
	<td>Cassandra 0.6.2</td>
	<td>42 seconds</td>
	<td>411 seconds</td>
</tr>
</table>
</small>
<ul>
	<li>シンプルなベンチマークでは良い結果を得られなかった</li>
	<li>SEDAの性能を活かすためには並列に負荷を掛ける必要がある</li>
</ul>
<p>ベンチマークの方法を変える必要がある.</p>
</div>

<div class="slide">
<h1>今回の実験</h1>
<div align="center">
	<img width="400px" src="./pics/benchmark.png"/>
</div>
<small>
<ul>
<li>Torqueを利用して,任意台数のクラスタ(クライアント)に同時にスクリプトを実行させる</li>
<li>スクリプトは,ある時間になると一斉に目的のサーバーに10000回のアクセスを開始する</li>
<li>クラスタの台数を変動させCassandraとMySQLサーバーに負荷をかける.</li>
<li>複数台のクラスタが処理に要した時間の平均をグラフ化し比較する.</li>
</ul>
</small>
</div>

<div class="slide">
<h1>今回の実験</h1>
<div align="center">
	<img src="./pics/how_to_benchmark.png"/>
</div>
</div>

<div class="slide">
<h1>実験環境</h1>
<p>ベンチマークを取るために構築した環境</p>
<table align="center" border="1">
<tr>
	<th></th>
	<th>クラスタ</th>
	<th>MacMini</th>
	<th>Core i7</th>
</tr>
<tr>
	<th>CPU</th>
	<td>Core Duo 2G (1)</td>
	<td>Core 2 Duo 2.53G (2)</td>
	<td>Core i7 3.0G (4)</td>
</tr>
<tr>
	<th>Memory</th>
	<td>1GB</td>
	<td>4GB</td>
	<td>14GB</td>
</tr>
<tr>
	<th>OS</th>
	<td>CentOS 5</td>
	<td>OSX 10.6</td>
	<td>CentOS 5</td>
</tr>
</table>
<p>このうちクラスタは80台用意されている.</p>
<p>()内はコア数で,Core i7のみ4コア8スレッドである.</p>
</div>

<div class="slide">
<h1>実験環境</h1>
<ul>
<li>Cassandra 0.6.3</li>
<li>MySQL 5.0</li>
<li>Torque (クラスタリソース管理ツール)</li>
<li>特定の1台のサーバーに負荷をかけるスクリプト</li>
</ul>
<p>MySQLとの比較のため,MySQLにはCassandraと似たテーブルを定義した.</p>
<pre>
CREATE TABLE tbl_benchmark(name VARCHAR(100) UNIQUE,<br/>value VARCHAR(100),timeuuid long)
</pre>
</div>

<div class="slide">
<h1>MacMiniを使用したベンチマーク</h1>
<table align="center" border="0">
<tr>
	<td><img width="500px" src="./pics/macmini_read.png"/></td>
	<td><img width="500px" src="./pics/macmini_write.png"/></td>
</tr>
</table>
<small>
<ul>
<li>CassandraのほうがMySQLより遅いが,平均時間の増加度は似たように推移している.</li>
<li>MySQLは急激に平均時間が上昇しているが,Cassandraは緩やかに上昇している.</li>
</ul>
</small>
</div>

<div class="slide">
<h1>MacMiniを使用したベンチマーク</h1>
<p>考察</p>
<ul>
<li>MacMiniはコア数が2のサーバーである,そのためSEDAの性能を発揮出来ていない</li>
<li>コア数が少ないサーバーでは,MySQLと似たような平均時間の上昇の仕方をする</li>
<li>WriteでMySQLの命令にREPLACEを使用したため,Cassandraより遥かに遅い結果になっていると考えられる.</li>
<li>REPLACEを利用したのは,Cassandraの仕様にMySQLを合わせるためである.</li>
</ul>
</div>

<div class="slide">
<h1>Core i7を使用したベンチマーク</h1>
<table align="center" border="0">
<tr>
	<td><img width="500px" src="./pics/corei7_read.png"/></td>
	<td><img width="500px" src="./pics/corei7_write.png"/></td>
</tr>
</table>
<small>
<ul>
<li>Cassandraのほうが平均時間が緩やかに上昇しているため,70台付近でMySQLを上回る性能がでている.</li>
<li>READと同様にCassandraの方が緩やかに上昇している.そのため,40台付近でMySQLを上回る性能がでている.</li>
</ul>
</small>
</div>

<div class="slide">
<h1>Core i7を使用したベンチマーク</h1>
<p>考察</p>
<ul>
<li>Core i7はコア数が4、スレッド数が8のサーバーであり,SEDAの性能を活かすことが出来ている結果が得られた.</li>
<li>コア数が多いサーバーでは,MySQLより平均時間の上昇度が少ない,これはSEDAの特徴であると考えられる.</li>
<li>この実験から,コア数の多いサーバーを利用し,クライアントの台数を増加させると性能を発揮することができることが分かった.</li>
</ul>
</div>

<div class="slide">
<h1>MacMini Clusterを使用したベンチマーク</h1>
<table align="center" border="0">
<tr>
	<td><img width="500px" src="./pics/cluster_read.png"/></td>
	<td><img width="500px" src="./pics/cluster_write.png"/></td>
</tr>
</table>
<small>
<ul>
<li>1台のときは,両方に差は無く,数を増やすとクラスタのほうが遅くなっている.</li>
<li>READと同様に,台数を増やしてもCassandra1台を上回る性能は出ていない.</li>
</ul>
</small>
</div>

<div class="slide">
<h1>MacMini Clusterを使用したベンチマーク</h1>
<p>考察</p>
<ul>
<li>台数をただ単に増やし,クライアントの接続先を分散させるだけでは良い結果は得られなかった.</li>
<li>台数を増やしただけでは,性能は1台を超えることはできない.</li>
<li>台数を増やすだけではなく,アプリケーションが使用するデータにも工夫が必要である.</li>
</ul>
</div>

<div class="slide">
<h1>ベンチマークのまとめ</h1>
<small>
<ul>
<li>単純なベンチマーク(クライアントが1台)の場合,Cassandraは遅い.</li>
<li>クライアントが複数いるときに性能を発揮する.</li>
<li>コア数の少ないサーバーでは,性能を発揮することはできず,MySQLと同じような推移の仕方をする.</li>
<li>コア数の多いサーバーでは,MySQLより平均時間の増加度が少ない.</li>
<li>サーバーの台数を増やすだけでは1台の性能を超えることはできなく,データにも工夫が必要である.</li>
<li>Cassandraの性能を活かすことのできる,条件はコア数の多いサーバーでかつ読み書きが頻繁に行われるアプリケーションであるということが分かった.</li>
</ul>
</small>
<p>Cassandraの特徴・性能を検証できた,ではどのようにシステムを開発すればスケールするのか?</p>
</div>

<div class="slide">
<!-- なぜCMSを開発するのか?-->
<h1>スケーラビリティのあるCMSの開発</h1>
<p>クラスタを用いたベンチマークにより, Cassandraの性能とスケーラビリティの検証方法を確認することができた.
<br/>これを踏まえた上でCassandraを利用したスケーラビリティのあるシステムを開発する.</p>
<ul>
	<li>スケーラビリティがあるということは?</li>
	<li>負荷がかかっても遅くならない</li>
	<li>サーバーの台数を増やすだけで性能を維持できる</li>
</ul>
<p>スケーラビリティの高いCMSを開発するためにはそれに合わせたスケールするデータ構造が必要</p>
</div>

<div class="slide">
<h1>システムのアーキテクチャ</h1>
<p>CassandraとWebサーバーが直接通信するのではなく, 間にCMSのAPIを提供するサーバーを挟む</p>
<table align="center">
	<tr>
		<td><img src="./pics/arch.png"/></td>
		<td><p>ブラウザに限らない,クライアントを作成することができる(性能を評価するためのクライアントなど)</p></td>
	</tr>
</table>
</div>

<div class="slide">
<h1>システムのアーキテクチャ</h1>
<ul>
	<li>開発言語はJava</li>
	<li>APIを提供するためにCassandraも利用しているRPCである,Thriftを使用する</li>
	<!-- スケールするシステムの上に、スケールしないシステムを作るべきではない? -->
	<li>SEDAを採用するか,しないかは未定</li>
	<li>プロトタイプを作成してその性能を検証しながら開発をすすめる</li>
</ul>
</div>

<div class="slide">
<h1>データ構造</h1>
<p>CMSのデータ構造として木構造を利用することができるが,スケールする必要がある</p>
<ul>
	<li>通常の木構造(破壊的木構造)</li>
	<ul>
		<li>データを書き換えて木を編集する</li>
	</ul>
	<li>非破壊的木構造</li>
	<ul>
		<li>データを書き換えず,コピーして編集する</li>
	</ul>
</ul>
<p>今回は非破壊的木構造を使用して開発を行う</p>
</div>

<div class="slide">
<h1>非破壊的木構造</h1>
<p>編集する木構造の内容を変更せずに, 変更するノードのコピーと変更がないノードで新しく木構造を作る</p>
<div align="center">
<table>
	<tr>
		<td><img src="./pics/hakai_tree.png"/></td>
		<td><img src="./pics/hihakai_tree.png"/></td>
	</tr>
</table>
</div>
</div>

<div class="slide">
<h1>非破壊的木構造</h1>
<ul>
	<li>利点</li>
	<ul>
		<li>ロックを必要としない</li>
		<li>複製を自由に作成することができる(変更を伝搬する必要はなく,複製先が監視すればよい)</li>
	</ul>
	<li>欠点</li>
	<ul>
		<li>次々に複製を作成するため,メモリ使用量が多い</li>
		<li>編集するための計算量が多い(編集対象のノードまでのパスの長さまで複製するため)</li>
	</ul>
</ul>
<p>ロックを必要としない・複製を自由に作成できるという利点からスケールするのではないかと考えられる</p>
<p>スケーラビリティを検証する
</div>

<div class="slide">
<h1>まとめ</h1>
<ul>
	<li>Cassandraの性能を活かすことのできる,条件はコア数の多いサーバーでかつ読み書きが頻繁に行われるアプリケーションである.</li>
	<li>PCクラスタとTorqueを用いてスケーラビリティを検証することができる.</li>
	<li>検証環境を利用してスケーラビリティの高いCMSを作成する.</li>
	<li>スケーラビリティの高いシステムを開発するためには,スケールするデータ構造が必要である.</li>
	<li>スケールすると考えられる非破壊的木構造を利用する.</li>
</ul>
</div>

<div class="slide">
<h1>今後の課題</h1>
<ul>
	<li>引き続きCassandraがスケールする条件の検証</li>
	<li>CMSのさらに詳しい設計</li>
	<li>非破壊的木構造を用いたプロトタイプの作成・検証</li>
</ul>
</div>

<div class="slide">
<h2>ご清聴ありがとうございました</h2>
</div>

</div>
</body>
</html>