35
|
1 <!DOCTYPE html>
|
|
2 <html>
|
|
3 <head>
|
|
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
|
|
5 <title>分散版 Jungle データベースの性能測定方法</title>
|
|
6
|
|
7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin14]">
|
|
8 <meta name="author" content="仲松栞" >
|
|
9
|
|
10 <!-- style sheet links -->
|
|
11 <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection">
|
|
12 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
|
|
13 <link rel="stylesheet" href="s6/themes/print.css" media="print">
|
|
14 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
|
|
15
|
|
16 <!-- JS -->
|
|
17 <script src="s6/js/jquery-1.11.3.min.js"></script>
|
|
18 <script src="s6/js/jquery.slideshow.js"></script>
|
|
19 <script src="s6/js/jquery.slideshow.counter.js"></script>
|
|
20 <script src="s6/js/jquery.slideshow.controls.js"></script>
|
|
21 <script src="s6/js/jquery.slideshow.footer.js"></script>
|
|
22 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
|
|
23
|
|
24 <!-- prettify -->
|
|
25 <link rel="stylesheet" href="scripts/prettify.css">
|
|
26 <script src="scripts/prettify.js"></script>
|
|
27
|
|
28 <script>
|
|
29 $(document).ready( function() {
|
|
30 Slideshow.init();
|
|
31
|
|
32 $('code').each(function(_, el) {
|
|
33 if (!el.classList.contains('noprettyprint')) {
|
|
34 el.classList.add('prettyprint');
|
|
35 }
|
|
36 });
|
|
37 prettyPrint();
|
|
38 } );
|
|
39
|
|
40
|
|
41 </script>
|
|
42
|
|
43 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
|
|
44 <!--[if IE]>
|
|
45 <script src="s6/js/jquery.microsoft.js"></script>
|
|
46 <![endif]-->
|
|
47
|
|
48
|
|
49
|
|
50 </head>
|
|
51 <body>
|
|
52
|
|
53 <div class="layout">
|
|
54 <div id="header"></div>
|
|
55 <div id="footer">
|
|
56 <div align="right">
|
|
57 <img src="s6/images/logo.svg" width="200px">
|
|
58 </div>
|
|
59 </div>
|
|
60 </div>
|
|
61
|
|
62 <div class="presentation">
|
|
63
|
|
64 <div class='slide cover'>
|
|
65 <table width="90%" height="90%" border="0" align="center">
|
|
66 <tr>
|
|
67 <td>
|
|
68 <div align="center">
|
|
69 <h1><font color="#808db5">分散版 Jungle データベースの性能測定方法</font></h1>
|
|
70 </div>
|
|
71 </td>
|
|
72 </tr>
|
|
73 <tr>
|
|
74 <td>
|
|
75 <div align="left">
|
|
76 仲松栞
|
|
77 琉球大学 工学部 情報工学科 河野研
|
|
78 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
|
|
79 </div>
|
|
80 </td>
|
|
81 </tr>
|
|
82 </table>
|
|
83 </div>
|
|
84
|
|
85 <div class='slide '>
|
|
86 <!-- === begin markdown block ===
|
|
87
|
|
88 generated by markdown/1.2.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin14]
|
42
|
89 on 2018-02-22 05:11:14 +0900 with Markdown engine kramdown (1.13.2)
|
35
|
90 using options {}
|
|
91 -->
|
|
92
|
|
93 <!-- _S9SLIDE_ -->
|
41
|
94 <h1 id="section">研究背景</h1>
|
35
|
95 <ul>
|
39
|
96 <li>スマートフォン等の普及により、Webサービスの利用者が増え、Webサーバーにかかる負荷も増大している</li>
|
35
|
97 <li>この問題を解決する為に当研究室では、スケーラビリティを持つ分散データベースとしてJungleを開発している</li>
|
|
98 <li>ここで言うスケーラビリティとは、複数のマシンに処理を分散させたりすることで、システムの処理能力を向上させる性能を指す</li>
|
|
99 </ul>
|
|
100
|
|
101
|
|
102 </div>
|
|
103 <div class='slide '>
|
|
104 <!-- _S9SLIDE_ -->
|
41
|
105 <h1 id="section-1">問題提起</h1>
|
35
|
106 <ul>
|
41
|
107 <li>これまでJungleの分散性能を測定する方法はWebサーバー込みで行われていた</li>
|
|
108 <li>Webサーバーを使用した測定方法は、Jungleに合わせたテストの準備が難しい</li>
|
|
109 <li>また、出力結果がWebサーバーの性能に依存する為、Jungleの単体の分散性能を測定できなかった</li>
|
35
|
110 </ul>
|
|
111
|
|
112
|
|
113 </div>
|
|
114 <div class='slide '>
|
|
115 <!-- _S9SLIDE_ -->
|
41
|
116 <h1 id="section-2">研究目的</h1>
|
39
|
117 <ul>
|
40
|
118 <li>Jungle単体の分散性能を測定できる環境を構築したい</li>
|
|
119 <li>また、Jungleを用いるデータの伝搬方式や、トランザクションのmergeに関する研究開発をしやすくしたい</li>
|
41
|
120 <li>本研究ではWebサーバーを取り除き、木構造に構築したJungleのノード上で、いくつかのノードから書き込みを伝搬させて、変更が全体に伝搬するまでの実験を行える環境を構築した</li>
|
35
|
121 </ul>
|
|
122
|
|
123
|
|
124 </div>
|
|
125 <div class='slide '>
|
|
126 <!-- _S9SLIDE_ -->
|
|
127 <h1 id="jungle">JUngleデータベースの構造</h1>
|
|
128 <ul>
|
41
|
129 <li>一般的なウェブサイトの構造は大体が木構造であるため、データ構造として木構造を採
|
|
130 用している</li>
|
|
131 <li>木の変更を非破壊で行なっている</li>
|
|
132 <li>木の変更をLogとして持っている</li>
|
|
133 <li>そのLogを通信することにより、木を分散させる</li>
|
|
134 <li>Logの通信には当研究で開発している分散フレームワークAliceを用いている</li>
|
|
135 <li>異なる変更履歴を1つにまとめるMergeという機能を持っている</li>
|
35
|
136 </ul>
|
|
137
|
|
138
|
|
139 </div>
|
|
140 <div class='slide '>
|
|
141 <!-- _S9SLIDE_ -->
|
41
|
142 <h1 id="jungle-1">Jungleの分散機構</h1>
|
35
|
143 <ul>
|
|
144 <li>Jungleの分散機構はツリートポロジーを想定している</li>
|
42
|
145 <li>ツリー型であれば、一度トップまでデータを伝搬させることで木全体のデータを同期できる</li>
|
40
|
146 </ul>
|
|
147
|
42
|
148 <div>
|
|
149 <img src="./pictures/tree4.svg" alt="message" style="float: left;width: 50%;" />
|
|
150 <div style="float: right; width: 50%;">
|
|
151 <ol>
|
|
152 <li>node1からnode0へデータが送られる</li>
|
|
153 <li>node0でデータがupdateされ、そのデータがnode1,node2へ送られる</li>
|
|
154 <li>node1からnode3,node4へデータが送られ、全体でデータの同期が完了する</li>
|
|
155 </ol>
|
|
156 </div>
|
|
157 <div style="clear: both;"></div>
|
|
158 </div>
|
|
159
|
|
160 <div align="center"><img src="./pictures/tree2.svg" style="center" /></div>
|
35
|
161
|
|
162
|
|
163 </div>
|
|
164 <div class='slide '>
|
|
165 <!-- _S9SLIDE_ -->
|
41
|
166 <h1 id="section-3">実験の準備</h1>
|
35
|
167 <ul>
|
41
|
168 <li>Webサーバーを取り除いた、Jungleの純粋な性能を計測する環境を構築する</li>
|
|
169 <li>学科のVM16台でPCクラスタを構築し、クラスタ上にジョブスケジューラーTORQUEを設定した</li>
|
42
|
170 <li>他の利用者とリソースが競合しないよう、TORQUEジョブスケジューラーを利用している</li>
|
41
|
171 <li>本研究で用いたVMの性能を以下に示す</li>
|
35
|
172 </ul>
|
40
|
173 <table style="border-collapse: collapse;border:1px solid #000000;">
|
|
174 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">マシン台数</th>
|
|
175 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">OS</th>
|
|
176 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">CPU</th>
|
41
|
177 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">Memory</th>
|
40
|
178
|
|
179 <tr>
|
|
180 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">16台</td>
|
|
181 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">CentOS Linux release 7.2.1511 (Core) </td>
|
41
|
182 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">QEMU Virtual CPU 2.3GHz</td>
|
|
183 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">1GB</td>
|
40
|
184 </tr>
|
|
185 </table>
|
35
|
186
|
|
187
|
|
188 </div>
|
|
189 <div class='slide '>
|
|
190 <!-- _S9SLIDE_ -->
|
37
|
191 <h1 id="torque-resource-manager">TORQUE Resource Manager</h1>
|
35
|
192 <ul>
|
42
|
193 <li>TORQUEはジョブスケジューラーであり、分散された複数のノードに一度にジョブを投入することができる為、本研究で採用した</li>
|
41
|
194 <li>TORQUEはジョブを管理・投下・実行する3つの処理で構成されている</li>
|
|
195 <li>ジョブの管理・投下を担うヘッダーノードから、ジョブの実行を担う計算ノードへジョブが投下される</li>
|
|
196 <li>本実験では、TORQUEを用いて、計測用のスクリプトを15台のJungleに一度に投入するスクリプトを投入した</li>
|
35
|
197 </ul>
|
|
198
|
42
|
199 <div align="center"><img src="./pictures/torque2.svg" style="center" /></div>
|
40
|
200
|
35
|
201
|
|
202 </div>
|
|
203 <div class='slide '>
|
|
204 <!-- _S9SLIDE_ -->
|
39
|
205 <h1 id="torque">TORQUEの使い方</h1>
|
40
|
206 <ul lang="c">
|
42
|
207 <li>ジョブはqsubコマンドで投入する</li>
|
40
|
208 </ul>
|
|
209 <pre><code>$ qsub scripts/LogupdateTest-qsub.sh
|
|
210 </code></pre>
|
|
211 <ul lang="c">
|
41
|
212 <li>ジョブの処理状況はqstatコマンドで確認できる
|
39
|
213 <ul>
|
41
|
214 <li>Sは現在のジョブの処理状況を示し、Rは処理中であり、Cは処理完了を表している</li>
|
39
|
215 </ul>
|
|
216 </li>
|
|
217 </ul>
|
40
|
218 <pre><code>$ qstat
|
|
219
|
|
220 Job ID Name User Time Use S Queue
|
|
221 ------------------------- ---------------- --------------- -------- - -----
|
|
222 563.tino-VM1 LogUpdateTest ie-user 0 C jungle
|
|
223 </code></pre>
|
39
|
224
|
42
|
225
|
|
226 </div>
|
|
227 <div class='slide '>
|
|
228 <!-- _S9SLIDE_ -->
|
|
229 <h1 id="section-4">これまでのまとめ</h1>
|
|
230 <ul>
|
|
231 <li>以上が実験の環境についての説明である</li>
|
|
232 <li>つづいて、このTORQUEを用いて、Jungleの分散性能を測定する</li>
|
|
233 </ul>
|
41
|
234
|
|
235
|
|
236 </div>
|
|
237 <div class='slide '>
|
|
238 <!-- _S9SLIDE_ -->
|
42
|
239 <h1 id="section-5">実験</h1>
|
41
|
240 <ul>
|
|
241 <li>以下にJungleの分散性能を測定する手順を示す</li>
|
|
242 </ul>
|
|
243 <div>
|
42
|
244 <img src="./pictures/gaiyou3.svg" alt="message" style="float: left;width: 50%;" />
|
41
|
245 <div style="float: right; width: 50%;">
|
|
246 <ul>
|
|
247 <li>1台でTopologyManagerを起動し,残りの15台でJungleを1つずつ起動する</li>
|
|
248 <li>TopologyManagerは指定されたトポロジーの情報に従い、接続先の情報をJungleノードに送る</li>
|
|
249 <li>Jungleは送られてきた接続先のIPアドレス、ポート番号、接続名に従い、トポロジーを形成する</li>
|
|
250 <li>1~7台の子ノードのJungleに書き込んだデータがrootノードのJungleへMergeし終わるまでの時間を計測する</li>
|
|
251 </ul>
|
|
252 </div>
|
|
253 <div style="clear: both;"></div>
|
|
254 </div>
|
|
255
|
|
256
|
|
257 </div>
|
|
258 <div class='slide '>
|
|
259 <!-- _S9SLIDE_ -->
|
|
260 <h1 id="topologymanager">TopologyManager</h1>
|
|
261 <ul>
|
|
262 <li>TopologyManagerは、Aliceが持つネットワーク上の複数のサーバーノードにトポロジーを形成さる機能である</li>
|
|
263 <li>TopologyManagerにトポロジーの内容が書かれたトポロジーファイルを渡すことで、任意のトポロジーを構成させることができる。</li>
|
|
264 <li>本実験ではTopologyManagerにツリー型のトポロジーファイルを渡すことで、15台のJungleでツリートポロジーを構成させた。</li>
|
|
265 </ul>
|
|
266
|
|
267 <div align="center"><img src="./pictures/topologymanager6.svg" style="center" /></div>
|
|
268
|
39
|
269
|
|
270 </div>
|
|
271 <div class='slide '>
|
|
272 <!-- _S9SLIDE_ -->
|
42
|
273 <h1 id="section-6">実験をするにあたりぶつかった問題点とその対処法</h1>
|
39
|
274 <ul>
|
41
|
275 <li>ところが、TORQUEにジョブを投入しても、実験がうまくいかなかった</li>
|
|
276 <li>原因は、Jungleには、自身の処理を終了させる機能が備わっていないことだった
|
39
|
277 <ul>
|
41
|
278 <li>Jungleがデータを書き込み終わる時に、TopologyManagerへnullLogを送るコードを実装した</li>
|
|
279 <li>TopologyManagerはnullLogを受け取ることで、全てのノードがタスクを終了したことを確認する</li>
|
|
280 <li>確認とともに、TopologyManagerはJungleへ”finish”を送り、テストを終了させる</li>
|
39
|
281 </ul>
|
|
282 </li>
|
35
|
283 </ul>
|
|
284
|
|
285
|
|
286 </div>
|
|
287 <div class='slide '>
|
|
288 <!-- _S9SLIDE_ -->
|
42
|
289 <h1 id="section-7">実験の準備の為に行なったこと</h1>
|
41
|
290 <ul>
|
|
291 <li>TORQUEに使用するperlスクリプトを用意した</li>
|
|
292 <li></li>
|
|
293 <li>また、環境構築の際に、JungleとAliceは異なるパッケージで作られていた為、バージョンがズレていた
|
|
294 <ul>
|
|
295 <li>mavenリポジトリのキャッシュをクリアし、アップデートを行うことで修正した</li>
|
|
296 </ul>
|
|
297 </li>
|
|
298 </ul>
|
|
299
|
|
300
|
|
301 </div>
|
|
302 <div class='slide '>
|
|
303 <!-- _S9SLIDE_ -->
|
42
|
304 <h1 id="section-8">まとめと今後の課題</h1>
|
41
|
305 <ul>
|
|
306 <li>本研究ではJungleの分散性能の測定方法の提案と測定環境の構築を行なった</li>
|
|
307 <li>それにあたり、Jungleが自身を終了させることができない問題が起きた
|
|
308 <ul>
|
|
309 <li>データ書き込みの最後にTopologyManagerにnullLogを送り、Jungleを終了させるコードを実装した</li>
|
|
310 </ul>
|
|
311 </li>
|
|
312 <li>今回構築した測定環境で、現在のJungleのmergeや分散アルゴリズムを研究したい</li>
|
|
313 <li>再接続時に、Jungleのノードのデータを再ロードできるプロトコルを定義したい
|
|
314 <ul>
|
|
315 <li>方法としては、他のノード、もしくはディスクからデータを読み込む</li>
|
|
316 </ul>
|
|
317 </li>
|
|
318 <li>ディスク上にあるJungleの木を読み出すプロトコルを定義したい</li>
|
|
319 </ul>
|
|
320
|
|
321
|
|
322 </div>
|
|
323 <div class='slide '>
|
|
324 <!-- _S9SLIDE_ -->
|
37
|
325 <h1 id="alice">分散フレームワークAlice</h1>
|
35
|
326 <ul>
|
37
|
327 <li>Aliceは当研究室で開発している並列分散フレームワークである</li>
|
41
|
328 <li>
|
|
329 <p>Alice は、ネットワーク上の複数のサーバーノードにトポロジーを形成させ、通信する機能を提供する</p>
|
40
|
330 </li>
|
41
|
331 <li>本実験では、Aliceを用いて15台のJungleにツリートポロジーを形成させ、子ノードとJungleノード間>のデータの通信を行なった</li>
|
39
|
332 </ul>
|
|
333
|
|
334
|
|
335 </div>
|
|
336 <div class='slide '>
|
|
337 <!-- _S9SLIDE_ -->
|
42
|
338 <h1 id="section-9">計測結果(1/2)</h1>
|
40
|
339 <ul lang="c">
|
|
340 <li>1台に書き込み/1回書き込み</li>
|
39
|
341 </ul>
|
40
|
342 <pre><code>TopologymanagerTime = 5285
|
|
343
|
|
344 hostname: node6 time = 214
|
|
345 </code></pre>
|
|
346 <ul lang="c">
|
|
347 <li>7台に書き込み/1回書き込み</li>
|
|
348 </ul>
|
|
349 <pre><code>TopologymanagerTime = 5115
|
|
350
|
|
351 hostname: node9 time = 98
|
|
352
|
|
353 </code></pre>
|
39
|
354
|
|
355
|
|
356 </div>
|
|
357 <div class='slide '>
|
|
358 <!-- _S9SLIDE_ -->
|
42
|
359 <h1 id="section-10">計測結果(2/2)</h1>
|
40
|
360 <ul lang="c">
|
|
361 <li>1台に書き込み/100回書き込み</li>
|
35
|
362 </ul>
|
40
|
363 <pre><code>TopologymanagerTime = 5425
|
|
364
|
|
365 hostname: node14 time = 278
|
|
366 hostname: node14 time = 210
|
|
367 ...
|
|
368 hostname: node14 time = 5
|
|
369 hostname: node14 time = 4
|
|
370 </code></pre>
|
|
371 <ul lang="c">
|
|
372 <li>7台に書き込み/100回書き込み</li>
|
|
373 </ul>
|
|
374 <pre><code>TopologymanagerTime = 5351
|
|
375
|
|
376 hostname: node10 time = 290
|
|
377 hostname: node10 time = 209
|
|
378 ...
|
|
379 hostname: node10 time = 17
|
|
380 hostname: node10 time = 16
|
|
381 </code></pre>
|
35
|
382
|
39
|
383
|
|
384 </div>
|
|
385 <div class='slide '>
|
|
386 <!-- _S9SLIDE_ -->
|
42
|
387 <h1 lang="c" id="section-11">ジョブスクリプト</h1>
|
40
|
388 <pre><code>#!/bin/sh
|
|
389 #PBS -q jungle
|
|
390 #PBS -N LogUpdateTest
|
|
391 #PBS -l nodes=16,walltime=00:08:00
|
39
|
392
|
40
|
393 cd /mnt/data/jungle_workspace/Log
|
|
394 /usr/bin/perl /mnt/data/jungle_workspace/scripts/LogupdateTest.pl
|
|
395 </code></pre>
|
|
396 <ul>
|
|
397 <li>-q … queueを指定。</li>
|
|
398 <li>-N … 実行結果の出力ファイル名</li>
|
|
399 <li>nodes … 使用するnodeの台数、</li>
|
|
400 <li>walltime … 実行制限時間</li>
|
|
401 <li>Logディレクトリに移動し,今回政策したperlスクリプトを実行している</li>
|
|
402 <li>実行結果がLogディレクトリに吐き出される</li>
|
|
403 </ul>
|
39
|
404
|
35
|
405
|
41
|
406 </div>
|
|
407 <div class='slide '>
|
|
408 <!-- _S9SLIDE_ -->
|
|
409 <h1 lang="c" id="perl">perlスクリプト</h1>
|
|
410 <pre><code>mysystem("cd $jungleDir; ruby scripts/tree.rb $nodeNum > scripts/tree.dot");
|
|
411 mkdir "$logFile";
|
|
412 mysystem("ssh $nodes[0] \"cd $logFile;java -cp ../../build/libs/logupdateTest-1.1.jar alice.topology.manager.TopologyManager -conf ../../scripts/tree.dot -p 10000 --showTime --noKeepAlive > $logNum\" ",1);
|
|
413 $logNum++;
|
|
414 sleep 10;
|
|
415 for my $i (1..($#nodes-7)) {
|
|
416 mysystem("ssh $nodes[$i] \"cd $logFile;java -jar ../../build/libs/logupdateTest-1.1.jar -host $nodes[0] -p 10003 -port 10000 --noKeepAlive > $logNum\" & ");
|
|
417 $logNum++;
|
35
|
418 }
|
|
419
|
41
|
420 for my $j (($#nodes-6)..($#nodes)){
|
|
421 mysystem("ssh $nodes[$j] \"cd $logFile;java -jar ../../build/libs/logupdateTest-1.1.jar -host $nodes[0] -p 10003 -port 10000 -write -count 100 --noKeepAlive > $logNum\" &" );
|
35
|
422 }
|
41
|
423 for (@wait) {
|
|
424 wait; #1がついている部分だけweit TopologyManagerだけweit
|
35
|
425 }
|
41
|
426 </code></pre>
|
35
|
427
|
|
428
|
41
|
429 </div>
|
|
430 <div class='slide '>
|
|
431 <!-- _S9SLIDE_ -->
|
42
|
432 <h1 id="section-12">その言葉を待っていました</h1>
|
41
|
433 <ul>
|
|
434 <li>開発中です</li>
|
|
435 </ul>
|
35
|
436
|
|
437 <!-- === end markdown block === -->
|
|
438 </div>
|
|
439
|
|
440
|
|
441 </div><!-- presentation -->
|
|
442 </body>
|
|
443 </html>
|