# HG changeset patch # User suika6039@shizuku.local # Date 1282547057 -32400 # Node ID 67b20ecbb9468fee7af678dbd69e65fb091410f7 # Parent 5d53f54e7152677ecf081ac7b41bbf8bd59ae344 edit diff -r 5d53f54e7152 -r 67b20ecbb946 shoshi-paper.aux --- a/shoshi-paper.aux Tue Aug 17 16:47:50 2010 +0900 +++ b/shoshi-paper.aux Mon Aug 23 16:04:17 2010 +0900 @@ -7,6 +7,7 @@ \@writefile{toc}{\contentsline {subsection}{\numberline {2.\,3}SEDA}{2}} \newlabel{fig:seda}{{2}{3}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.\,4}Cassandra上でのステージの構成}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.\,5}YukiWiki on Cassandra}{3}} \@writefile{toc}{\contentsline {section}{\numberline {3}実験}{3}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.\,1}実験環境}{3}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.\,2}実験方法}{3}} diff -r 5d53f54e7152 -r 67b20ecbb946 shoshi-paper.dvi Binary file shoshi-paper.dvi has changed diff -r 5d53f54e7152 -r 67b20ecbb946 shoshi-paper.log --- a/shoshi-paper.log Tue Aug 17 16:47:50 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -This is pTeX, Version 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4) (format=platex 2009.10.12) 17 AUG 2010 16:33 -**shoshi-paper.tex -(./shoshi-paper.tex -pLaTeX2e <2006/11/10>+0 (based on LaTeX2e <2003/12/01> patch level 0) -(./compsoft.cls -Document Class: compsoft 2000/11/02 ver 0.10 -(./compsoft.sty -Document Style `compsoft' ascii version <23 Mar 92>. -\@maxsep=\dimen118 -\@dblmaxsep=\dimen119 -\JQ=\dimen120 -\Q=\dimen121 -\@Baseline=\dimen122 -\jspaceskip=\dimen123 -\jmathkanjiskip=\dimen124 -\@mojihaba=\dimen125 -\c@part=\count81 -\c@section=\count82 -\c@subsection=\count83 -\c@subsubsection=\count84 -\c@paragraph=\count85 -\c@subparagraph=\count86 -\@currentmojihaba=\skip41 -\twodigits=\skip42 -\bibbox=\box41 -\@beforecaptionskip=\skip43 -\@aftercaptionskip=\skip44 -\@tempboxb=\box42 -\c@figure=\count87 -\c@table=\count88 -\@floatheight=\dimen126 -\@floatlinecount=\count89 -\@temptitlebox=\box43 -\strokeinterval=\dimen127 -\strokewidth=\dimen128 -\rightstrokewidth=\dimen129 -\boxinterval=\dimen130 -\boxwidth=\dimen131 -\leftboxwidth=\dimen132 -\c@volpageoffset=\count90 -\c@巻数=\count91 -\c@号数=\count92 -\c@年数=\count93 -\c@firstpage=\count94 -\c@lastpage=\count95 -\dimen@@=\dimen133 -\@interlinegap=\skip45 -\@leftcolumnfootnote=\box44 -\@rightcolumnfootnote=\box45 -\adjustbox=\box46 -\adjustheight=\dimen134 -\adjustlinecount=\count96 -)) -\currentYear=\count97 -\currentKai=\count98 - (./mediabb.sty -Package: mediabb 2006/10/26 v1.9 iNOUE Koich! - (/usr/local/share/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/local/share/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 1999/03/16 v1.13 key=value parser (DPC) -\KV@toks@=\toks15 -) -(/usr/local/share/texmf/tex/latex/graphics/dvipdfmx-contrib-latex/graphics.sty -Package: graphics 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR) - -(/usr/local/share/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 1999/03/16 v1.09 sin cos tan (DPC) -) -(/usr/local/share/texmf-dist/tex/latex/graphics/graphics.cfg -File: graphics.cfg 2005/02/03 v1.3 graphics configuration of teTeX/TeXLive -) -Package graphics Info: Driver file: dvipdfm.def on input line 81. - -(/usr/local/share/texmf-dist/tex/latex/dvipdfm/dvipdfm.def -File: dvipdfm.def 1999/9/6 vx.x Driver-dependant file -)) -\Gin@req@height=\dimen135 -\Gin@req@width=\dimen136 -)) -(./shoshi-paper.aux - -LaTeX Warning: Label `LS86' multiply defined. - - -LaTeX Warning: Label `LS86' multiply defined. - - -LaTeX Warning: Label `LS86' multiply defined. - -) -\openout1 = `shoshi-paper.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 29. -LaTeX Font Info: ... okay on input line 29. -LaTeX Font Info: Font shape `JT1/gt/bx/n' in size <8> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 55. -LaTeX Font Info: Font shape `JY1/gt/bx/n' in size <8> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 55. -LaTeX Font Info: Font shape `JT1/gt/bx/n' in size <17.28> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 55. -LaTeX Font Info: Font shape `JY1/gt/bx/n' in size <17.28> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 55. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <14.4> on input line 55. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <7> on input line 55. -LaTeX Font Info: Font shape `JT1/gt/bx/n' in size <10> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 57. -LaTeX Font Info: Font shape `JY1/gt/bx/n' in size <10> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 57. -LaTeX Font Info: Font shape `JT1/gt/bx/n' in size <9> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 66. -LaTeX Font Info: Font shape `JY1/gt/bx/n' in size <9> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 66. - [1 - - -] -File: ./fig/ConsistentHash.pdf Graphic file (type pdf) - <./fig/ConsistentHash.pdf> -File: ./fig/SEDA.pdf Graphic file (type pdf) - <./fig/SEDA.pdf> - -LaTeX Warning: `h' float specifier changed to `ht'. - -[2] -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <9> on input line 123. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <6> on input line 123. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <5> on input line 123. - [3] -LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <9> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 180. -LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <9> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 180. - - -LaTeX Warning: Reference `tab:bench1' on page 4 undefined on input line 180. - -File: ./fig/serv1_read.pdf Graphic file (type pdf) -<./fig/serv1_read.pdf> -File: ./fig/serv1_write.pdf Graphic file (type pdf) - <./fig/serv1_write.pdf> -File: ./fig/serv2_read.pdf Graphic file (type pdf) - <./fig/serv2_read.pdf> -File: ./fig/serv2_write.pdf Graphic file (type pdf) - -<./fig/serv2_write.pdf> [4] -File: ./fig/cluster_read.pdf Graphic file (type pdf) - <./fig/cluster_read.pdf> -File: ./fig/cluster_write.pdf Graphic file (type pdf) - <./fig/cluster_write.pdf> -[5] -Underfull \hbox (badness 5050) in paragraph at lines 266--267 -[]\OT1/cmr/m/n/8 The Staged Event-Driven Ar-chi-tec-ture for - [] - -[6] (./shoshi-paper.aux) - -LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right o -n input line 271. - - ) -Here is how much of TeX's memory you used: - 809 strings out of 95541 - 9473 string characters out of 1187747 - 69189 words of memory out of 1500000 - 3988 multiletter control sequences out of 10000+50000 - 18606 words of font info for 72 fonts, out of 1200000 for 2000 - 14 hyphenation exceptions out of 8191 - 32i,9n,36p,1329b,663s stack positions out of 5000i,500n,6000p,200000b,5000s - -Output written on shoshi-paper.dvi (6 pages, 31464 bytes). diff -r 5d53f54e7152 -r 67b20ecbb946 shoshi-paper.pdf Binary file shoshi-paper.pdf has changed diff -r 5d53f54e7152 -r 67b20ecbb946 shoshi-paper.tex --- a/shoshi-paper.tex Tue Aug 17 16:47:50 2010 +0900 +++ b/shoshi-paper.tex Mon Aug 23 16:04:17 2010 +0900 @@ -27,20 +27,22 @@ % 再定義は原則として避けること. \begin{document} - % 論文のタイトル -\title{Cassandraを使ったアプリケーションのPCクラスタを使ったスケーラビリティの検証} +\title{Cassandraを使ったCMSのPCクラスタを使ったスケーラビリティの検証} % 著者 % 和文論文の場合, 姓と名の間には半角スペースを入れ, % 複数の著者の間は全角スペースで区切る % \author{玉城 将士 \and 河野 真治 +\shozoku{Shoshi TAMAKI, Shinji KONO}{琉球大学工学部情報工学学科} +{Dept. \ of Information Engineering, Ryukyu University} } + % % 和文アブストラクト -\Jabstract{% +\Jabstract{ 現在, 数ある分散Key-Valueストアの中でもCassandraが注目を集めている. CassandraはConsitency levelの変更が可能であり、スケーラビリテイを 高めるための使い方には工夫が必要である. @@ -48,24 +50,22 @@ る. 特に, CoreDuo などの安価だが非力なマシンの振舞を調べることを行なった. そしてその環境上でスケーラビリティを確認する実験手法に関して考察する. - } % % 英文アブストラクト(大会論文には必要なし) % \Eabstract{} -\shozoku{Shoshi TAMAKI, Shinji KONO}{琉球大学工学部情報工学学科}% -{Dept. \ of Information Engineering, Ryukyu University} + +\maketitle % -\maketitle \section{はじめに} -近年インターネットやスマートフォンなどの普及に伴い, インターネット上のサービスを使用するユーザーが急速に増え続けている. サービスを利用するユーザーが増えると, いままでのシステムでは膨大なアクセスに対応できなくなり, サービスの品質を維持することができなる. -品質を維持するためには, 使用するサーバー性能の向上を測ればよい. しかし, 性能の良いサーバーを揃えるには膨大なコストを必要とし, これをスケールアップと呼ぶ. -そこで, 安価なサーバーを複数用意し, 連携させることによって性能を向上させる方法があり, これをスケールアウトと呼ぶ. この方法では, 従来使用してきたソフトウェアを複数のサーバーに移動するだけではうまく動作しない. -複数のサーバーを強調させるのは難しく, データの整合性や通信速度, 負荷分散など様々な考慮をしなければならないためである. -Cassandraは複数のサーバーで動作を想定した分散データベースである. -本研究では, 実際に分散させることによって高価なサーバーを超えることが出来る性能を出すことが出来るのか, また, どの様にCassandra上で動くソフトウェアを開発することによって性能を発揮することが出来るのかを, 90台のPCクラスタ上でベンチマークを取り検証する. +インターネットやスマートフォンなどの普及に伴い,インターネット上のサービスを使用するユーザーが急速に増え続けている.サービスを利用するユーザーが増えると,いままでのシステムでは膨大なアクセスに対応できなくなり,サービスの品質を維持することができなる. +品質を維持するためには,使用するサーバー性能の向上を測ればよい.しかし,性能の良いサーバーを揃えるには膨大なコストを必要とし,これをスケールアップと呼ぶ. +そこで,安価なサーバーを複数用意し,連携させることによって性能を向上させる方法があり,これをスケールアウトと呼ぶ.この方法では,従来使用してきたソフトウェアを複数のサーバーに移動するだけではうまく動作しない. +複数のサーバーを強調させるのは難しく,データの整合性や通信速度,負荷分散など様々な考慮をしなければならないためである. +Cassandraは複数のサーバーで動作を想定した分散データベースである. +本研究では,実際に分散させることによって高価なサーバーを超えることが出来る性能を出すことが出来るのか,また,どの様にCassandra上で動くソフトウェアを開発することによって性能を発揮することが出来るのかを,90台のPCクラスタ上でベンチマークを取り検証する. \section{分散データベース Cassandra} Cassandraは, FaceBookが自社のために開発した分散Key-Valueストアデータベースである. 2008年にオープンソースとして公開され, 2009年にApache Incubatorのプロジェクトとなった. 2010年にはApacheのトップレベルプロジェクトとなり, 現在でも頻繁にバージョンアップが行われている. \subsection{ConsictencyLevel} @@ -108,7 +108,7 @@ Cassandraでは, 右回りに回ったとき担当するノード数を複数にする場合, ReplicationFactorで調整することが出来る. \begin{figure}[h] \begin{center} -\includegraphics{. /fig/ConsistentHash. pdf} +\includegraphics{./fig/ConsistentHash.pdf} \end{center} \caption{コンシステントハッシュ} \label{fig:chash} @@ -120,7 +120,7 @@ このアーキテクチャはマルチスレッドベースなためマルチコアなPCと多数のタスクがある状況で性能を発揮することができる. しかし, あまりにもスレッドプールやタスクが多すぎると, コンテキストに切り替えに時間がかかり性能は低下する. そのため, Cassandraでは最低4コアを搭載した計算機で動作させることを推奨している. \begin{figure}[h] \begin{center} -\includegraphics{. /fig/SEDA. pdf} +\includegraphics{./fig/SEDA.pdf} \end{center} \caption{SEDA} \label{fig:seda} @@ -138,6 +138,9 @@ \item{MIGRATION STAGE}\\ \end{itemize} 実際にはもっと多数のステージが存在し, この他にもクライアントの接続を待つスレッドプールやMemTableのFlushを行うスレッドプールがあり, 全部で40個程度のスレッドが動作している. +\subsection{YukiWiki on Cassandra} +今回の検証のため, CMSのであるWikiクローンのYukiWikiをCassandra上で動作するように改造した.YukiWikiは文書の管理にTIEHASHを使用しており,Cassandra用のTIEHASHを作成することで簡単に実装することが出来る.\\ +Cassandra上で動作するため,このWikiで複数のサーバー上でデータを共有することが出来るようになった. \section{実験} 本研究では, Cassandraのスケーラビリティの検証の為にベンチマークテストを行う. 実験環境は以下のとおりである. \subsection{実験環境} @@ -156,7 +159,7 @@ \end{itemize} \item{実験用サーバー2} \begin{itemize} -\item{CPU : Core i7 950 @3. 0GHz} +\item{CPU : Core i7 950 @3.0GHz} \item{Mem : 16GB} \item{O S : CentOS 5} \end{itemize} @@ -166,9 +169,9 @@ \item{クライアント} クラスタ管理ツールのTorqueを使用し, 使用するノード数を指定してクラスタにジョブを投げてPHPスクリプトを実行させる. このPHPスクリプトはCassandraとMySQLに10000回リクエストを送信するスクリプトである. \item{Cassandra} -Cassandra 0. 6. 3を使用した. +Cassandra 0.6.3を使用した. \item{MySQL} -MySQL 5. 5を使用した. Cassandraと似たデータ構造を持たせるために表\ref{tab:mysql_tbl_def}のような構造でテーブルを作成した. +MySQL 5.5を使用した. Cassandraと似たデータ構造を持たせるために表\ref{tab:mysql_tbl_def}のような構造でテーブルを作成した. \begin{table}[h] \caption{テーブルの定義} \label{tab:mysql_tbl_def} @@ -193,8 +196,8 @@ \begin{center} \begin{tabular}{|c|c|c|} \hline & Cassandra & MySQL \\ \hline -サーバー1 & 13. 72s & 5. 94s \\ \hline -サーバー2 & 12. 56s & 3. 99s \\ \hline +サーバー1 & 13.72s & 5.94s \\ \hline +サーバー2 & 12.56s & 3.99s \\ \hline \end{tabular} \end{center} \vspace{5mm} @@ -202,8 +205,8 @@ \begin{center} \begin{tabular}{|c|c|c|} \hline & Cassandra & MySQL \\ \hline -サーバー1 & 11. 75s & 5. 7s \\ \hline -サーバー2 & 9. 62s & 5. 3s \\ \hline +サーバー1 & 11.75s & 5.7s \\ \hline +サーバー2 & 9.62s & 5.3s \\ \hline \end{tabular} \end{center} \end{table} @@ -214,14 +217,14 @@ Readは両方とも, 同じような推移の仕方をしているが, Cassandraの方が遅い. しかし, WriteはCassandraの方が断然速く動作している. この実験では, Cassandraの動作を基準に考えたため書き込みのコマンドにREPLACEを使用した. REPLACEは置き換えるようなコマンドである. そのため, INSERTに比べて多少遅くなる. それがこのグラフに出ているのではないかと考えられる. SEDAは複数のスレッドで動作しているためコア数が少ないサーバーでは性能が出にくいことがわかる. \begin{figure}[h] \begin{center} - \scalebox{0. 33}{\includegraphics{. /fig/serv1_read. pdf}} + \scalebox{0.33}{\includegraphics{./fig/serv1_read.pdf}} \end{center} \caption{サーバー1上でのベンチマーク(Read)} \label{fig:bench2-R} \end{figure} \begin{figure}[h] \begin{center} - \scalebox{0. 33}{\includegraphics{. /fig/serv1_write. pdf}} + \scalebox{0.33}{\includegraphics{./fig/serv1_write.pdf}} \end{center} \caption{サーバー1上でのベンチマーク(Write)} \label{fig:bench2-W} @@ -234,14 +237,14 @@ つまり, Cassandraは負荷が高いときにMySQLを超える性能を出すことが出来る. 負荷がかかっても性能の劣化が少ないことを考えると考えると遅延をあまり考慮しなくても済むのではないだろうか. \begin{figure}[h] \begin{center} - \scalebox{0. 33}{\includegraphics{. /fig/serv2_read. pdf}} + \scalebox{0.33}{\includegraphics{./fig/serv2_read.pdf}} \end{center} \caption{サーバー2上でのベンチマーク(Read)} \label{fig:bench3-R} \end{figure} \begin{figure}[h] \begin{center} - \scalebox{0. 33}{\includegraphics{. /fig/serv2_write. pdf}} + \scalebox{0.33}{\includegraphics{./fig/serv2_write.pdf}} \end{center} \caption{サーバー2上でのベンチマーク(Write)} \label{fig:bench3-W} @@ -252,28 +255,28 @@ Read/Writeともに, 今回の場合は分散を行わなかったほうが性能を引き出せてることが分る. これは, 実験に使用したデータがRead/Write共に1つだけで, 結局は同じノードにリクエストが転送されている. そのため, リクエストは1台のノードに集中する. よって, 性能が出ないのではないかと考えられる. Cassandraをただ増やすだけでは性能は得ることが出来ず, データも分散させて実験を行わないといけないことがわかった. \begin{figure}[h] \begin{center} - \scalebox{0. 33}{\includegraphics{. /fig/cluster_read. pdf}} + \scalebox{0.33}{\includegraphics{./fig/cluster_read.pdf}} \end{center} \caption{サーバー1を複数ノードにしたベンチマーク(Read)} \label{fig:bench4-R} \end{figure} \begin{figure}[h] \begin{center} - \scalebox{0. 33}{\includegraphics{. /fig/cluster_write. pdf}} + \scalebox{0.33}{\includegraphics{./fig/cluster_write.pdf}} \end{center} \caption{サーバー1を複数ノードにしたベンチマーク(Write)} \label{fig:bench4-W} \end{figure} \newpage \section{まとめ} -今回の実験で, Cassandraを使用するには従来の使用方法ではいけないということがわかった. Cassandraの性能を発揮するにはRead/Writeが多い環境下でコア数の多いサーバーを使用する必要がある. さらに, 単純にCassandraのノード数を増やしても性能は高くならならず, 逆に遅くなることがある. - -そのため, 格納されるデータもある程度分散させなければならない. 格納されるデータを決めるのにPartitionerというものがあり, 効率よく分散させるためには, アプリケーションが使用するデータの特性に応じてカスタマイズする必要があると考えられる. +今回の実験で, Cassandraを使用するには従来の使用方法ではいけないということがわかった. Cassandraはコア数が少ない場合, ReadはMySQLより遅いがほぼ同し推移の仕方をする. Writeは,コア数が少なくてもクライアントの並列度を高く設定すれば,MySQLに勝つことがある. +コア数が多い場合,Read・Write共に,初めはやはりMySQLの方が動作が早いが,グラフの傾きはMySQLの方が大きくCassandraはかなり緩やかである.特にCassandraのWhiteの性能は高く, MySQLを大きく上回っている. +また, 単純にCassandraのノード数を増やしても性能は高くならない. これは, データも綺麗に分散させてあげないとデータを読み込む際に一定のノードに集中してしまい,他のノードにアクセスを分散しても結局は保持しているノードに聞きに行かないといけないことになるからである. +データもある程度分散させなければならないため,汎用的なHASH関数では性能が発揮できなく, そのアプリケーション専用の関数が必要だと思われる. +格納されるデータを決めるのにPartitionerというものがあり, それを利用することで実装できると思われる. \section{今後の課題} 今後は, Partitionerを拡張し複数のデータをノードに分散させた環境下でベンチマークを行い, その結果をCassandra単体でのベンチマーク結果と比較したいと考えている. 他にも, 沖縄東京間などの離れた地域での分散をCassandraでどの様に行なっていくか実験していきたい. -{\bf 謝辞}\\ -うわあああああああああああああああああああああああああああああああああああああああ % \begin{adjustvboxheight} % needed only when Appendix follows \begin{thebibliography}{99}