view chapter1.tex @ 8:b75c564064a8 default tip

fix undefined reference , multiply defined references
author Shoshi TAMAKI
date Thu, 21 Feb 2013 22:53:20 +0900
parents 44a95cddab8a
children
line wrap: on
line source

\chapter{分散データベースのスケーラビリティ検証}

スケーラブルなシステムを開発するためには, スケーラブルな性能を測ることの出来る環境とどのようなシステムがスケーラブルであるか知ることが必要である. 
本章では, スケーラブルな分散データベースCassandraを用いて検証を行う. スケーラビリテイを高めるための使い方には工夫が必要である. 
検証では, 特に, CoreDuo などの安価だが非力なマシンの振舞を調べることを行なった. そしてその環境上でスケーラビリティを確認する実験手法とスケーラブルなシステムを構成する方法を考察する. 

\section{スケーラビリティとは}
スケーラビリティとは, 分散システムの性能がノードの数に対して線形に上昇するような性質である. 通常, システムの性能を上昇させる場合,
高価なサーバーを購入方法と安価なサーバーを複数用意し連携させる方法がある. 前者の方法をスケールアップと呼び, 後者の方法をスケールアウトと呼ぶ. 
高価なサーバーを用意するより, 安価なサーバーを複数用意するほうがコストパフォーマンスが良い. しかし, スケールアップでは, 同じ古いサーバーで動作していたソフトウェアがそのまま高価なサーバーで動作させることが可能であるため簡単に性能を向上させることができるが, 複数のサーバーを連携させて性能を向上させるのは簡単なことではない.

\newpage

\section{分散データベース Cassandra}
Cassandra\cite{cassandra}は, FaceBookが自社のために開発した分散Key-Valueストアデータベースであり,Dynamo\cite{dynamo}とBigTable\cite{bigtable}を合わせた特徴を持っている. 2008年にオープンソースとして公開され, 2009年にApache Incubatorのプロジェクトとなった.
2010年にはApacheのトップレベルプロジェクトとなり, 現在でも頻繁にバージョンアップが行われている. 
\subsection{SEDA}
SEDA(Staged Event-Driven Architecture)は, Cassandraで使用されているアーキテクチャである\cite{seda:1}\cite{seda:2}. 処理を複数のステージに分解しタスクキューとスレッドプールを用意し処理を行う. 処理の様子を図\ref{fig:SEDA}に示す. \\
タスクが各ステージのタスクキューに入ると, スレッドプールにどれかのスレッドがタスクキューの中からタスクを取り出し処理を行う. 処理が終わるとそのタスクを次のステージのタスクキューに入れる. 同様にして次のステージのスレッドプールがタスクキューからタスクを受け取り処理を行う.\\
このアーキテクチャは数多くのスレッドを生成するためマルチコアなPCと多数のタスクがある状況で性能を発揮することができるため, スケーラブルなソフトウェアアーキテクチャである.\\
実際, Cassandraには20以上のスレッドが動作している.しかし, あまりにもスレッドプールやタスクが多すぎると, コンテキストに切り替えに時間がかかり性能は低下する. \\

\begin{figure}[!htbp]
\begin{center}
	\includegraphics[scale=1.5]{./images/SEDA.pdf}
\end{center}
\caption{SEDA}
\label{fig:SEDA}
\end{figure}

\section{分散データベースCassandraのスケーラビリティ検証}

\subsubsection{検証方法}
クラスタ管理ツールのTorqueを使用し, 使用するノード数を指定してクラスタにジョブを投げてPHPスクリプトを実行させる. このPHPスクリプトは対象のサーバーにリクエストを10000回送信するスクリプトである.
検証対象としてCassandra, 比較対象としてMySQLを用意した.実験の概要図を図\ref{fig:benchmark}に示す.\\

\begin{figure}[!htbp]
\begin{center}
	\includegraphics[scale=0.5]{./images/benchmark.pdf}
\end{center}
\caption{PCクラスタを用いたCassandraの検証環境}
\label{fig:benchmark}
\end{figure}
この実験では,徐々に負荷をかけるクラスタの台数を増加させ,並列度を上げていく.クラスタすべてが処理を完了するまでの平均をグラフにプロットし,比較した.

\subsection{検証環境}
利用したスケーラビリティの検証環境を以下に示す.
\begin{table}[!htbp]
 \caption{スケーラビリティ検証環境のマシン性能一覧}
 \begin{center}
  \begin{tabular}{|c||c|c|c|} \hline
   種類 & CPU & メモリ & OS \\ \hline \hline
   クラスタ(クライアント) & Core Duo & 1GB & CentOS 5 \\ \hline
   MacMini & Core2 Duo & 4GB & Mac OSX SnowLeopard \\ \hline
   サーバー & Core i7 & 16GB & CentOS 5 \\ \hline
	\end{tabular}
 \end{center}
\end{table}

\subsection{検証結果}
\subsubsection{2Coreを搭載したコア数の少ないサーバーを用いた検証}
検証結果を図\ref{fig:2_core_read}と図\ref{fig:2_core_write}に示す.
ReadはCassandra/MySQLともに,似たような性能低下の推移をしていたがCassandraの方が遅い. しかし, WriteはCassandraの方が断然速く動作している. この実験では, Cassandraの動作を基準に考えたため書き込みのコマンドにREPLACEを使用した. REPLACEは置き換えるようなコマンドである. \\
そのため, INSERTに比べて多少遅くなる.  SEDAは複数のスレッドで動作しているためコア数が少ないサーバーでは性能が出にくいことがわかる. \\

\begin{figure}[!htbp]
 \begin{minipage}{0.5\hsize}
  \begin{center}
   \includegraphics[scale=0.45]{./images/macmini_cluster_read.pdf}
  \end{center}
  \caption{Readの結果}
  \label{fig:2_core_read}
 \end{minipage}
 \begin{minipage}{0.5\hsize}
  \begin{center}
   \includegraphics[scale=0.4]{./images/macmini_cluster_write.pdf}
  \end{center}
  \caption{Writeの結果}
  \label{fig:2_core_write}
 \end{minipage}
\end{figure}

\newpage

\subsubsection{4Core8Threadsを搭載したコア数の多いサーバーを用いた検証}
検証結果を図\ref{fig:4_core_read}と図\ref{fig:4_core_write}に示す.
Read/Write共にMySQLの性能を超えることに成功した. Readにおいてはコア数が少ない場合に超えることが出来なかったが, 並列度が70度付近でMySQLを上回る性能がでていた.
Cassandraの平均時間は並列度が増加しても, MySQLよりは平均時間の上昇は少ない. これは, SEDAの特徴である多くのタスクを並列に実行すると性能を発揮することを確認することが出来た. \\
また, SEDAはマルチスレッド前提であるため, コア数が少ないサーバーでは性能が出ず, コア数の多いサーバーで性能が発揮できるということが分かる.\\

\begin{figure}[!htbp]
 \begin{minipage}{0.5\hsize}
  \begin{center}
   \includegraphics[scale=0.35]{./images/corei7_read.pdf}
  \end{center}
  \caption{Readの結果}
  \label{fig:4_core_read}
 \end{minipage}
 \begin{minipage}{0.5\hsize}
  \begin{center}
   \includegraphics[scale=0.4]{./images/corei7_write.pdf}
  \end{center}
  \caption{Writeの結果}
  \label{fig:4_core_write}
 \end{minipage}
\end{figure}

\subsection{まとめ}
本章では, 90台PCクラスタサーバーを用いてスケーラビリティの検証環境を構築した. 環境を用いて実際にスケーラブルな分散データベースであるCassandraの性能とSEDAの効果を確認することができた. 
よって, 本方法がスケーラビリティを検証する上で有効であることが解った. \\