Mercurial > hg > Papers > 2014 > nobuyasu-master
comparison slides/index.html @ 114:d116e59fc8a2
Fixed references
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 04 Mar 2014 00:25:04 +0900 |
parents | f257e8ebd79c |
children |
comparison
equal
deleted
inserted
replaced
113:72e1662a302b | 114:d116e59fc8a2 |
---|---|
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <meta charset='utf-8'> | 4 <meta charset='utf-8'> |
5 <title>分散 Database Jungle に関する研究</title> | 5 <title>分散 Database Jungle に関する研究</title> |
6 <script src='slides.js'></script> | 6 |
7 <style media='screen,projection'> | 7 <!-- |
8 /**** | 8 Notes on CSS media types used: |
9 * Add your styles here. | 9 |
10 */ | 10 1) projection -> slideshow mode (display one slide at-a-time; hide all others) |
11 | 11 2) screen -> outline mode (display all slides-at-once on screen) |
12 body { font-size: 175%; } | 12 3) print -> print (and print preview) |
13 | 13 |
14 .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */ | 14 Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key |
15 | |
16 Questions, comments? | |
17 - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow | |
18 --> | |
19 | |
20 <!-- style sheet links --> | |
21 <link rel="stylesheet/less" href="themes/blank/projection.css.less" media="screen,projection"> | |
22 <link rel="stylesheet/less" href="themes/blank/screen.css.less" media="screen"> | |
23 <link rel="stylesheet/less" href="themes/blank/print.css.less" media="print"> | |
24 | |
25 <link rel="stylesheet/less" href="blank.css.less" media="screen,projection"> | |
26 | |
27 <!-- Notes about less css support | |
28 - all less stylesheets (*.css.less) need to get listed/loaded first (before the less.js script) | |
29 - find more info about less.js online @ http://lesscss.org | |
30 | |
31 ***** NOTE: | |
32 less.js browser script currently won’t work if you’re using Google Chrome | |
33 and the path to your page starts with "file:///" due to a known Chrome issue. | |
34 (In the developer/js console you will see: | |
35 XMLHttpRequest cannot load file:///../s6/shared/projection.css.less. | |
36 Cross origin requests are only supported for HTTP.) | |
37 --> | |
38 | |
39 <!-- add js libs (less, jquery) --> | |
40 <script src="js/less-1.1.4.min.js"></script> | |
41 <script src="js/jquery-1.7.min.js"></script> | |
42 | |
43 <!-- S6 JS --> | |
44 <script src="js/jquery.slideshow.js"></script> | |
45 <script src="js/jquery.slideshow.counter.js"></script> | |
46 <script src="js/jquery.slideshow.controls.js"></script> | |
47 <script src="js/jquery.slideshow.footer.js"></script> | |
48 <script src="js/jquery.slideshow.autoplay.js"></script> | |
49 <script> | |
50 $(document).ready( function() { | |
51 Slideshow.init(); | |
15 | 52 |
16 .slide { | 53 // Example 2: Start Off in Outline Mode |
17 font-family: 'Open Sans', Arial, sans-serif; | 54 // Slideshow.init( { mode: 'outline' } ); |
18 | 55 |
19 color: rgb(102, 102, 102); | 56 // Example 3: Use Custom Transition |
20 text-shadow: 0 1px 1px rgba(0, 0, 0, .1); | 57 // Slideshow.transition = transitionScrollUp; |
21 } | 58 // Slideshow.init(); |
59 | |
60 // Example 4: Start Off in Autoplay Mode with Custom Transition | |
61 // Slideshow.transition = transitionScrollUp; | |
62 // Slideshow.init( { mode: 'autoplay' } ); | |
63 } ); | |
64 </script> | |
65 | |
66 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> | |
67 <!--[if IE]> | |
68 <script src="js/jquery.microsoft.js"></script> | |
69 <![endif]--> | |
70 | |
71 </head> | |
72 <body> | |
73 | |
74 <div class="layout"> | |
75 <div id="header"></div> | |
76 <div id="footer"> | |
77 <h1>分散 Database Jungle に関する研究</h1> | |
78 <h2>琉球大学大学院 情報工学専攻 修士2年次 大城信康</h2> | |
79 </div> | |
80 </div> | |
81 | |
82 <div class="presentation"> | |
83 | |
84 <!-- add slides here; example --> | |
22 | 85 |
23 .slide h1, .slide h2, .slide h3 { | 86 <div class='slide cover'> |
24 color: rgb(51, 51, 51); | 87 <h1>分散 Database Jungleに関する研究</h1> |
25 } | 88 <ul> |
26 | 89 <p>琉球大学 大城信康 |
27 .slide pre { | 90 <br> |
28 font-family: 'Droid Sans Mono', 'Courier New', monospace; | 91 Feb 3, 2013 |
29 font-size: 80%; | 92 </p> |
30 | 93 </ul> |
31 padding: 5px 10px; | 94 </div> |
32 | 95 |
33 margin-top: 40px; | 96 <div class='slide'> |
34 margin-bottom: 40px; | 97 <h1>概要</h1> |
35 | |
36 color: black; | |
37 background: rgb(240, 240, 240); | |
38 border: 1px solid rgb(224, 224, 224); | |
39 box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1); | |
40 overflow: hidden; | |
41 } | |
42 | |
43 .slide code { | |
44 font-family: 'Droid Sans Mono', 'Courier New', monospace; | |
45 color: black; | |
46 } | |
47 | |
48 .slide h3 { | |
49 margin-top:-15px; | |
50 } | |
51 | |
52 </style> | |
53 </head> | |
54 <body> | |
55 | |
56 <section class='slides'> | |
57 <!-- Add your slides here. Delete or comment out the slides below. --> | |
58 | |
59 <article class='cover'> | |
60 <h1> | |
61 分散 Database Jungle に関する研究 | |
62 <br> | |
63 | |
64 </h1> | |
65 <p> | |
66 大城 信康 | |
67 <br> | |
68 Feb 3, 2013 | |
69 </p> | |
70 </article> | |
71 | |
72 <article> | |
73 <h3> | |
74 概要 | |
75 </h3> | |
76 <p>非破壊的木構造データベースJungleに分散実装を行い掲示板システムに特化したデーターベースを作成し、その評価を行った。</p> | 98 <p>非破壊的木構造データベースJungleに分散実装を行い掲示板システムに特化したデーターベースを作成し、その評価を行った。</p> |
77 <p>分散データベースCassandraより2倍以上速く、分散環境下においては10倍以上速い結果も確認された。</p> | 99 <p>分散データベースCassandraより2倍以上速く、分散環境下においては10倍以上速くなる結果も確認された。</p> |
78 <br/> | 100 <br/> |
79 </article> | 101 </div> |
80 | 102 |
81 <article> | 103 <div class='slide'> |
82 <h3> | 104 <h1>研究の背景と目的</h1> |
83 研究の目的と背景 | |
84 </h3> | |
85 <p>ウェブサービスにとってデータベースは必須であり、ウェブサービスの規模に比例してデータベースへの負荷も高まる。</p> | 105 <p>ウェブサービスにとってデータベースは必須であり、ウェブサービスの規模に比例してデータベースへの負荷も高まる。</p> |
86 <p>データベースの処理能力の高さはそのままウェブサービスの質に繋がるため、データベースのスケーラビリティの確保は重要である。</p> | 106 <p>データベースの処理能力の高さはそのままウェブサービスの質に繋がるため、データベースのスケーラビリティの確保は重要である。</p> |
87 <p>スケーラビリティ確保の方法としてデータ分散があるが、分散する方法により性能も変わってくる。</p> | 107 <p>スケーラビリティ確保の方法としてデータ分散があるが、分散する方法により性能も変わってくる。</p> |
88 <p>スケーラビリティのある分散データベースとしてJungleの実装を行う。</p> | 108 <p>ウェブサービスのなかでも、コンテンツマネジメントシステムに合ったスケーラビリティの確保ができるデータベースの開発を行う。</> |
89 </article> | 109 </div> |
90 | 110 |
91 | 111 <div class='slide'> |
92 <article> | 112 <h1> |
93 <h3> | |
94 ウェブサービスにおけるデータベースの重要性 | 113 ウェブサービスにおけるデータベースの重要性 |
95 </h3> | 114 </h1> |
96 <p>ウェブサービスへの負荷が高まることは、データベースへの負荷が高まることでもある。</p> | 115 <p>ウェブサービスへの負荷が高まることは、データベースへの負荷が高まることでもある。</p> |
97 <p>データベースの性能が低ければ負荷に耐え切れずサービスはダウンする</p> | 116 <p>データベースの性能が低ければ負荷に耐え切れずサービスはダウンする</p> |
98 <p style="text-align:center;"> | 117 <p style="text-align:center;"> |
99 <img src="./images/service_down.png"> | 118 <img src="./images/service_down.png"> |
100 </p> | 119 </p> |
101 <p>そのため、データベースにはスケーラビリティが必要</p> | 120 <p>そのため、データベースにはスケーラビリティが必要</p> |
102 </article> | 121 </div> |
103 | 122 |
104 <article> | 123 <div class='slide'> |
105 <h3> | 124 <h1> |
106 スケーラビリティとは | 125 スケーラビリティとは |
107 </h3> | 126 </h1> |
108 <p>システムが負荷の増大に対して柔軟に拡張して対応できる性質</p> | 127 <p>システムが負荷の増大に対して柔軟に拡張して対応できる性質</p> |
109 <p>主に次の2つの方法によりシステムはスケールされる</p> | 128 <p>主に次の2つの方法によりシステムはスケールされる</p> |
110 <ul> | 129 <ul> |
111 <li><font color="blue">スケールアップ</font>:<br/>高価な単一マシンによる性能アップ</li> | 130 <li><font color="blue">スケールアップ</font>:<br/>高価な単一マシンによる性能アップ</li> |
112 <br/> | 131 <br/> |
113 <li><font color="red">スケールアウト</font>:<br/>汎用的なマシンを複数台用意することで性能アップ</li> | 132 <li><font color="red">スケールアウト</font>:<br/>汎用的なマシンを複数台用意することで性能アップ</li> |
114 </ul> | 133 </ul> |
115 <p>分散システムにおいては<font color="red">スケールアウト</font>によりスケーラビリティを高める</p> | 134 <p>分散システムにおいては<font color="red">スケールアウト</font>によりスケーラビリティを高める</p> |
116 </article> | 135 <p style="text-align:center;"> |
117 | 136 <img style="" src="./images/scalability.png"> |
118 <article> | 137 </p> |
119 <h3> | 138 </div> |
139 | |
140 <div class='slide'> | |
141 <h1> | |
120 データベースのスケーラビリティ | 142 データベースのスケーラビリティ |
121 </h3> | 143 </h1> |
122 <p>データベースのスケーラビリティを考えるとき、どういう用途で使用するかを考えるのが重要。</p> | 144 <p>データベースのスケーラビリティを考えるとき、どういう用途で使用するかを考えるのが重要。</p> |
123 <li>例えば、掲示板システムにおいては、書き込みと読み込みが速いことが求められる。</li> | 145 <li>例えば、掲示板システムにおいては、書き込みと読み込みが速いことが求められる。</li> |
124 <br/> | 146 <br/> |
125 <p>ウェブサービスは、サービスの内容によってスケーラビリティの確保の仕方も変わってくる。</p> | 147 <p>ウェブサービスにおいても、どのようなサービスを行うかによってスケーラビリティの確保の仕方も変わってくる。</p> |
126 <p>本研究で開発しているデータベースはコンテンツマネジメントシステム(CMS)を対象としている。</p> | 148 <p>本研究で開発しているデータベースはコンテンツマネジメントシステム(CMS)を対象としている。</p> |
127 <p style="text-align:center;"> | 149 <br/> |
128 <img style="" src="./images/scalability.png"> | 150 </div> |
129 </p> | 151 |
130 | 152 <div class='slide'> |
131 </article> | 153 <h1> |
132 | |
133 <article> | |
134 <h3> | |
135 コンテンツマネジメントシステム(CMS) | 154 コンテンツマネジメントシステム(CMS) |
136 </h3> | 155 </h1> |
137 <p>Webコンテンツを構成するテキストや画像などのデジタルコンテンツを管理し配信するシステム。</p> | 156 <p>Webコンテンツを構成するテキストや画像などのデジタルコンテンツを管理し配信するシステム。</p> |
138 <li>例:ブログツール、Wiki</li> | 157 <li>例:ブログツール、Wiki</li> |
139 <p>分散コンテンツマネジメントシステムに求められること。</p> | 158 <p>分散コンテンツマネジメントシステムに求められること。</p> |
140 <li>Webコンテンツを分散して管理</li> | 159 <li>Webコンテンツを分散して管理</li> |
141 <li>スケールアウトするシステム</li> | 160 <li>スケールアウトするシステム</li> |
142 <p>データ全体の整合性に遅延がある、結果整合性でもよい。書き込みや読み込みを優先としたデータベースが必要。</p> | 161 <p>データ全体の整合性に遅延がある、結果整合性でもよい。書き込みや読み込みを優先としたデータベースが必要。</p> |
143 <p>そこで、非破壊的木構造データベースJungleの提案を行った。</p> | 162 <p>そこで、非破壊的木構造データベースJungleの開発が行われた。</p> |
144 </article> | 163 <br/> |
145 | 164 </div> |
146 <article> | 165 |
147 <h3>非破壊的木構造データベースJungle</h3> | 166 <div class='slide'> |
167 <h1> | |
168 非破壊的木構造データベースJungle | |
169 </h1> | |
148 <p>JungleはスケーラビリティのあるCMSの設計を目指して当研究室で開発されているデータベース。</p> | 170 <p>JungleはスケーラビリティのあるCMSの設計を目指して当研究室で開発されているデータベース。</p> |
149 <p>データを木構造で、さらに非破壊で保持する。</p> | 171 <p>データを木構造で、さらに非破壊で保持する。</p> |
150 <br/> | 172 </div> |
151 </article> | 173 |
152 | 174 <div class='slide'> |
153 <article> | 175 <h1> |
154 <h3> | |
155 非破壊的木構造 | 176 非破壊的木構造 |
156 </h3> | 177 </h1> |
157 <p>非破壊的木構造は一度作成したデータは変更しない</p> | 178 <p>非破壊的木構造は一度作成したデータは変更しない</p> |
158 <p>新しい木構造を作成することでデータの編集を行う</p> | 179 <p>新しい木構造を作成することでデータの編集を行う</p> |
159 <p style="text-align:center;"> | 180 <p style="text-align:center;"> |
160 <img style="width:700px;" src="./images/non_destructive_tree_edit2.png"> | 181 <img style="width:700px;" src="./images/non_destructive_tree_edit2.png"> |
161 </p> | 182 </p> |
162 <p></p> | 183 </div> |
163 </article> | 184 |
164 | 185 <div class='slide'> |
165 <article> | 186 <h1> |
166 <h3> | 187 非破壊的木構造の利点 |
167 非破壊的木構造の利点 | 188 </h1> |
168 </h3> | |
169 <p>非破壊的木構造は通常の木構造である破壊的木構造に比べ、以下のような利点を持つ</p> | 189 <p>非破壊的木構造は通常の木構造である破壊的木構造に比べ、以下のような利点を持つ</p> |
170 <ul> | 190 <ul> |
171 <li>一度作成したデータは変更されない</li> | 191 <li>一度作成したデータは変更されない</li> |
172 <li>データが変更されないため自由にコピーを作ることができる(いつでも読み込みが可能)</li> | 192 <li>データが変更されないため自由にコピーを作ることができる(いつでも読み込みが可能)</li> |
173 <li>ロックがすくない。ロックが必要なのは最新のルートノードを登録するときだけ</li> | 193 <li>ロックがすくない。ロックが必要なのは最新のルートノードを登録するときだけ</li> |
174 </ul> | 194 </ul> |
175 <p>ロックが少なく、いつでもコピーが可能なことから、非破壊的木構造はスケーラブルなシステムに有用となる</p> | 195 <p>ロックが少なく、いつでもコピーが可能なことから、非破壊的木構造はスケーラブルなシステムに有用となる</p> |
176 </article> | 196 </div> |
177 | 197 |
178 <article> | 198 <div class='slide'> |
179 <h3> | 199 <h1> |
180 Jungleの分散設計 | 200 Jungleの分散設計 |
181 </h3> | 201 </h1> |
182 <p>ここまでJungleに実装されている非破壊的木構造の利点について述べた。</p> | 202 <p>ここまでJungleに実装されている非破壊的木構造の利点について述べた。</p> |
183 <p>次に、Jungleにおける分散設計について述べる。</p> | 203 <p>次に、Jungleにおける分散設計について述べる。</p> |
184 <p>データ分散を行うにあたり、まず考えることはトポロジーの形成と他のノードからデータの伝搬の仕方である。</p> | 204 <p>データ分散を行うにあたり、まず考えることはトポロジーの形成と他のノードからデータの伝搬の仕方である。</p> |
185 <p>Jungleはこの問題に対し、ツリートポロジーを形成し、データ編集の際に発生するcommit logを他のノードに流すことで解決する。</p> | 205 <p>Jungleはこの問題に対し、ツリートポロジーを形成し、データ編集の際に発生するオペレーションを他のノードに流すことで解決する。</p> |
186 </article> | 206 </div> |
187 | 207 |
188 <article> | 208 <div class='slide'> |
189 <h3> | 209 <h1> |
190 Jungleの分散設計:トポロジー形成とログによるデータ分散 | 210 Jungleトポロジーの形成 |
191 </h3> | 211 </h1> |
192 <small> | 212 <p>Jungleのトポロジー形成には当研究室で開発している並列分散フレームワークAliceを使用する。</p> |
193 <table> | 213 <p>Aliceは以下の機能が提供されている</p> |
194 <tr> | 214 <ul> |
195 <th>commit log伝搬によるデータ分散</th> | 215 <li>複数のノードによる分散トポロジーの設定</li> |
196 </tr> | 216 <li>トポロジー上でのデータアクセス機構</li> |
197 <tr> | 217 </ul> |
198 <td> | 218 <p>JungleにAliceを組み込み、Jungleのノード同士でトポロジーを形成する。</p> |
199 <img src="./images/distributed_jungle.png"> | 219 <p>Aliceの機能である他ノードへのデータアクセス機構を使用してデータ分散を行う。</p> |
200 </td> | 220 </ul> |
201 </tr> | 221 </div> |
202 </table> | 222 |
203 <p>サーバノード同士でツリートポロジーを形成する。データ編集をどのように行ったのかを示すログ commit log を伝搬させデータの分散を行う。</p> | 223 |
204 </small> | 224 |
205 </article> | 225 <div class='slide'> |
206 | 226 <h1> |
207 <article> | 227 分散設計: データ編集オペレーション |
208 <h3> | 228 </h1> |
209 非破壊的木構造の利点を活かした分散設計 | 229 <p>Aliceにより、ネットワークトポロジーの作成と他サーバが持つデータアクセス機構を実装できた。</p> |
210 </h3> | 230 <p>次はどのデータを取得することでデータの分散を行うか考えなければならない。</p> |
211 <p>Jungleで扱うつもりのデータは結果整合性でもよいCMSを想定していることを始めに説明した。</p> | 231 <br> |
212 <p>そこでJungleはMergeを使うことでデータの整合性をとることにした。</p> | 232 <p>Jungleにはデータ編集に使われるオペレーションがある。</p> |
213 <p>Mergeとは、2つ以上の変更を1つの変更にまとめることである。</p> | 233 <p>データ編集に使われるオペレーションをそのまま他サーバノードへ流すことでデータの分散が行える。</p> |
214 <p>分散システムにおいては、2つ以上のデータの更新が同じデータに対して行われていた場合、 | 234 <p>オペレーションには次の4つがある</p> |
215 更新を受け取って新しいデータを作ることを指す。</p> | 235 <ul> |
216 <p>Mergeは自動で解決出来る場合とそうでない場合がある。</p> | 236 <li>addNewChild:子ノードの追加を行う</li> |
217 </article> | 237 <li>deleteChildAt:指定したノードの削除を行う</li> |
218 | 238 <li>putAttribute:子ノードにattributeに追加を行う</li> |
219 | 239 <li>deleteAttribute:子ノードのattributeを削除する</li> |
220 <article> | 240 <br> |
221 <h3> | 241 </div> |
222 Mergeによる更新の衝突を自然に解決 | 242 |
223 </h3> | 243 <div class='slide'> |
224 <small> | 244 <h1> |
225 <table style="font-size: 0.7em; width:100%;" > | 245 データ編集オペレーション |
226 <tr> | 246 </h1> |
227 <td><p style="margin-top:-5px; margin-bottom:-5px; text-align:center;"><img src="./images/tree_conflict.png"></p></td> | 247 <p>子ノードを追加し、その子ノードにattributeを追加する場合次のノードオペレーションが実行される。</p> |
228 </tr> | 248 <ol> |
229 <tr> | 249 <li>[APPEND_CHILD:<-1>:pos:0]</li> |
230 <td><p style="margin-top:-5px; margin-bottom:-5px; text-align:center;"><img src="./images/tree_conflict3.png"></p></td> | 250 <li>[PUT_ATTRIBUTE:<-1,0>:key:mes,value:hello]</li> |
231 </tr> | 251 </ol> |
232 </table> | 252 <p>このノードオペレーションの実行結果を図に示す。</p> |
233 <p style="margin-top:0px;">上の図は通常のデータ更新を示す</p> | 253 <p style="text-align:center;"> |
234 <p style="margin-top:-20px;">下の図は、同じ木に対して2つのデータの更新があったが編集を無事終えるケースを示す</p> | 254 <img src="./images/node_operation.png"> |
235 </small> | 255 </p> |
236 </article> | 256 <p><font color="">トポロジー上でノードオペレーションを渡すことで同じ編集を行いデータの分散を行う。</font></p> |
237 | 257 <br/> |
238 | 258 <br/> |
239 | 259 </div> |
240 <article> | 260 |
241 <h3> | 261 |
242 Mergeによる更新の衝突が自然に解決できない場合 | 262 <div class='slide'> |
243 </h3> | 263 <h1> |
244 <table style="font-size: 0.7em; width:100%;" > | 264 Jungle分散実装 |
245 <tr> | 265 </h1> |
246 <td><p style="margin-top:-5px; margin-bottom:-5px; text-align:center;"><img src="./images/tree_conflict2.png"></p></td> | 266 <p>以上の設計を元にJungleに分散実装を行った。</p> |
247 </tr> | 267 <p>以下の図はJungleにおけるデータ分散の様子を表している。</p> |
248 </table> | 268 <p style="text-align:center;"> |
249 <p>木の同じノードに対してデータの編集が行われた場合、どのような編集結果にすればよいかわからない。</p> | 269 <img src="./images/distributed_jungle.png"> |
250 <p>どのような木が組まれ、どのようにデータを保存するかはアプリケーション毎に変わってくる。そのため、アプリケーション毎に | 270 </p> |
251 Mergeアルゴリズムは考えなくてはならない。</p> | 271 <p>Aliceでトポロジーを形成後は、データ編集に使われたオペレーションを他サーバノードに送られる。</p> |
252 | 272 <p>オペレーションを受信したノードはデータ編集を行う。他にサーバが繋がっている場合はそちらにもオペレーションを送る。</p> |
253 </article> | 273 <br/> |
254 | 274 <br/> |
255 <article> | 275 </div> |
256 <h3> | 276 |
257 JungleとMergeの相性 | 277 <div class='slide'> |
258 </h3> | 278 <h1> |
259 <p>Jungleは非破壊で過去のデータも保持しているため、更新時に過去のデータを参照して自然なMergeを行うことが可能。</p> | 279 Jungle分散実装 |
260 <p>自然にMergeできない場合においても、アプリケーション毎にMergeアルゴリズムを設計することで対応する。</p> | 280 </h1> |
261 <p>Mergeが自動で行われるようになれば、Jungleで扱う木構造データは編集を自由に行うことができる。</p> | 281 <p>これまでの実装でJungleのデータが分散が行われるようになった。</p> |
262 <p>木構造データが自由に行えるようになれば、Jungleはデータのリクエストに対して手元のデータを返すことができる。</p> | 282 <p>しかしもう1つ問題がある。複数のノードから書き込まれるデータの整合性を取る方法が必要である。</p> |
263 <p>古いデータを編集されたものが更新されても、いずれはMergeにより最新のデータと合わせられるから。</p> | 283 <p>JungleではこれをMergeを使うことで自動的に解決する。</p> |
264 <p></p> | 284 <p>Mergeとは2つ以上の変更の結果を受けて1つの変更に変えることである。</p> |
265 </article> | 285 <p>今回は、性能比較に用いる掲示板システムにMergeの実装を行った。</p> |
266 | 286 <p>掲示板システムにおけるMergeを説明する。</p> |
267 | 287 </div> |
268 <article> | 288 |
269 <h3> | 289 <div class='slide'> |
270 Jungleの分散実装 | 290 <h1> |
271 </h3> | 291 掲示板システムにおけるMerge |
272 <p>以上がJungleにおける分散設計になる。</p> | 292 </h1> |
273 <br/> | 293 <p>2つの状態をもつ掲示板の書き込みができる。この2つの書き込みから新しい書き込みを作る。</p> |
274 <p>この分散設計を元にJungleのサーバノード同士でツリトポロジーを構成し、ログによるデータ分散を実装した。</p> | 294 <p style="text-align:center;"> |
275 <p>また、Mergeの例として掲示板プログラムにおけるMergeの実装も行った。</p> | 295 <img style="width:70%;" src="./images/bulletinboard_merge.png"> |
276 </article> | 296 </p> |
277 | 297 <p>掲示板はcommutativeなため、いつ書き込んでも良い。よってMergeが自動的に行える。</p> |
278 | 298 <br/> |
279 | 299 </div> |
280 <article> | 300 |
281 <h3> | 301 |
282 Jungleの分散実装:掲示板システムにおけるMerge | 302 |
283 </h3> | 303 |
284 <p>Jungleではアプリケーション毎にMergeアルゴリズムを設計</p> | 304 <div class='slide'> |
285 <p>後述する性能比較に用いた掲示板システムにおけるMergeの実装を考える</p> | 305 <h1> |
286 <p>掲示板システムにおけるデータ構造を以下に示す</p> | |
287 <p style="text-align:center;"> | |
288 <img src="./images/bulletinboard.png"> | |
289 </p> | |
290 </article> | |
291 | |
292 <article> | |
293 <h3> | |
294 Jungleの分散実装:掲示板システムにおけるMerge | |
295 </h3> | |
296 <small> | |
297 <table style="font-size: 0.7em; width:100%;" > | |
298 <tr> | |
299 <td><p>1</p></td> | |
300 <td><p style="margin-top:-5px; margin-bottom:-5px; text-align:center;"><img src="./images/merge_impl1.png"></p></td> | |
301 </tr> | |
302 <tr> | |
303 <td>2</td> | |
304 <td><p style="margin-top:-5px; margin-bottom:-5px; text-align:center;"><img src="./images/merge_impl2.png"></p></td> | |
305 </tr> | |
306 <tr> | |
307 <td>3</td> | |
308 <td><p style="margin-top:-5px; margin-bottom:-5px; text-align:center;"><img src="./images/merge_impl3.png"></p></td> | |
309 </tr> | |
310 </table> | |
311 </small> | |
312 </article> | |
313 | |
314 <article> | |
315 <h3> | |
316 分散データベースJungleの評価 | 306 分散データベースJungleの評価 |
317 </h3> | 307 </h1> |
318 <p>分散データベースとしてJungleの性能を評価する。</p> | 308 <p>分散データベースとしてJungleの性能を評価する。</p> |
319 <p>分散Key-ValueデーターべースCassandraと比較を行う。</p> | 309 <p>分散Key-ValueデーターべースCassandraと比較を行う。</p> |
320 <p>比較方法は、Jungle, Cassandra をそれぞれバックエンドとした簡易掲示板を作成する。</p> | 310 <p>比較方法は、Jungle, Cassandra をそれぞれバックエンドとした簡易掲示板を作成する。</p> |
321 <p>掲示板に対してHTTP Requestで並列に読み込みと書き込みの負荷をかけ計測する。</p> | 311 <p>掲示板に対してHTTP Requestで並列に読み込みと書き込みの負荷をかけ計測する。</p> |
322 <p>レスポンスが返る平均時間と標準偏差を求めグラフ化する</p> | 312 <p>レスポンスが返る平均時間と標準偏差を求めグラフ化する</p> |
323 </article> | 313 </div> |
324 | 314 |
325 | 315 |
326 <article> | 316 <div class='slide'> |
327 <h3> | 317 <h1> |
328 JungleとCassandraの比較方法 | 318 実験内容 |
329 </h3> | 319 </h1> |
330 <p>実験は以下の2つを行う</p> | 320 <p>実験は2つ行う</p> |
331 <small> | 321 <li>実験1:サーバを単体で起動し、複数のクライアントからの負荷をかける。</li> |
332 <table style="font-size: 0.7em; width:100%;"> | 322 <p style="text-align:center;"> |
333 <tr> | 323 <img style="width:60%;" src="./images/cluster_request_server.png"> |
334 <th>実験1:サーバ単体への負荷</th><th>実験2:複数台のサーバに対する負荷</th> | 324 </p> |
335 </tr> | 325 <p>サーバ単体の性能を比較する。</p> |
336 <tr> | 326 <p>クライアントの増加に対してサーバ1台にかかるリクエストも増加</p> |
337 <td><img style="width:400px;" src="./images/cluster_request_server.png"></td> | 327 </div> |
338 <td><img style="width:400px;" src="./images/clients_request_servers.png"></td> | 328 |
339 </tr> | 329 <div class='slide'> |
340 <tr> | 330 <h1> |
341 <td><p>複数のクライアントから単体のサーバへ負荷をかける</p></td> | 331 実験内容 |
342 <td><p>複数のクライアントから複数のサーバへ負荷をかける</p></td> | 332 </h1> |
343 </tr> | 333 <li>実験2:サーバを単体で起動し、複数のクライアントからの負荷をかける。</li> |
344 </table> | 334 <p style="text-align:center;"> |
345 <p>サーバ単体の性能と, 分散環境下における性能の2つを調べる。</p> | 335 <img style="width:60%;" src="./images/clients_request_servers.png"> |
346 <p>分散環境下におけるノードは全て繋がっている</p> | 336 </p> |
347 </small> | 337 <p>分散環境下における性能を比較する。</p> |
348 </article> | 338 <p>クライアントとサーバがともに増加するため、サーバ一台に対するリクエストは変わらず。</p> |
349 | 339 <p>サーバが全体で受けるリクエストは増加する。</p> |
350 <article> | 340 </div> |
351 <h3> | 341 |
352 実験に使用するサーバの仕様 | 342 <div class='slide'> |
353 </h3> | 343 <h1> |
354 <!-- | 344 実験1:単体サーバへの負荷 |
355 <p>実験1:単体サーバへの負荷で使用するサーバ側</p> | 345 </h1> |
356 --> | 346 <p style="text-align:center;"> |
357 <table style="font-size: 0.7em;"> | 347 <img style="width:70%;" src="./images/cluster_request_server.png"> |
358 <tr> | 348 </p> |
359 <th></th><th>ブレードサーバ</th> | 349 <p>レスポンス速度(縦軸の数値)が低い程良い</p> |
360 </tr> | 350 <p>クライアント(横軸の数値)の増加に対してレスポンス速度の増加がゆるやかなものほどよい</p> |
361 <tr> | 351 </div> |
362 <td>CPU</td> | 352 |
363 <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> | 353 <div class='slide'> |
364 </tr> | 354 <h1> |
365 <tr> | 355 単体サーバへの負荷:読み込み負荷 |
366 <td>コア数</td> | 356 </h1> |
367 <td>24</td> | 357 <object data="./images/bldsv12_read_bench.svg" type="image/svg+xml"></object> |
368 </tr> | 358 <p>Cassandraに比べJungleが全体的に良い結果を出している。</p> |
369 <tr> | 359 <p>台数が増える毎にJungleとCassandraの平均時間の差は離れている。</p> |
370 <td>Memory</td> | 360 <br/> |
371 <td>132GB</td> | 361 <br/> |
372 </tr> | 362 </div> |
373 <tr> | 363 |
374 <td>OS</td> | 364 |
375 <td>Fedora 16</td> | 365 <div class='slide'> |
376 </tr> | 366 <h1> |
377 <tr> | 367 単体サーバへの負荷:書き込み負荷 |
378 <td>HyperVisor</td> | 368 </h1> |
379 <td>なし(物理マシン)</td> | 369 <object data="./images/bldsv12_write_bench.svg" type="image/svg+xml"></object> |
380 </tr> | 370 <p>読み込み同様JungleがCassandraよりもより結果を出している。</p> |
381 </table> | 371 <p>読み込み以上にCassandraとの差がついている。</p> |
382 <small> | 372 <br/> |
383 <p style="">並列環境</p> | 373 </div> |
384 </small> | 374 |
385 <table style="font-size: 0.7em; margin-top:-20px; "> | 375 |
386 <tr> | 376 |
387 <th></th><th>VMWareクラスタ</th><th>KVMクラスタ</th> | 377 <div class='slide'> |
388 </tr> | 378 <h1> |
389 <tr> | 379 実験1の考察 |
390 <td>台数</td><td>48</td><td>12</td> | 380 </h1> |
391 </tr> | |
392 <tr> | |
393 <td>CPU</td> | |
394 <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> | |
395 <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> | |
396 </tr> | |
397 <tr> | |
398 <td>コア数</td> | |
399 <td>4</td> | |
400 <td>4</td> | |
401 </tr> | |
402 <tr> | |
403 <td>Memory</td> | |
404 <td>8GB</td> | |
405 <td>8GB</td> | |
406 </tr> | |
407 <tr> | |
408 <td>OS</td> | |
409 <td>Fedora 16</td> | |
410 <td>Fedora 16</td> | |
411 </tr> | |
412 <tr> | |
413 <td>HyperVisor</td> | |
414 <td>VMWare ESXi</td> | |
415 <td>KVM (Linux Fedora 16)</td> | |
416 </tr> | |
417 </table> | |
418 | |
419 </article> | |
420 | |
421 | |
422 <article> | |
423 <h3> | |
424 実験1:単体サーバへの負荷 | |
425 </h3> | |
426 <p style="text-align:center;"> | |
427 <img style="width:80%;" src="./images/cluster_request_server.png"> | |
428 </p> | |
429 </article> | |
430 | |
431 <article> | |
432 <h3> | |
433 実験1:単体サーバへの負荷(読み込み) | |
434 </h3> | |
435 <small> | |
436 <p>ブレードサーバ一台に対して複数のクライアントからの負荷</p> | |
437 <table style="text-align:center;font-size:0.7em;"> | |
438 <tr> | |
439 <td><img style="height:350px;" src="./images/bldsv12_read_bench.png"/></td> | |
440 </tr> | |
441 <tr> | |
442 <th style="text-align:center;">読み込みの実験結果</th> | |
443 </tr> | |
444 </table> | |
445 <p style="margin-top:0px;">JungleがCassandraより良い結果を示している</p> | |
446 <p style="margin-top:-20px;">クライアントが55台のときのJungleの最速とCassandraの最遅は3倍近く離れている</p> | |
447 </small> | |
448 </article> | |
449 | |
450 <article> | |
451 <h3> | |
452 実験1:単体サーバへの負荷(書き込み) | |
453 </h3> | |
454 <small> | |
455 <p>ブレードサーバ一台に対して複数のクライアントからの負荷</p> | |
456 <table style="text-align:center;font-size:0.7em;"> | |
457 <tr> | |
458 <td><img style="height:350px;" src="./images/bldsv12_write_bench.png"/></td> | |
459 </tr> | |
460 <tr> | |
461 <th style="text-align:center;">書き込みの実験結果</th> | |
462 </tr> | |
463 </table> | |
464 <p>読み込み同様Jungleのほうが良い結果を示している</p> | |
465 <p>読み込みよりJungleとCassandraの結果が重なる部分が減っている</p> | |
466 </small> | |
467 </article> | |
468 | |
469 <article> | |
470 <h3> | |
471 実験1の考察 | |
472 </h3> | |
473 <p>読み込み、書き込みともにJungleの性能がよく。平均だけみても2倍以上早い部分もある。</p> | 381 <p>読み込み、書き込みともにJungleの性能がよく。平均だけみても2倍以上早い部分もある。</p> |
474 <p>特に書き込みに関してはクライアントの数が増えるにつれ差が開いている。</p> | 382 <p>特に書き込みに関してはクライアントの数が増えるにつれ差が開いている。</p> |
475 <!-- | 383 <!-- |
476 <p>要因の1つとしてCassandraはディスクへ書き込みを行うが、Jungleは全てのデータをオンメモリで扱っていることもある</p> | 384 <p>要因の1つとしてCassandraはディスクへ書き込みを行うが、Jungleは全てのデータをオンメモリで扱っていることもある</p> |
477 <p>これはある意味当然だが、もう1つ要因をあげられる</p> | 385 <p>これはある意味当然だが、もう1つ要因をあげられる</p> |
478 --> | 386 --> |
479 <p>これはJungleが全体的にロックが少ないことが要因としてあげられる。</li> | 387 <p>これはJungleが全体的にロックが少ないことが要因としてあげられる。</p> |
480 <p>Jungleは非破壊でデータの保持をするため、読み込みは自由に行える。書き込み時には木のコピーをとりルートノードを入れ替える | 388 <p><font color="red">なぜロックが少ないか</font></p> |
389 <p>Jungleは非破壊でデータの保持をするため、読み込みは自由に行える。書き込み時には木のコピーをとりルートノードを入れ替える | |
481 ときのみロックが発生する。</p> | 390 ときのみロックが発生する。</p> |
482 </article> | 391 </div> |
483 | 392 |
484 <article> | 393 </div> |
485 <h3> | 394 |
486 実験2:分散環境下における負荷 | 395 <div class='slide'> |
487 </h3> | 396 <h1> |
397 実験2:分散環境下における負荷 | |
398 </h1> | |
488 <p style="text-align:center;"> | 399 <p style="text-align:center;"> |
489 <img style="width:80%;" src="./images/clients_request_servers.png"> | 400 <img style="width:70%;" src="./images/clients_request_servers.png"> |
490 </p> | 401 </p> |
491 </article> | 402 <p>レスポンス速度(縦軸の数値)が低い程良い</p> |
492 | 403 <p>クライアントとノードの数(横軸の数値)の増加に対してレスポンス速度の増加がゆるやかなものほどよい</p> |
493 <article> | 404 </div> |
494 <h3> | 405 |
495 実験2:分散環境下における読み込み | 406 |
496 </h3> | 407 <div class='slide'> |
497 <small> | 408 <h1> |
498 <table style="text-align:center;font-size:0.7em;"> | 409 分散環境下における負荷:読み込み |
499 <tr> | 410 </h1> |
500 <td><img style="height:350px;" src="./images/distributed_read_bench.png"> | 411 <object data="./images/distributed_read_bench.svg" type="image/svg+xml"></object> |
501 </tr> | 412 <p>QUORUM(緑)はCassandraが3ノードに書き込んでいる結果を示す。</p> |
502 <tr> | 413 <p>Jungle同じレスポンスを維持している。</p> |
503 <th style="text-align:center;">読み込みの実験結果</th> | 414 <p>Jungleは1秒から5秒をキープ</p> |
504 </tr> | 415 <br/> |
505 </table> | 416 </div> |
506 <p>CassandraはConsistency Level ONE(赤)とQUORUM(緑)両方を測定</p> | 417 |
507 <p>Jungleは1秒から5秒をキープ</p> | 418 |
508 </small> | 419 <div class='slide'> |
509 </article> | 420 <h1> |
510 | 421 分散環境下における負荷:書き込み |
511 <article> | 422 </h1> |
512 <h3> | 423 <object data="./images/distributed_write_bench.svg" type="image/svg+xml"></object> |
513 実験2:分散環境下における書き込み | 424 <p>QUORUM(緑)はCassandraが3ノードに書き込んでいる結果を示す。</p> |
514 </h3> | 425 <p>Jungle同じレスポンスを維持している。</p> |
515 <small> | 426 <p>Jungleは5.5秒から7.3秒をキープ</p> |
516 <table style="text-align:center;font-size:0.7em;"> | 427 <br/> |
517 <tr> | 428 <br/> |
518 <td><img style="height:350px;" src="./images/distributed_write_bench.png"> | 429 </div> |
519 </tr> | 430 |
520 <tr> | 431 <div class='slide'> |
521 <th style="text-align:center;">書き込みの実験結果</th> | 432 <h1> |
522 </tr> | |
523 </table> | |
524 <p>CassandraはConsistency Level ONE(赤)とQUORUM(緑)両方を測定</p> | |
525 <p>Jungleは5.5秒から7.3秒をキープ</p> | |
526 </small> | |
527 </article> | |
528 | |
529 | |
530 <article> | |
531 <h3> | |
532 実験2の考察 | 433 実験2の考察 |
533 </h3> | 434 </h1> |
534 <p>こちらもJungleがCassadraより良い結果を示した。実験1よりも差がでている。</p> | 435 <p>こちらもJungleがCassadraより良い結果を示した。実験1よりも差がでている。</p> |
535 <p>Jungleのグラフが横ばいになっていることに注目したい。</p> | 436 <p>Jungleのグラフが横ばいになっていることに注目したい。</p> |
536 <!-- | 437 <!-- |
537 <p>Cassandraはノードの数が増えるに従いデータを取りにいくノードも増えることでレスポンスが遅くなっている。</p> | 438 <p>Cassandraはノードの数が増えるに従いデータを取りにいくノードも増えることでレスポンスが遅くなっている。</p> |
538 --> | 439 --> |
539 <p>Jungleはリクエストに対し手元にあるデータを返す。そのためノードの数が増えてもレスポンスの早さを維持できる。</p> | 440 <p>Jungleはリクエストに対し手元にあるデータを返す。そのためノードの数が増えてもレスポンスの早さを維持できる。</p> |
540 <p>Cassandraはデータを持っている数台のノードに読み込みに行くという作業が入るためJungleより遅くなってしまう</p> | 441 <p>Cassandraはデータを持っている数台のノードに読み込みに行くという作業が入るためJungleより遅くなってしまう</p> |
541 <p>Jungleは同期を取らないためデータ全体の整合性は落ちるが、分散管理システムを参考にした設計の有用性を示すことができた。</p> | 442 <p>ただしJungleは全て非同期でデータの伝搬を行うため、データ全体の整合性は落ちる</p> |
542 </article> | 443 </div> |
543 | 444 |
544 | 445 <div class='slide'> |
545 <article> | 446 <h1> |
546 <h3> | |
547 まとめ | 447 まとめ |
548 </h3> | 448 </h1> |
549 <p>本研究では非破壊的木構造Jungleに分散データベースの実装を行った</p> | 449 <p>本研究では非破壊的木構造Jungleに分散データベースの実装を行った</p> |
550 <p>非破壊的木構造における利点を述べ、スケーラビリティの高い分散版管理システムとの類似性を述べた</p> | 450 <p>非破壊的木構造における利点を述べ、分散実装を行った。</p> |
451 <p>分散実装ではAliceを用いたトポロジー形成により、他ノードへデータ編集のオペレーションを送ることで | |
452 実装を行った。</p> | |
453 <p>データの整合性に関してはJungle側がMergeにより自動的にMergeを行うことで解決することを述べた。</p> | |
551 <p>Mergeアルゴリズムの1つとして掲示板プログラムにおけるMergeについて設計・実装を行った</p> | 454 <p>Mergeアルゴリズムの1つとして掲示板プログラムにおけるMergeについて設計・実装を行った</p> |
552 <p>性能比較の実験のためJungle、Cassandraで利用できる簡易掲示板の作成を行った</p> | 455 <p>性能比較の実験のためJungle、Cassandraで利用できる簡易掲示板の作成を行った</p> |
553 <p>実験は単体サーバと分散環境下において行い、どちらともCassandraよりよい結果をえることができた</p> | 456 <p>実験は単体サーバと分散環境下において行い、どちらともCassandraより平均時間が最低でも2倍以上速いという結果を示すことができた。</p> |
554 </article> | |
555 | |
556 <!-- | 457 <!-- |
557 <article> | 458 <p>特にQUORUMとの差は数十倍になるときもあった。</p> |
558 <h3> | 459 --> |
460 <br/> | |
461 </div> | |
462 | |
463 <div class='slide'> | |
464 <h1> | |
559 今後の課題 | 465 今後の課題 |
560 </h3> | 466 </h1> |
561 <p>push/pull方式による分断耐性の実装</p> | |
562 <ul> | |
563 <li>現実装ではJungleはデータ編集が行われた際に発生するログを非同期で他サーバノードへと送信している</li> | |
564 <li>だがこの方法では接続が切れた際に再接続を行ったノードが全てのデータをとることができない</li> | |
565 <li>そこで非同期とは別に同期をとり他ノードとに差分となるデータを送るということを行いたい</li> | |
566 <li>これは分散管理システムにおけるpush/pull APIにあたる</li> | |
567 </ul> | |
568 </article> | |
569 --> | |
570 <article> | |
571 <h3> | |
572 今後の課題 | |
573 </h3> | |
574 <p>データ分割の実装</p> | |
575 <ul> | |
576 <li>現在の実装は全てのノードで全てのデータを持たせている</li> | |
577 <li>この方法ではメモリの使用量が高いこととネットワーク帯域への負荷が懸念される</li> | |
578 <li>ノード単位で保持するデータを分ける実装が必要</li> | |
579 <li>その場合、木構造単位でノード毎にデータを分ける</li> | |
580 <li>持っていないデータの要求が来た場合は、データを持っているノードに取りに行くようにする</li> | |
581 </ul> | |
582 </article> | |
583 | |
584 <article> | |
585 <h3> | |
586 今後の課題 | |
587 </h3> | |
588 <p>Mergeアルゴリズムの設計</p> | 467 <p>Mergeアルゴリズムの設計</p> |
589 <ul> | 468 <ul> |
590 <li>JungleはMergeを使うことで更新データ衝突の問題を解決する。</li> | 469 <li>JungleはMergeを使うことで更新データ衝突の問題を解決する。</li> |
591 <li>今回実装した掲示板プログラムにおけるMergeは単純なもの。</li> | 470 <li>今回実装した掲示板プログラムにおけるMergeは単純なもの。</li> |
592 <li>他のアプリケーションではどのようにMergeを行うのか考察が必要。</li> | 471 <li>他のアプリケーションではどのようにMergeを行うのか考察が必要。</li> |
593 </ul> | 472 </ul> |
594 </article> | 473 </div> |
595 | 474 |
596 | 475 |
597 <article> | 476 |
598 <h3> | 477 <div class='slide'> |
478 <h1> | |
599 今後の課題 | 479 今後の課題 |
600 </h3> | 480 </h1> |
601 <p>過去のデータの掃除について</p> | 481 <p>過去のデータの掃除について</p> |
602 <ul> | 482 <ul> |
603 <li>Jungleは非破壊でデータを保持するため過去のメモリの使用量が大きい</li> | 483 <li>Jungleは非破壊でデータを保持するため過去のメモリの使用量が大きい</li> |
604 <li>ある程度の単位で過去のデータの掃除を行いたい</li> | 484 <li>ある程度の単位で過去のデータの掃除を行いたい</li> |
605 <li>そのためにはどのノードがどのデータを持っているかという情報を扱うことが必要</li> | 485 <li>そのためにはどのノードがどのデータを持っているかという情報を扱うことが必要</li> |
606 <li>どれくらいデータが古くなると掃除を行うか判断が必要</li> | 486 <li>どれくらいデータが古くなると掃除を行うか判断が必要</li> |
607 </ul> | 487 </ul> |
608 </article> | 488 </div> |
609 | 489 |
610 <article> | 490 |
611 <h3> | 491 <div class='slide'> |
612 </h3> | 492 <h1> |
613 <p></p> | 493 |
614 <ul> | 494 </h1> |
615 </ul> | 495 |
616 </article> | 496 </div> |
617 | 497 |
618 <article> | 498 <div class='slide'> |
619 <h3> | 499 <h1> |
620 Mergeは必ずできるのか | 500 |
621 </h3> | 501 </h1> |
622 <p>Mergeを必ず行うことは難しい</p> | 502 |
623 <p>例えば、更新するデータが画像だった場合、2つの画像のデータから新しい画像を作るわけにはいかない。</p> | 503 </div> |
624 <p>後に更新したものを優先するといった方法をとるか、ユーザの選択に委ねるしかない。</p> | 504 |
625 </article> | 505 <div class='slide'> |
626 | 506 <h1> |
627 | |
628 <article> | |
629 <h3> | |
630 分散Key-ValueストアCassandraの特徴 | 507 分散Key-ValueストアCassandraの特徴 |
631 </h3> | 508 </h1> |
632 <small style="line-height:30px;"> | |
633 <p>ring型トポロジーを形成。ring上にはHash値があり、書き込むデータのキーのハッシュ値により書き込むノードを決定</p> | 509 <p>ring型トポロジーを形成。ring上にはHash値があり、書き込むデータのキーのハッシュ値により書き込むノードを決定</p> |
634 <p>1つのデータの複製を最大何とるかというReplication factorの設定がある。</p> | 510 <p>1つのデータの複製を最大何とるかというReplication factorの設定がある。</p> |
635 <p>Consistency Levelというデータの読み書きの際に何台のノードから読み書きするかを決定できる</p> | 511 <p>Consistency Levelというデータの読み書きの際に何台のノードから読み書きするかを決定できる</p> |
636 <p>Consistency LevelにはONE,QUORUM,ALLがある。QUORUMはReplication factorの数/2+1 のノードに読み書きする。</p> | 512 <p>Consistency LevelにはONE,QUORUM,ALLがある。QUORUMはReplication factorの数/2+1 のノードに読み書きする。</p> |
637 </small> | 513 <p style="text-align:center;"> |
638 <p> | |
639 <img style="margin-top:-30px;" src="./images/consistency_quorum.png"> | 514 <img style="margin-top:-30px;" src="./images/consistency_quorum.png"> |
640 </p> | 515 </p> |
641 </article> | 516 </div> |
642 | 517 |
643 | 518 <div class='slide'> |
644 <article> | 519 <h1> |
645 <h3> | 520 実験に使用するサーバの仕様 |
646 Jungleの分散設計:分散版管理システム | 521 </h1> |
647 </h3> | 522 <table style="font-size: 0.7em;"> |
648 <p>Jungleは分散設計を行うにあたってGitやMercurialといった分散版管理システムを意識している</p> | 523 <tr> |
649 <p style="margin-top:-10px;">分散版管理システムとは多人数によるソフトウェア開発において変更履歴を管理するシステム</p> | 524 <th></th><th>ブレードサーバ</th> |
650 <p style="margin-top:-10px;">分散版管理システムは次の特徴とAPIを持つ</p> | 525 </tr> |
651 <ul> | 526 <tr> |
652 <li>開発者それぞれがリポジトリのクローンしてローカルに持ち、開発はローカルのリポジトリを通すことで行われる</li> | 527 <td>CPU</td> |
653 <li>ローカルのリポジトリは独立に存在し、サーバ上にある他人のリポジトリから変更履歴をとることができる。また自身の変更履歴を伝えることもできる</li> | 528 <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> |
654 <li>データ更新時に先に別の更新が入っていた(衝突)場合はMergeによりデータの整合性をとる</li> | 529 </tr> |
655 </ul> | 530 <tr> |
656 </article> | 531 <td>コア数</td> |
657 | 532 <td>24</td> |
658 <article> | 533 </tr> |
659 <h3> | 534 <tr> |
660 Jungleの分散設計:分散版管理システム | 535 <td>Memory</td> |
661 </h3> | 536 <td>132GB</td> |
662 <p>分散版管理システムAPI</p> | 537 </tr> |
663 <ul style="margin-top:-20px;"> | 538 <tr> |
664 <li>commit:データに変更を加えたことをリポジトリに登録</li> | 539 <td>OS</td> |
665 <li>push:ローカルのリポジトリで行った変更履歴を他のリポジトリへまとめて送る</li> | 540 <td>Fedora 16</td> |
666 <li>pull:他のリポジトリからの変更履歴をまとめて受け取る</li> | 541 </tr> |
667 </ul> | 542 <tr> |
668 <p style="text-align:center;"> | 543 <td>HyperVisor</td> |
669 <img style="height:200px;" src="./images/distributed_repository.png"> | 544 <td>なし(物理マシン)</td> |
670 </p> | 545 </tr> |
671 <small> | 546 </table> |
672 <p>分版版管理システムはリポジトリが壊れても別のリポジトリよりデータを復旧できることと、push/pullそれとMergeによる整合性 | 547 <small> |
673 の確保で、高いスケーラビリティを持っている</p> | 548 <p style="">並列環境</p> |
674 </small> | 549 </small> |
675 </article> | 550 <table style="font-size: 0.7em; margin-top:-20px; "> |
676 | 551 <tr> |
677 <article> | 552 <th></th><th>VMWareクラスタ</th><th>KVMクラスタ</th> |
678 <h3> | 553 </tr> |
679 Jungleの分散設計:分散版管理システム | 554 <tr> |
680 </h3> | 555 <td>台数</td><td>48</td><td>12</td> |
681 <p>Jungleと分散版管理システムには似通った点がある</p> | 556 </tr> |
682 <li>どちらもデータのコピーが自由</li> | 557 <tr> |
683 <li>データ更新しても過去のデータに影響を与えない</li> | 558 <td>CPU</td> |
684 <br/> | 559 <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> |
685 <p><font color="red">同じAPIを実装することで、分散版管理システムと同じく高いスケーラビリティが期待できる</font></p> | 560 <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> |
686 <p>具体的には</p> | 561 </tr> |
687 <ul> | 562 <tr> |
688 <li>pushやpullによる定期的なデータの更新</li> | 563 <td>コア数</td> |
689 <li>Mergeによる更新データ衝突の解決</li> | 564 <td>4</td> |
690 </ul> | 565 <td>4</td> |
691 </article> | 566 </tr> |
692 | 567 <tr> |
693 | 568 <td>Memory</td> |
694 | 569 <td>8GB</td> |
695 | 570 <td>8GB</td> |
696 </section> | 571 </tr> |
697 | 572 <tr> |
698 </body> | 573 <td>OS</td> |
574 <td>Fedora 16</td> | |
575 <td>Fedora 16</td> | |
576 </tr> | |
577 <tr> | |
578 <td>HyperVisor</td> | |
579 <td>VMWare ESXi</td> | |
580 <td>KVM (Linux Fedora 16)</td> | |
581 </tr> | |
582 </table> | |
583 | |
584 </div> | |
585 | |
586 | |
587 | |
588 | |
589 | |
590 | |
591 </div> <!-- presentation --> | |
592 </body> | |
699 </html> | 593 </html> |