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]
|
39
|
89 on 2018-02-21 18:15:45 +0900 with Markdown engine kramdown (1.13.2)
|
35
|
90 using options {}
|
|
91 -->
|
|
92
|
|
93 <!-- _S9SLIDE_ -->
|
|
94 <h1 id="section">研究背景(1/2)</h1>
|
|
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_ -->
|
|
105 <h1 id="section-1">研究背景(2/2)</h1>
|
|
106 <ul>
|
39
|
107 <li>一般的なウェブサイトの構造は大体が木構造であるため、Jungleはデータ構造として木構造を採用している</li>
|
37
|
108 <li>JungleはNoSQLで開発されており、木構造をそのまま読み込むことが可能</li>
|
|
109 <li>Jungle はデータの変更を非破壊で行なっており、編集ごとのデータをバージョンとして TreeOperationLog に残している。</li>
|
39
|
110 <li>Jungleの分散機構には、当研究室で開発している分散フレームワークAliceを使用している</li>
|
35
|
111 </ul>
|
|
112
|
|
113
|
|
114 </div>
|
|
115 <div class='slide '>
|
|
116 <!-- _S9SLIDE_ -->
|
39
|
117 <h1 id="section-2">問題提起</h1>
|
35
|
118 <ul>
|
39
|
119 <li>これまでJungleの分散性能を測定する方法はWebサーバー込みで行われていた</li>
|
|
120 <li>Jungleの単体の分散性能を測定したい</li>
|
|
121 </ul>
|
|
122
|
|
123
|
|
124 </div>
|
|
125 <div class='slide '>
|
|
126 <!-- _S9SLIDE_ -->
|
|
127 <h1 id="section-3">研究目的</h1>
|
|
128 <ul>
|
|
129 <li>Jungleを用いるデータの伝搬方式や、トランザクションのmergeに関する研究開発をしやすくする為
|
|
130 木構造に構築したJungleのノード上で、いくつかのノードから書き込みを伝搬させて、
|
|
131 変更が全体に伝搬するまでの実験をできるようにする</li>
|
35
|
132 </ul>
|
|
133
|
|
134
|
|
135 </div>
|
|
136 <div class='slide '>
|
|
137 <!-- _S9SLIDE_ -->
|
|
138 <h1 id="jungle">JUngleデータベースの構造</h1>
|
|
139 <ul>
|
|
140 <li>一般的なウェブサイトの構造は大体が木構造であるため、データ構造として木構造を採用している</li>
|
|
141 <li>NoSQLを元に開発されている為、RDBと異なり、木構造をそのまま読み込める</li>
|
|
142 <li>Jungle はデータの変更を非破壊で行なっており、編集ごとのデータをバージョンとして TreeOperationLog に残している</li>
|
|
143 </ul>
|
|
144
|
|
145
|
|
146 </div>
|
|
147 <div class='slide '>
|
|
148 <!-- _S9SLIDE_ -->
|
|
149 <h1 id="jungle12">Jungleの分散機構(1/2)</h1>
|
|
150 <ul>
|
|
151 <li>ノード間でデータの衝突が起きるのを避ける為、Mergeの機能が実装されている</li>
|
|
152 <li>Jungleの分散機構には、当研究室で開発している分散フレームワークAliceのTopologyManagerという機能を使用している</li>
|
|
153 </ul>
|
|
154
|
|
155
|
|
156 </div>
|
|
157 <div class='slide '>
|
|
158 <!-- _S9SLIDE_ -->
|
|
159 <h1 id="jungle22">Jungleの分散機構(2/2)</h1>
|
|
160 <ul>
|
|
161 <li>Jungleの分散機構はツリートポロジーを想定している</li>
|
|
162 <li>ツリー型であれば、データの整合性をとる場合、一度トップまでデータを伝搬させることで行える</li>
|
|
163 <li>ノード間でデータの衝突が生じても、Mergeして改めて送り直せばいいからである
|
37
|
164 <img src="./pictures/tree.pdf" alt="tree" width="60%" /></li>
|
35
|
165 </ul>
|
|
166
|
|
167
|
|
168 </div>
|
|
169 <div class='slide '>
|
|
170 <!-- _S9SLIDE_ -->
|
39
|
171 <h1 id="section-4">評価実験</h1>
|
35
|
172 <ul>
|
37
|
173 <li>学科から16台のVMを借り,15台でJungleを1つずつ起動し、分散させる</li>
|
|
174 <li>15台のJungleはAliceのTopologyManagerでツリートポロジーを形成する</li>
|
39
|
175 <li>1~7台の子ノードのJungleに書き込んだデータがrootノードのJungleへMergeし終わるまでの時間を計測する
|
|
176 (画像)</li>
|
|
177 </ul>
|
|
178
|
|
179
|
|
180 </div>
|
|
181 <div class='slide '>
|
|
182 <!-- _S9SLIDE_ -->
|
|
183 <h1 id="section-5">実験環境</h1>
|
|
184 <ul>
|
|
185 <li>学科のKVM上の仮想マシンによる仮想クラスタ環境を用いて実験を行った</li>
|
|
186 <li>他の利用者とリソースが競合しないよう、TORQUEジョブスケジューラーを利用している</li>
|
35
|
187 </ul>
|
|
188
|
|
189
|
|
190 </div>
|
|
191 <div class='slide '>
|
|
192 <!-- _S9SLIDE_ -->
|
37
|
193 <h1 id="torque-resource-manager">TORQUE Resource Manager</h1>
|
35
|
194 <ul>
|
37
|
195 <li>TORQUEはジョブを管理・投下・実行する3つのデーモンで構 成されており、ジョブの管理・投下を担うデーモンが稼働しているヘッダーノードから、 ジョブの実行を担うデーモンが稼働している計算ノードへジョブが投下される</li>
|
39
|
196 <li>本実験では、TORQUEを用いて、計測用に作成したperlスクリプトを15台のJungleに一度に投入するジョブスクリプトを投入した</li>
|
35
|
197 </ul>
|
|
198
|
|
199
|
|
200 </div>
|
|
201 <div class='slide '>
|
|
202 <!-- _S9SLIDE_ -->
|
39
|
203 <h1 id="torque">TORQUEの使い方</h1>
|
35
|
204 <ul>
|
39
|
205 <li>ジョブはqsubで投入</li>
|
|
206 <li>ジョブの処理状況はqstatで確認できる
|
|
207 <ul>
|
|
208 <li>その際、Rは処理中であり、Cは処理完了を表している
|
|
209 (ジョブの状態のテキストを貼る)</li>
|
|
210 </ul>
|
|
211 </li>
|
|
212 </ul>
|
|
213
|
|
214
|
|
215 </div>
|
|
216 <div class='slide '>
|
|
217 <!-- _S9SLIDE_ -->
|
|
218 <h1 id="torque-1">TORQUEを使うにあたり工夫した所</h1>
|
|
219 <ul>
|
|
220 <li>TORQUEで測定するにはJungleのノードを15台全部起動して、全部終了するようにしないといけない</li>
|
|
221 <li>実験が終了したらタスクを終了させるコードを実装した
|
|
222 <ul>
|
|
223 <li>書き込みの最後にnullLogを送ると全体が終了するコードを実装した</li>
|
|
224 </ul>
|
|
225 </li>
|
35
|
226 </ul>
|
|
227
|
|
228
|
|
229 </div>
|
|
230 <div class='slide '>
|
|
231 <!-- _S9SLIDE_ -->
|
37
|
232 <h1 id="alice">分散フレームワークAlice</h1>
|
35
|
233 <ul>
|
37
|
234 <li>Aliceは当研究室で開発している並列分散フレームワークである</li>
|
|
235 <li>Alice は、ネットワーク上の複数のサーバーノードにトポロジーを形成させ、通信する機能を提供する</li>
|
39
|
236 <li>本実験では、Aliceを用いて15台のJungleにツリートポロジーを形成させ、子ノードとJungleノード間のデータの通信を行なった</li>
|
35
|
237 </ul>
|
|
238
|
|
239
|
|
240 </div>
|
|
241 <div class='slide '>
|
|
242 <!-- _S9SLIDE_ -->
|
39
|
243 <h1 id="topologymanager">TopologyManager</h1>
|
35
|
244 <ul>
|
39
|
245 <li>TopologyManagerは、ネットワーク上の複数のサーバーノードにトポロジーを形成さる機能である</li>
|
|
246 <li>TopologyManagerにトポロジーの内容が書かれたトポロジーファイルを渡すことで、任意のトポロジーを構成させることができる。</li>
|
|
247 <li>本実験ではTopologyManagerにツリー型のトポロジーファイルを渡すことで、15台のJUngleでツリートポロジーを構成させた。</li>
|
|
248 </ul>
|
|
249
|
|
250
|
|
251 </div>
|
|
252 <div class='slide '>
|
|
253 <!-- _S9SLIDE_ -->
|
|
254 <h1 id="treeoperationlog">TreeOperationLog</h1>
|
|
255 <ul>
|
|
256 <li>TreeOperationLogには、Jungleのノード編集の履歴が入っている。</li>
|
|
257 <li>TreeOperationLogはAliceでも扱えるようシリアライズされている</li>
|
|
258 <li>Aliceによって他のノードへTreeOperationLogを送り、そこでTreeOperationLogと同じ編集をさせることで、トポロジー上でのデータの整合性を取る。</li>
|
37
|
259 </ul>
|
|
260
|
|
261
|
|
262 </div>
|
|
263 <div class='slide '>
|
|
264 <!-- _S9SLIDE_ -->
|
39
|
265 <h1 id="section-6">用意したスクリプト</h1>
|
37
|
266 <ul>
|
39
|
267 <li>任意のnodeと任意のトポロジーを形成するperlスクリプトを作成した</li>
|
35
|
268 </ul>
|
|
269
|
|
270
|
|
271 </div>
|
|
272 <div class='slide '>
|
|
273 <!-- _S9SLIDE_ -->
|
39
|
274 <h1 id="section-7">結果</h1>
|
|
275 <ul>
|
|
276 <li>無事7台の子ノードJungleからデータが書き込まれ、ルートノードJungleへデータがmergeされた時間を計測できた</li>
|
|
277 </ul>
|
|
278
|
|
279
|
|
280 </div>
|
|
281 <div class='slide '>
|
|
282 <!-- _S9SLIDE_ -->
|
|
283 <h1 id="section-8">まとめ</h1>
|
|
284 <ul>
|
|
285 <li>JungleとAliceで生じていたJava等のバージョンのズレを修正した</li>
|
|
286 <li>測定用に、任意のnodeと任意のトポロジーを形成するperlスクリプトを作成した</li>
|
|
287 <li>mavenリポジトリのキャッシュをクリアすることアップデートできた</li>
|
|
288 </ul>
|
|
289
|
|
290
|
|
291 </div>
|
|
292 <div class='slide '>
|
|
293 <!-- _S9SLIDE_ -->
|
|
294 <h1 id="section-9">今後の課題</h1>
|
35
|
295 <ul>
|
|
296 <li>
|
39
|
297 <p>今回構築した測定環境で、現在のJungleのmergeや分散アルゴリズムを研究したい</p>
|
35
|
298 </li>
|
|
299 <li>再接続時に、Jungleのノードのデータを再ロードできるプロトコルを定義したい
|
|
300 <ul>
|
|
301 <li>方法としては、他のノード、もしくはディスクからデータを読み込む</li>
|
|
302 </ul>
|
|
303 </li>
|
|
304 <li>ディスク上にしかないツリートポロジーを読み出すプロトコルを定義したい</li>
|
|
305 </ul>
|
|
306
|
39
|
307
|
|
308 </div>
|
|
309 <div class='slide '>
|
|
310 <!-- _S9SLIDE_ -->
|
|
311 <h1 id="section-10">計測結果</h1>
|
|
312
|
|
313
|
|
314 </div>
|
|
315 <div class='slide '>
|
|
316 <!-- _S9SLIDE_ -->
|
|
317 <h1 id="section-11">ジョブスクリプト</h1>
|
|
318
|
35
|
319 <style type="text/css">
|
|
320 <!--
|
|
321 *{
|
|
322 font:nomal 100% 'PT Sans';
|
|
323 }
|
|
324
|
|
325 ul > li{
|
|
326 list-style-type:disc;
|
|
327 }
|
|
328
|
|
329 .slide h1{
|
|
330 text-align:left;
|
|
331 color:#777777;
|
|
332 font:bold 40px/1.13 'PT Sans', sans-serif;
|
|
333 margin-bottom: 50px;
|
|
334 }
|
|
335
|
|
336 div#slide1 h1{
|
|
337 text-align:left;
|
|
338 color:#777777;
|
|
339 font:bold 60px 'PT Sans', sans-serif;
|
|
340 margin-bottom: 50px;
|
|
341 }
|
|
342
|
|
343 pre > code{
|
|
344 font-family:'Droid Sans Mono', 'Courier New', monospace;
|
|
345 }
|
|
346
|
|
347 img[alt="opt"]{
|
|
348 display: block;
|
|
349 margin-left: auto;
|
|
350 margin-right: auto;
|
|
351 }
|
|
352
|
|
353 img[alt="right"]{
|
|
354 margin-right: 0;
|
|
355 }
|
|
356
|
|
357 table {
|
|
358 margin-left: auto;
|
|
359 margin-right: auto;
|
|
360 }
|
|
361
|
|
362 th {
|
|
363 font-size: 120%;
|
|
364 }
|
|
365 -->
|
|
366 </style>
|
|
367
|
|
368 <!-- === end markdown block === -->
|
|
369 </div>
|
|
370
|
|
371
|
|
372 </div><!-- presentation -->
|
|
373 </body>
|
|
374 </html>
|