Mercurial > hg > Papers > 2018 > suruga-thesis
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>