view paper/slides/sample.markdown @ 40:9978f2fd4954

slide fix
author suruga
date Wed, 21 Feb 2018 21:21:29 +0900
parents 5731bcc576ea
children cd2d73cb6b2c
line wrap: on
line source

title: 分散版 Jungle データベースの性能測定方法
author: 仲松栞
profile:琉球大学 工学部 情報工学科  河野研

# 研究背景(1/2)
* スマートフォン等の普及により、Webサービスの利用者が増え、Webサーバーにかかる負荷も増大している
* この問題を解決する為に当研究室では、スケーラビリティを持つ分散データベースとしてJungleを開発している
* ここで言うスケーラビリティとは、複数のマシンに処理を分散させたりすることで、システムの処理能力を向上させる性能を指す

# 研究背景(2/2)
* 一般的なウェブサイトの構造は大体が木構造であるため、Jungleはデータ構造として木構造を採用している
* JungleはNoSQLを元に開発されており、木構造等の複雑なデータをそのまま読み込むことができる
* Jungle はデータの変更を非破壊で行なっており、編集ごとのデータをバージョンとして TreeOperationLog に残している
* Jungleの分散機構には、当研究室で開発している分散フレームワークAliceを使用している

# 問題提起
* これまでJungleの分散性能を測定する方法はWebサーバー込みで行われていた
* 出力結果がWebサーバーの性能に依存する為、Jungleの単体の分散性能を測定できなかった

# 研究目的
* Jungle単体の分散性能を測定できる環境を構築したい
* また、Jungleを用いるデータの伝搬方式や、トランザクションのmergeに関する研究開発をしやすくしたい
* 本研究では、Webサーバーを取り除き、木構造に構築したJungleのノード上で、いくつかのノードから書き込みを伝搬させて、
  変更が全体に伝搬するまでの実験を行なった

# JUngleデータベースの構造
* 一般的なウェブサイトの構造は大体が木構造であるため、データ構造として木構造を採用している
* NoSQLを元に開発されている為、RDBと異なり、木構造等の複雑なデータをそのまま読み込める
* Jungle はデータの変更を非破壊で行なっており、編集ごとのデータをバージョンとして TreeOperationLog に残している

# Jungleの分散機構(1/2)
* Jungleの分散機構には、当研究室で開発している分散フレームワークAliceを使用している
* 並列環境上のノード間でデータの衝突が起きるのを避ける為、JungleにはMergeの機能が実装されている

#Jungleの分散機構(2/2)
* Jungleの分散機構はツリートポロジーを想定している
* ツリー型であれば、データの整合性をとる場合、一度トップまでデータを伝搬させることで行える
* ノード間でデータの衝突が生じても、Mergeして改めて送り直せばいいからである

<div align="center"><img src="./pictures/tree.pdf" style="center"></div>

#TreeOperationLog
* TreeOperationLogには、Jungleのノード編集の履歴が入っている。
* TreeOperationLogはAliceでも扱えるようシリアライズされている
* Aliceによって他のノードへTreeOperationLogを送り、そこでTreeOperationLogと同じ編集をさせることで、トポロジー上でのデータの整合性を取る。

  

#評価実験 
* 学科から16台のVMを借り,15台でJungleを1つずつ起動し、分散させる
* 15台のJungleはAliceのTopologyManagerでツリートポロジーを形成する
* 1~7台の子ノードのJungleに書き込んだデータがrootノードのJungleへMergeし終わるまでの時間を計測する

<div align="center"><img src="./pictures/gaiyou.pdf" style="center"></div>

# 実験環境
* 学科のKVM上の仮想マシンによる仮想クラスタ環境を用いて実験を行った
* 他の利用者とリソースが競合しないよう、TORQUEジョブスケジューラーを利用している
<table style="border-collapse: collapse;border:1px solid #000000;">
        <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">マシン台数</th>
        <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">OS</th>
        <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">CPU</th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;">Memory</th>

        <tr>
        <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">16台</td>
        <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">CentOS Linux release 7.2.1511 (Core) </td>
        <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"></td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">16GB</td>
        </tr>
</table>



#TORQUE Resource Manager
* TORQUEはジョブを管理・投下・実行する3つのデーモンで構 成されており、ジョブの管理・投下を担うデーモンが稼働しているヘッダーノードから、 ジョブの実行を担うデーモンが稼働している計算ノードへジョブが投下される
* 本実験では、TORQUEを用いて、計測用に作成したperlスクリプトを15台のJungleに一度に投入するジョブスクリプトを投入した

<div align="center"><img src="./pictures/torque.pdf" style="center"></div>

#TORQUEの使い方
* ジョブはqsubで投入
```c
$ qsub scripts/LogupdateTest-qsub.sh 
```
* ジョブの処理状況はqstatで確認できる
	* その際、Rは処理中であり、Cは処理完了を表している
```c
$ qstat

Job ID                    Name             User            Time Use  S Queue
------------------------- ---------------- ---------------  -------- - -----
563.tino-VM1              LogUpdateTest    ie-user                 0 C jungle 
```


#TORQUEを使うにあたり工夫した所
* TORQUEで測定するにはJungleのノードを15台全部起動して、全部終了するようにしないといけない
* 実験が終了したらタスクを終了させるコードを実装した
	* データ書き込みの最後にnullLogを送ると全体が終了するコードを実装した

#分散フレームワークAlice
* Aliceは当研究室で開発している並列分散フレームワークである
* Alice は、ネットワーク上の複数のサーバーノードにトポロジーを形成させ、通信する機能を提供する 
* 本実験では、Aliceを用いて15台のJungleにツリートポロジーを形成させ、子ノードとJungleノード間のデータの通信を行なった

#TopologyManager
* TopologyManagerは、ネットワーク上の複数のサーバーノードにトポロジーを形成さる機能である
* TopologyManagerにトポロジーの内容が書かれたトポロジーファイルを渡すことで、任意のトポロジーを構成させることができる。
* 本実験ではTopologyManagerにツリー型のトポロジーファイルを渡すことで、15台のJUngleでツリートポロジーを構成させた。

<div align="center"><img src="./pictures/topologymanager6.pdf" style="center"></div>

# 結果/本研究で工夫した所
* 無事7台の子ノードJungleからデータが書き込まれ、rootノードJungleへデータがmergeされた時間を計測できた 
* JungleとAliceで生じていたJava等のバージョンのズレを修正した
* 測定用に、任意のnodeと任意のトポロジーを形成するperlスクリプトを作成した
* mavenリポジトリのキャッシュをクリアし、アップデートできた

# 今後の課題
* 今回構築した測定環境で、現在のJungleのmergeや分散アルゴリズムを研究したい
* 再接続時に、Jungleのノードのデータを再ロードできるプロトコルを定義したい
	* 方法としては、他のノード、もしくはディスクからデータを読み込む
* ディスク上にあるツリートポロジーを読み出すプロトコルを定義したい
	
#計測結果(1/2)
* 1台に書き込み/1回書き込み
```c
TopologymanagerTime = 5285

hostname: node6  time  = 214 
```
* 7台に書き込み/1回書き込み
```c
TopologymanagerTime = 5115

hostname: node9  time  = 98 

```

#計測結果(2/2)
* 1台に書き込み/100回書き込み
```c
TopologymanagerTime = 5425

hostname: node14  time  = 278 
hostname: node14  time  = 210 
           ...
hostname: node14  time  = 5 
hostname: node14  time  = 4 
```
* 7台に書き込み/100回書き込み
```c
TopologymanagerTime = 5351

hostname: node10  time  = 290 
hostname: node10  time  = 209 
           ...
hostname: node10  time  = 17 
hostname: node10  time  = 16
```

#ジョブスクリプト
```c
#!/bin/sh
#PBS -q jungle
#PBS -N LogUpdateTest
#PBS -l nodes=16,walltime=00:08:00

cd /mnt/data/jungle_workspace/Log
/usr/bin/perl /mnt/data/jungle_workspace/scripts/LogupdateTest.pl
```
* -q ... queueを指定。
* -N ... 実行結果の出力ファイル名
* nodes ... 使用するnodeの台数、
* walltime ... 実行制限時間
* Logディレクトリに移動し,今回政策したperlスクリプトを実行している
* 実行結果がLogディレクトリに吐き出される

<style type="text/css">
<!--
*{
	font:nomal 100% 'PT Sans';
}

ul > li{
	list-style-type:disc;
}

.slide h1{
	text-align:left;
	color:#777777;
	font:bold 40px/1.13 'PT Sans', sans-serif;
	margin-bottom: 50px;
}

div#slide1 h1{
	text-align:left;
	color:#777777;
	font:bold 60px 'PT Sans', sans-serif;
	margin-bottom: 50px;
}

pre > code{
	font-family:'Droid Sans Mono', 'Courier New', monospace;
}

img[alt="opt"]{
	display: block;
	margin-left: auto;
	margin-right: auto;
}

img[alt="right"]{
	margin-right: 0;
}

table {
	margin-left: auto;
	margin-right: auto;
}

th {
    font-size: 120%;
}
-->
</style>