annotate shoshi-paper.tex @ 6:b0181f185b51

edit
author suika6039@shizuku.local
date Thu, 26 Aug 2010 12:53:30 +0900
parents 35a8ba98fb5d
children dc7dcabc31b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1 % Sample file for the use of compsoft style file.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 %
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \documentclass[T]{compsoft}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 % Preamble
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 %
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
7 % 「コンピュータソフトウェア」誌に掲載される論文の場合, 次で
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
8 % 巻数, 号数, 開始ページ, 終了ページを指定する.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 %\volNoPp{16}{5}{78}{83}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
11 % ワークショップによる推薦論文の場合, ワークショップ名を指定する.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 % \suisen{ワークショップ名}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
14 % 特集の場合, 特集のタイトルを与える.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 % \tokushu{特集のタイトル}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
17 % 大会論文の場合, \taikai で開催年を指定する. ここで指定した年から
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
18 % 大会の回数は計算される.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 \taikai{2010}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
21 %pdf ここに, 使用するパッケージを列挙する.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \usepackage{mediabb}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \usepackage{graphicx}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 %\usepackage[dvips]{graphics}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
26 % ユーザが定義したマクロなどはここに置く. ただし学会誌のスタイルの
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
27 % 再定義は原則として避けること.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \begin{document}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 % 論文のタイトル
2
suika6039@shizuku.local
parents: 1
diff changeset
31 \title{Cassandraを使ったCMSのPCクラスタを使ったスケーラビリティの検証}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 % 著者
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
34 % 和文論文の場合, 姓と名の間には半角スペースを入れ,
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 % 複数の著者の間は全角スペースで区切る
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 %
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
37 \author{玉城 将士 \and 河野 真治
2
suika6039@shizuku.local
parents: 1
diff changeset
38 \shozoku{Shoshi TAMAKI, Shinji KONO}{琉球大学工学部情報工学学科}
suika6039@shizuku.local
parents: 1
diff changeset
39 {Dept. \ of Information Engineering, Ryukyu University}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 }
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
2
suika6039@shizuku.local
parents: 1
diff changeset
42
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 %
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 % 和文アブストラクト
2
suika6039@shizuku.local
parents: 1
diff changeset
45 \Jabstract{
4
suika6039@shizuku.local
parents: 2
diff changeset
46 数ある分散Key-Valueストアの中でもCassandraが注目を集めている.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 CassandraはConsitency levelの変更が可能であり、スケーラビリテイを
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
48 高めるための使い方には工夫が必要である.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
49 本研究では, Cassandra上で動作するCMSを実装し学科のクラスタ上で動作させ
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
50 る.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
51 特に, CoreDuo などの安価だが非力なマシンの振舞を調べることを行なった.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
52 そしてその環境上でスケーラビリティを確認する実験手法に関して考察する.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 }
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 %
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
55 % 英文アブストラクト(大会論文には必要なし)
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 % \Eabstract{}
2
suika6039@shizuku.local
parents: 1
diff changeset
57
suika6039@shizuku.local
parents: 1
diff changeset
58 \maketitle
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
59
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 %
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 \section{はじめに}
4
suika6039@shizuku.local
parents: 2
diff changeset
63 インターネットやスマートフォンなどの普及に伴い,インターネット上のサービスを使用するユーザーが急速に増え続けている.サービスを利用するユーザーが増えると,いままでのシステムでは膨大なアクセスに対応できなくなり,サービスの品質を維持することができなくなる.
suika6039@shizuku.local
parents: 2
diff changeset
64 %品質を維持するためには,使用するサーバー性能の向上を測ればよい.しかし,性能の良いサーバーを揃えるには膨大なコストを必要とし,これをスケールアップと呼ぶ.
2
suika6039@shizuku.local
parents: 1
diff changeset
65 そこで,安価なサーバーを複数用意し,連携させることによって性能を向上させる方法があり,これをスケールアウトと呼ぶ.この方法では,従来使用してきたソフトウェアを複数のサーバーに移動するだけではうまく動作しない.
suika6039@shizuku.local
parents: 1
diff changeset
66 複数のサーバーを強調させるのは難しく,データの整合性や通信速度,負荷分散など様々な考慮をしなければならないためである.
suika6039@shizuku.local
parents: 1
diff changeset
67 Cassandraは複数のサーバーで動作を想定した分散データベースである.
4
suika6039@shizuku.local
parents: 2
diff changeset
68 本研究では,実際に分散させることによって高価なサーバーを超えることが出来る性能を出すことが出来るのか,また,どの様にCassandra上で動くソフトウェアを開発することによって性能を発揮することが出来るのかを,90台のPCクラスタ上でベンチマークを取り検証した,その結果,コア数の多いサーバー上で高い性能を得ることが出来た.
suika6039@shizuku.local
parents: 2
diff changeset
69 \section{先行研究}
suika6039@shizuku.local
parents: 2
diff changeset
70 \subsection{Yahoo! Cloud Serving Benchmark}
suika6039@shizuku.local
parents: 2
diff changeset
71 数のデータベース(Sherpa,BitTable,Azure)などがあるが, 実際にはどのデータベースを使用すればよいか確かではない. この研究では, 異なるデータベースの性能を比較する共通なフレームワークを開発する.\cite{YCSB}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 \section{分散データベース Cassandra}
6
suika6039@shizuku.local
parents: 5
diff changeset
73 Cassandraは, FaceBookが自社のために開発した分散Key-Valueストアデータベースであり,DynamoとBigTable\cite{BIGTABLE}を合わせた特徴を持っている. 2008年にオープンソースとして公開され, 2009年にApache Incubatorのプロジェクトとなった.
5
suika6039@shizuku.local
parents: 4 3
diff changeset
74 2010年にはApacheのトップレベルプロジェクトとなり, 現在でも頻繁にバージョンアップが行われている.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 \subsection{ConsictencyLevel}
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
76 Cassandraには, ConsistencyLevelが用意されている. これは, 整合性と応答速度どちらを取るか選ぶためのパラメータであり, リクエストごとに設定することが出来る.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
77 また, ReadとWriteでConsistencyLevelの意味は異なる.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
78 このConsistencyLevelを適用するノードの台数をReplicationFactorといい, Cassandraの設定ファイルで設定することが出来る.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 {\gt Read}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 \begin{enumerate}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 \item{ConsistencyLevel::ZERO}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
82 サポートされていない.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 \item{ConsistencyLevel::ANY}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
84 サポートされていない.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 \item{ConsistencyLevel::ONE}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
86 一番最初に返答したノードの値を返すが値が最新のものであるかは保証できない. 整合性の調査は常に非同期で行われており, 再度読み出しを行うときに結果が変わっている可能性がある.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 \item{ConsistencyLevel::QUORUM}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
88 すべてのノードにリクエストを送信し, 取得した値のタイムスタンプを比較し, 最も多数のノードが返した値のうちで最新のタイムスタンプを持つ値を返す.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 \item{ConsistencyLevel::ALL}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
90 すべてのノードにリクエストを送信し, もっともタイムスタンプの新しいノードの値を返す.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 \end{enumerate}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 {\gt Write}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 \begin{enumerate}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 \item{ConsistencyLevel::ZERO}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
95 何も保証しない, 書き込みは非同期的に行われる.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 \item{ConsistencyLevel::ANY}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
97 別のどこか他のノードに書き込まれることを保証する.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 \item{ConsistencyLevel::ONE}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
99 最低1つのノードのログとメモリテーブルに書き込まれていることを保証する.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 \item{ConsistencyLevel::QUORUM}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
101 (ReplicationFactor/2) + 1のノードに書き込むことに書き込みを終えてからクライアントにレスポンスを返す.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 \item{ConsistencyLevel::ALL}\\
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
103 ReplicationFactorのノード数に書き込みを終えてからレスポンスを返す.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 \end{enumerate}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 \subsection{コンシステント・ハッシュ}
4
suika6039@shizuku.local
parents: 2
diff changeset
106 Cassandraは複数のノードにデータを分散して格納する. その為に使用されているのがコンシステント・ハッシュである. 普通, n台で構成されたノードにデータを分散する場合, hash(key) mod nで分散させる. この場合だと, ノードが追加・削除された場合すべてのデータの位置を再計算する必要があり面倒である.
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
107
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
108 そこで, 図\ref{fig:chash}のようなものを考える. 図\ref{fig:chash}はハッシュ関数が取りうる値を範囲としたリングである. このリング上に構成するノードを配置していく. この図の場合, アルファベットがノードで数字がデータ, 矢印が担当するノードである.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
109 次に, ハッシュ関数により計算された値をリングの上に配置する. このとき, リングを右回りに周り一番最初にあたったノードがデータを担当するノードとする.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
110 こうすると, ノードが追加・削除された場合に, 全体を再計算する必要はなく, 担当するノードがいなくなったデータのみを再計算し, 次の担当するノードに移せばよい.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
111 Cassandraでは, 右回りに回ったとき担当するノード数を複数にする場合, ReplicationFactorで調整することが出来る.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
114 \includegraphics{./fig/ConsistentHash.pdf}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 \end{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 \caption{コンシステントハッシュ}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 \label{fig:chash}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 \subsection{SEDA}
6
suika6039@shizuku.local
parents: 5
diff changeset
120 SEDA(Staged Event-Driven Architecture)は, Cassandraで使用されているアーキテクチャである\cite{SEDA1}\cite{SEDA2}. 処理を複数のステージに分解しタスクキューとスレッドプールを用意し処理を行う. 処理の様子を図\ref{fig:seda}に示す.
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
121 タスクが各ステージのタスクキューに入ると, スレッドプールにどれかのスレッドがタスクキューの中からタスクを取り出し処理を行う. 処理が終わるとそのタスクを次のステージのタスクキューに入れる.
3
66e2d43ebf89 minor comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
122 このアーキテクチャはマルチスレッドベースなためマルチコアなPCと多数のタスクがある状況で性能を発揮することができる. しかし, あまりにもスレッドプールやタスクが多すぎると, コンテキストに切り替えに時間がかかり性能は低下する.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
125 \includegraphics{./fig/SEDA.pdf}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 \end{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 \caption{SEDA}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 \label{fig:seda}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 \subsection{Cassandra上でのステージの構成}
6
suika6039@shizuku.local
parents: 5
diff changeset
131 Cassandraは主に以下のステージにより構成されており, concurrent::StageManagerを参照すると見つけることが出来る.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 \begin{itemize}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 \item{READ STAGE}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 \item{MUTATION STAGE}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 \item{STREAM STAGE}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 \item{GOSSIP STAGE}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 \item{RESPONSE STAGE}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 \item{AE SERVICE STAGE}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 \item{LOADBALANCE STAGE}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 \item{MIGRATION STAGE}\\
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 \end{itemize}
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
142 実際にはもっと多数のステージが存在し, この他にもクライアントの接続を待つスレッドプールやMemTableのFlushを行うスレッドプールがあり, 全部で40個程度のスレッドが動作している.
2
suika6039@shizuku.local
parents: 1
diff changeset
143 \subsection{YukiWiki on Cassandra}
suika6039@shizuku.local
parents: 1
diff changeset
144 今回の検証のため, CMSのであるWikiクローンのYukiWikiをCassandra上で動作するように改造した.YukiWikiは文書の管理にTIEHASHを使用しており,Cassandra用のTIEHASHを作成することで簡単に実装することが出来る.\\
6
suika6039@shizuku.local
parents: 5
diff changeset
145 Cassandra上で動作するため,このWikiで複数のサーバー上でデータを共有することが出来るようになった.\\
suika6039@shizuku.local
parents: 5
diff changeset
146 ソースコードは以下のURLで参照することが出来る.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 \section{実験}
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
148 本研究では, Cassandraのスケーラビリティの検証の為にベンチマークテストを行う. 実験環境は以下のとおりである.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 \subsection{実験環境}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 \begin{enumerate}
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
151 \item{クラスタ(クライアント)}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 \begin{itemize}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 \item{CPU : Core Duo}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 \item{Mem : 1GB}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 \item{O S : CentOS 5}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 \end{itemize}
4
suika6039@shizuku.local
parents: 2
diff changeset
157 \item{MacMini}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 \begin{itemize}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 \item{CPU : Core2 Duo}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 \item{Mem : 4GB}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 \item{O S : OSX SnowLeopard}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 \end{itemize}
4
suika6039@shizuku.local
parents: 2
diff changeset
163 \item{Core i7}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 \begin{itemize}
2
suika6039@shizuku.local
parents: 1
diff changeset
165 \item{CPU : Core i7 950 @3.0GHz}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 \item{Mem : 16GB}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 \item{O S : CentOS 5}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 \end{itemize}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 \end{enumerate}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 \subsection{実験方法}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 \begin{enumerate}
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
172 \item{クライアント}
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
173 クラスタ管理ツールのTorqueを使用し, 使用するノード数を指定してクラスタにジョブを投げてPHPスクリプトを実行させる. このPHPスクリプトはCassandraとMySQLに10000回リクエストを送信するスクリプトである.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
174 \item{Cassandra}
2
suika6039@shizuku.local
parents: 1
diff changeset
175 Cassandra 0.6.3を使用した.
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
176 \item{MySQL}
2
suika6039@shizuku.local
parents: 1
diff changeset
177 MySQL 5.5を使用した. Cassandraと似たデータ構造を持たせるために表\ref{tab:mysql_tbl_def}のような構造でテーブルを作成した.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 \begin{table}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 \caption{テーブルの定義}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 \label{tab:mysql_tbl_def}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 \begin{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 \begin{tabular}{|c|c|c|} \hline
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 フィールド名 & データタイプ & 備考 \\ \hline
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 NAME & VARCHAR(100) & UNIQUE \\ \hline
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 VALUE & VARCHAR(100) & - \\ \hline
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 TIMEUUID & LONG & - \\ \hline
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 \end{tabular}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 \end{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 \end{table}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 \end{enumerate}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 \newpage
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 \section{実験結果と考察}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 \subsection{単純なベンチマーク}
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
194 はじめに, 単純なベンチマークを行った. 単体のクライアントとサーバーを用意し, CassandraとMySQLの実行時間の比較を行った. 結果を表\ref{tab:bench1}に示す. この時のCassandraのConsistencyLevelはONEである.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
195
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
196 結果を見てみると, MySQLよりCassandraのほうが高速に動作していることが分かる. MyySQLはC++で記述されているがCassandraはJavaであるため, 動作が遅い. よって, 単純な使用方法ではCassandraよりMySQLの方が優れていると言える, 普通の方法ではCassandraの性能を引き出すことは出来ない.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 \begin{table}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 \caption{単純なベンチマークの結果(Read)}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 \begin{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 \begin{tabular}{|c|c|c|} \hline
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 & Cassandra & MySQL \\ \hline
4
suika6039@shizuku.local
parents: 2
diff changeset
202 MacMini& 13.72s & 5.94s \\ \hline
suika6039@shizuku.local
parents: 2
diff changeset
203 Core i7& 12.56s & 3.99s \\ \hline
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 \end{tabular}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 \end{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 \vspace{5mm}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 \caption{単純なベンチマークの結果(Write)}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 \begin{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 \begin{tabular}{|c|c|c|} \hline
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 & Cassandra & MySQL \\ \hline
4
suika6039@shizuku.local
parents: 2
diff changeset
211 MacMini& 11.75s & 5.7s \\ \hline
suika6039@shizuku.local
parents: 2
diff changeset
212 Core i7& 9.62s & 5.3s \\ \hline
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 \end{tabular}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 \end{center}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 \end{table}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 \subsection{コア数の少ないサーバー上でのベンチマーク}
4
suika6039@shizuku.local
parents: 2
diff changeset
217 次に, クライアントを並列化しての実験を行う. ここでは, コア数の少ないMacMiniを用いる. クライアントの並列化はスクリプトを指定した時間に同時起動するようにして実装した.
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
218 実験結果を図\ref{fig:bench2-R}と図\ref{fig:bench2-W}に示す.
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
219
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
220 Readは両方とも, 同じような推移の仕方をしているが, Cassandraの方が遅い. しかし, WriteはCassandraの方が断然速く動作している. この実験では, Cassandraの動作を基準に考えたため書き込みのコマンドにREPLACEを使用した. REPLACEは置き換えるようなコマンドである. そのため, INSERTに比べて多少遅くなる. それがこのグラフに出ているのではないかと考えられる. SEDAは複数のスレッドで動作しているためコア数が少ないサーバーでは性能が出にくいことがわかる.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
223 \scalebox{0.33}{\includegraphics{./fig/serv1_read.pdf}}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 \end{center}
4
suika6039@shizuku.local
parents: 2
diff changeset
225 \caption{MacMini上でのベンチマーク(Read)}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 \label{fig:bench2-R}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
230 \scalebox{0.33}{\includegraphics{./fig/serv1_write.pdf}}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 \end{center}
4
suika6039@shizuku.local
parents: 2
diff changeset
232 \caption{MacMini上でのベンチマーク(Write)}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 \label{fig:bench2-W}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 \subsection{コア数の多いサーバー上でのベンチマーク}
4
suika6039@shizuku.local
parents: 2
diff changeset
236 クライアントを並列化した状態で, コア数の多いCore i7を用いたベンチマークを行う. 実験結果を図\ref{fig:bench3-R}と図\ref{fig:bench3-W}に示す.
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
237
4
suika6039@shizuku.local
parents: 2
diff changeset
238 Read/Write共にMySQLの性能を超えることに成功した. Readにおいてはコア数が少ない場合に超えることが出来なかったが, 並列度が70度付近でMySQLを上回る正農がでている.
suika6039@shizuku.local
parents: 2
diff changeset
239 Cassandraの平均時間は並列度が増加しても, MySQLよりは平均時間の上昇は少ない. これは, SEDAの特徴である, 多くのタスクを並列に実行すると性能を発揮することを確認することが出来た.
suika6039@shizuku.local
parents: 2
diff changeset
240 また, SEDAはマルチスレッド前提であるため, コア数が少ないMacMiniでは性能が出ず, コア数の多いCore i7で性能が発揮できるということが分かる.
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
241
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
242 つまり, Cassandraは負荷が高いときにMySQLを超える性能を出すことが出来る. 負荷がかかっても性能の劣化が少ないことを考えると考えると遅延をあまり考慮しなくても済むのではないだろうか.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
245 \scalebox{0.33}{\includegraphics{./fig/serv2_read.pdf}}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 \end{center}
4
suika6039@shizuku.local
parents: 2
diff changeset
247 \caption{Core i7上でのベンチマーク(Read)}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 \label{fig:bench3-R}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
252 \scalebox{0.33}{\includegraphics{./fig/serv2_write.pdf}}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 \end{center}
4
suika6039@shizuku.local
parents: 2
diff changeset
254 \caption{Core i7上でのベンチマーク(Write)}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 \label{fig:bench3-W}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 \subsection{複数ノードで構成したCassadraのベンチマーク}
4
suika6039@shizuku.local
parents: 2
diff changeset
258 最後に分散しなかったCassandraと複数ノードで構成したCassandraの比較を行う. サーバーはMacMiniを5台使用して行った. 実験結果を図\ref{fig:bench4-R}と図\ref{fig:bench4-W}に示す.
suika6039@shizuku.local
parents: 2
diff changeset
259 Read/Writeともに, 今回の場合は分散を行わなかったほうが性能を引き出せてることが分る. これは, 実験に使用したデータがRead/Write共に1つだけで, 結局は同じノードにリクエストが転送されている. そのため, リクエストは1台のノードに集中する. よって, 性能が出ないのではないかと考えられる. Cassandraをただ増やすだけでは性能は得ることが出来ず, データも分散させて実験を行わなければならない.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
262 \scalebox{0.33}{\includegraphics{./fig/cluster_read.pdf}}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 \end{center}
4
suika6039@shizuku.local
parents: 2
diff changeset
264 \caption{MacMiniを複数ノードにしたベンチマーク(Read)}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 \label{fig:bench4-R}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 \begin{figure}[h]
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 \begin{center}
2
suika6039@shizuku.local
parents: 1
diff changeset
269 \scalebox{0.33}{\includegraphics{./fig/cluster_write.pdf}}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 \end{center}
4
suika6039@shizuku.local
parents: 2
diff changeset
271 \caption{MacMiniを複数ノードにしたベンチマーク(Write)}
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 \label{fig:bench4-W}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 \end{figure}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 \newpage
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 \section{まとめ}
4
suika6039@shizuku.local
parents: 2
diff changeset
276 Cassandraは従来の使用方法では性能を発揮することが出来ずコア数が多いサーバーでクライアントの並列度が高い場合に性能を発揮する.
5
suika6039@shizuku.local
parents: 4 3
diff changeset
277 これは,ベンチマークの結果を考察すると,コア数が少ない場合ReadはMySQLより遅いがほぼ同し推移の仕方をする.
suika6039@shizuku.local
parents: 4 3
diff changeset
278 Writeは,コア数が少なくてもクライアントの並列度を高く設定すればMySQLより性能が出る.
suika6039@shizuku.local
parents: 4 3
diff changeset
279 コア数が多い場合,Read・Write共に,初めはやはりMySQLの方が動作が早いが,グラフの傾きはMySQLの方が大きくCassandraは緩やかである.
suika6039@shizuku.local
parents: 4 3
diff changeset
280 特にCassandraのWhiteの性能は高く, MySQLを大きく上回っている.
2
suika6039@shizuku.local
parents: 1
diff changeset
281 また, 単純にCassandraのノード数を増やしても性能は高くならない. これは, データも綺麗に分散させてあげないとデータを読み込む際に一定のノードに集中してしまい,他のノードにアクセスを分散しても結局は保持しているノードに聞きに行かないといけないことになるからである.
4
suika6039@shizuku.local
parents: 2
diff changeset
282 データもある程度分散させなければならないため,汎用的なhash関数では性能が発揮できなく, そのアプリケーション専用の関数が必要だと思われる.
suika6039@shizuku.local
parents: 2
diff changeset
283 格納されるデータを決めるのにStrategyというものがあり, それを利用することで実装できると思われる.
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 \section{今後の課題}
4
suika6039@shizuku.local
parents: 2
diff changeset
285 今後は, Strategyを拡張し複数のデータをノードに分散させた環境下でベンチマークを行い, その結果をCassandra単体でのベンチマーク結果と比較したいと考えている.
1
5d53f54e7152 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
286
3
66e2d43ebf89 minor comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
287 % 本文で引用しない限り、参考文献には挙げないものなんだよ
66e2d43ebf89 minor comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
288
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 \begin{adjustvboxheight} % needed only when Appendix follows
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 \begin{thebibliography}{99}
4
suika6039@shizuku.local
parents: 2
diff changeset
291 \bibitem{YCSB} Benchmarking Cloud Serving Systems with YCSB
suika6039@shizuku.local
parents: 2
diff changeset
292 \bibitem{SEDA1} The Staged Event-Driven Architecture for Highly-Concurrent Server Applications
suika6039@shizuku.local
parents: 2
diff changeset
293 \bibitem{SEDA2} SEDA : An Architecture for Well-Conditioned , Scalable Internet Services
suika6039@shizuku.local
parents: 2
diff changeset
294 \bibitem{BIGTABLE} Bigtable : A Distributed Storege System for Structured Data
0
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 \end{thebibliography}
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 \end{adjustvboxheight} % needed only when Appendix follows
3537d0ffdf6f hg init
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 \end{document}