# HG changeset patch # User Nobuyasu Oshiro # Date 1390926407 -32400 # Node ID 559589aec976274b4bb6702eb5ad5819d662f10a # Parent 7c6b89ae1ccf8093cc61a1ce5b31f9f1be3d4b07 Writed how to use alice topology manager diff -r 7c6b89ae1ccf -r 559589aec976 paper/.DS_Store Binary file paper/.DS_Store has changed diff -r 7c6b89ae1ccf -r 559589aec976 paper/abstract.tex --- a/paper/abstract.tex Tue Jan 28 17:59:22 2014 +0900 +++ b/paper/abstract.tex Wed Jan 29 01:26:47 2014 +0900 @@ -1,6 +1,6 @@ \begin{abstract} スマートフォンやタブレット端末の普及により, 大量の通信を扱うウェブサービスが現れてきている. -しかしそれに伴い, サーバサイド側への負荷も増大しウェブサービスがダウンする事態が出てきている. +それに伴い, サーバサイド側への負荷も増大しウェブサービスがダウンする事態が出てきている. そのため, スケーラビリティはウェブサービスにおいて重要な性質の1つとなっている. スケーラビリティとは, ある複数のノードから構成される分散ソフトウェアがあるとき, その分散ソフトウェアに対して単純にノード を追加するだけで性能を線形に上昇させることができる性質である. そこで, スケーラビリティを持たせるためにアーキテクチャの設計から考えることにした. @@ -12,7 +12,7 @@ 結果, 学科の並列環境を用いて複数のサーバノード間でデータの分散を行うことを確認した. また, 例題アプリケーションとして簡易掲示板プログラムの作成を行った. Jungle と Cassandra により作成した掲示板プログラムに対して読み込みと書き込みの負荷をかけ -評価を行った. +比較を行った. \end{abstract} diff -r 7c6b89ae1ccf -r 559589aec976 paper/chapter1.tex --- a/paper/chapter1.tex Tue Jan 28 17:59:22 2014 +0900 +++ b/paper/chapter1.tex Wed Jan 29 01:26:47 2014 +0900 @@ -2,9 +2,8 @@ % 分散データベースとはなんなのか。 % データベースはなんなのかをいれないと。 % NoSQL の説明も必要。 - -本章ではまずデータベースの種類である RDB と NoSQL について述べる. -次に分散データシステムにおいて重要な CAP 定理について触れる. +本章ではまずデータベースの種類であるリレーショナルデータベース(RDB) と NoSQL について述べる. +次に, 分散データシステムにおいて重要な CAP 定理について触れる. 最後に既存の NoSQL データベースとして Cassandra, MongoDB, Neo4j の特徴について述べる. \section{RDB と NoSQL} @@ -31,9 +30,9 @@ \end{itemize} これは CAP 定理\cite{cap}と呼ばれる. 利用するデータベース選ぶ場合, この CAP 定理を意識しなければならない. -一貫性と可用性を重視したい場合はRDB になる. +一貫性と可用性を重視したデータベースが, RDB である. 分断耐性を必要とする場合は NoSQL データベースとなる. -だが NoSQL においても, 一貫性か可用性のどちらを保証しているかで用途が変わってくる. +そして NoSQL の場合, 分断耐性と後もう一つ, 一貫性か可用性のどちらを保証しているかで用途が変わってくる. 分散データシステムを考える場合は, この CAP 定理を意識していなければならない. diff -r 7c6b89ae1ccf -r 559589aec976 paper/chapter2.tex --- a/paper/chapter2.tex Tue Jan 28 17:59:22 2014 +0900 +++ b/paper/chapter2.tex Wed Jan 29 01:26:47 2014 +0900 @@ -349,7 +349,7 @@ % TreeOperationLog(ログ)をシリアライズ可能な形にしてデータをおくること % シリアライズできる形にしたものをそのままHDに書き出すだけでログの永続性は行える Jungle は非破壊でさらにオンメモリにデータを保持するため, 使用するメモリの容量が大きくなる. -そのため, ハードディスクに書き出すし, 一定の区切りで保持している過去のデータをメモリ上から掃除しなければならない. +そのため, ハードディスクに書き出し, 一定の区切りで保持している過去のデータをメモリ上から掃除しなければならない. そこで, ログによるデータの永続性の実装を行う. ここでログをどのようなデータ表現でハードディスクへと書きだすかという問題が発生するが, これは Alice を使うことで 解決している. diff -r 7c6b89ae1ccf -r 559589aec976 paper/chapter3.tex --- a/paper/chapter3.tex Tue Jan 28 17:59:22 2014 +0900 +++ b/paper/chapter3.tex Wed Jan 29 01:26:47 2014 +0900 @@ -1,20 +1,20 @@ -\chapter{Jungleの分散実装} - -\section{TreeOperationLogを用いての分散実装} -Jungle でデータ扱うと TreeOperationLog として残ることは述べた. -この TreeOperationLog を他のサーバへと送り, Jungle の編集を行って -貰うことでデータの分散を行うことができる. -ここで問題になることはネットワークトポロジーの形成方法であった. - +\chapter{Jungle の分散実装} +本章では Jungle に行った分散実装について述べる. +前章では Jungle のアーキテクチャと分散設計について説明した. +トポロジーの形成と他サーバノードのデータのアクセス方法には Alice を使用する. +また, Jungle ではデータ編集のログとして TreeOperationLog がある. +この TreeOperationLog を Alice により他サーバノードへ送ることでデータの分散を行う. \section{Alice のトポロジーマネージャーの利用} -Alice はサーバノード同士によるネットワークトポロジー形成の機能を持つ. -トポロジーマネージャーの起動は\ref{src:alice_dot}の様にポート番号の指定と dot ファイルを引数として渡すことで行う. + +\subsection{トポロジーマネージャーの起動} +Alice を用いてサーバノードでトポロジーの形成を行う方法を述べる. +Alice のトポロジーマネージャーの起動は\ref{src:alice_dot}の様に行う. (\ref{src:alice_ntm_run}). \begin{lstlisting}[frame=lrbt,label=src:alice_ntm_run,caption=Alice によるネットワークトポロジーマネージャーの起動,numbers=left] % java -cp Alice.jar alice.topology.manager.TopologyManager -p 10000 -conf ./topology/tree5.dot \end{lstlisting} - +-p オプションはトポロジーマネージャーが開くポートの番号, -conf オプションには dot ファイルのパスを渡す. ポート番号は Alice により記述された並列分散プログラムの起動時に渡す必要がある. dot ファイルには, トポロジーをどのように形成するかが書かれている. @@ -48,7 +48,6 @@ トポロジーマネージャーは接続要求先を聞いてくるサーバノードに対して名前を割り振り, 接続相手を伝える. dot ファイル\ref{src:alice_dot}により形成されるトポロジーを図\ref{fig:tree_topology}に示す. -\newpage \begin{figure}[htpb] \begin{center} @@ -58,32 +57,36 @@ \end{center} \end{figure} - 矢印に書かれている文字列は, 相手のデータにアクセスするキーを示す. "child1", "child2", "parent" というキーを使うことで別のサーバノードにあるデータを取得することができる. %子共となるノードは "parent" キーにより親の DSM (Remote DSM) にアクセスすることができる. %また, 親も子供となるノードの DSM に対して "child1" や "child2" キーによりアクセスすることが可能となる. +これでトポロジーマネージャーが起動される. -トポロジーマネージャーに最初に接続要求を行う並列分散プログラム側は, 次のように記述する(\ref{src:alice_start}) -\begin{lstlisting}[frame=lrbt,label=src:alice_start,caption=Alice を使用してのトポロジー形成,numbers=left] +\subsection{アプリケーション側の記述} +次は Jungle 側のプログラムが最初に Alice のトポロジーノードと通信を行うようにする. +そのためには Alice の TopologyNode クラスに必要な情報を渡してインスタンスを生成する(\ref{src:app_start}). +\begin{lstlisting}[frame=lrbt,label=src:app_start,caption=アプリケーションの起動,numbers=left] public static void main( String[] args ) throws Exception { RemoteConfig conf = new RemoteConfig(args); - new TopologyNode(conf, new StartBBSCodeSegment(args, conf.bbsPort)); + new TopologyNode(conf, new StartJungleCodeSegment(args, conf.bbsPort)); } \end{lstlisting} - +TopologyNode クラスは第2引数として CodeSegment を受け取る. +TopologyNode のインスタンスはまず初めにトポロジーマネージャーへ接続を行う. +次にトポロジーマネージャーから受け取った情報を元に別のサーバノードとトポロジーの形成を行う. +その後, 第2引数で渡された StartJungleCodeSegment の実行を行う. +StartJungleCodeSegment には通常のアプリケーションの処理が書かれる. -そして, プログラムの起動時にはトポロジーマネージャーが動いているサーバのドメインとポート番号を -渡すことでトポロジーの形成が行われれプログラムの処理がはしる. +アプリケーションの起動時にはコンフィグの情報として, トポロジーマネージャーが動いているサーバのドメインとポート番号を +渡す必要がある. 例えば, mass00.cs.ie.u-ryukyu.ac.jp というサーバ上でポート番号10000を指定してトポロジーマネージャーを 起動した場合は次のようになる(\ref{src:run_program}). \begin{lstlisting}[frame=lrbt,label=src:run_program,caption=トポロジーマネージャーの利用,numbers=left] % java Program -host mass00.cs.ie.u-ryukyu.ac.jp -port 10000 \end{lstlisting} -% MessagePackの説明もここに簡単に入れたほうがいいかも. - \section{Aliceを用いての分散実装} 形成されたトポロジー上でのデータの送受信を行う部分について述べる. diff -r 7c6b89ae1ccf -r 559589aec976 paper/introduciton.tex --- a/paper/introduciton.tex Tue Jan 28 17:59:22 2014 +0900 +++ b/paper/introduciton.tex Wed Jan 29 01:26:47 2014 +0900 @@ -4,7 +4,7 @@ \section{序論} \subsection{研究背景と目的} スマートフォンやタブレット端末の普及により, 大量の通信を扱うウェブサービスが現れてきている. -しかしそれに伴い, サーバサイド側への負荷も増大しウェブサービスがダウンする事態が出てきている. +それに伴い, サーバサイド側への負荷も増大しウェブサービスがダウンする事態が出てきている. そのため, スケーラビリティはウェブサービスにおいて重要な性質の1つとなっている. スケーラビリティとは, ある複数のノードから構成される分散ソフトウェアがあるとき, その分散ソフトウェアに対して単純にノード を追加するだけで性能を線形に上昇させることができる性質である. そこで, スケーラビリティを持たせるためにアーキテクチャの設計から考えることにした. diff -r 7c6b89ae1ccf -r 559589aec976 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed