Mercurial > hg > Papers > 2014 > nobuyasu-master
view 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 |
line wrap: on
line source
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>分散 Database Jungle に関する研究</title> <!-- Notes on CSS media types used: 1) projection -> slideshow mode (display one slide at-a-time; hide all others) 2) screen -> outline mode (display all slides-at-once on screen) 3) print -> print (and print preview) Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key Questions, comments? - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow --> <!-- style sheet links --> <link rel="stylesheet/less" href="themes/blank/projection.css.less" media="screen,projection"> <link rel="stylesheet/less" href="themes/blank/screen.css.less" media="screen"> <link rel="stylesheet/less" href="themes/blank/print.css.less" media="print"> <link rel="stylesheet/less" href="blank.css.less" media="screen,projection"> <!-- Notes about less css support - all less stylesheets (*.css.less) need to get listed/loaded first (before the less.js script) - find more info about less.js online @ http://lesscss.org ***** NOTE: less.js browser script currently won’t work if you’re using Google Chrome and the path to your page starts with "file:///" due to a known Chrome issue. (In the developer/js console you will see: XMLHttpRequest cannot load file:///../s6/shared/projection.css.less. Cross origin requests are only supported for HTTP.) --> <!-- add js libs (less, jquery) --> <script src="js/less-1.1.4.min.js"></script> <script src="js/jquery-1.7.min.js"></script> <!-- S6 JS --> <script src="js/jquery.slideshow.js"></script> <script src="js/jquery.slideshow.counter.js"></script> <script src="js/jquery.slideshow.controls.js"></script> <script src="js/jquery.slideshow.footer.js"></script> <script src="js/jquery.slideshow.autoplay.js"></script> <script> $(document).ready( function() { Slideshow.init(); // Example 2: Start Off in Outline Mode // Slideshow.init( { mode: 'outline' } ); // Example 3: Use Custom Transition // Slideshow.transition = transitionScrollUp; // Slideshow.init(); // Example 4: Start Off in Autoplay Mode with Custom Transition // Slideshow.transition = transitionScrollUp; // Slideshow.init( { mode: 'autoplay' } ); } ); </script> <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> <!--[if IE]> <script src="js/jquery.microsoft.js"></script> <![endif]--> </head> <body> <div class="layout"> <div id="header"></div> <div id="footer"> <h1>分散 Database Jungle に関する研究</h1> <h2>琉球大学大学院 情報工学専攻 修士2年次 大城信康</h2> </div> </div> <div class="presentation"> <!-- add slides here; example --> <div class='slide cover'> <h1>分散 Database Jungleに関する研究</h1> <ul> <p>琉球大学 大城信康 <br> Feb 3, 2013 </p> </ul> </div> <div class='slide'> <h1>概要</h1> <p>非破壊的木構造データベースJungleに分散実装を行い掲示板システムに特化したデーターベースを作成し、その評価を行った。</p> <p>分散データベースCassandraより2倍以上速く、分散環境下においては10倍以上速くなる結果も確認された。</p> <br/> </div> <div class='slide'> <h1>研究の背景と目的</h1> <p>ウェブサービスにとってデータベースは必須であり、ウェブサービスの規模に比例してデータベースへの負荷も高まる。</p> <p>データベースの処理能力の高さはそのままウェブサービスの質に繋がるため、データベースのスケーラビリティの確保は重要である。</p> <p>スケーラビリティ確保の方法としてデータ分散があるが、分散する方法により性能も変わってくる。</p> <p>ウェブサービスのなかでも、コンテンツマネジメントシステムに合ったスケーラビリティの確保ができるデータベースの開発を行う。</> </div> <div class='slide'> <h1> ウェブサービスにおけるデータベースの重要性 </h1> <p>ウェブサービスへの負荷が高まることは、データベースへの負荷が高まることでもある。</p> <p>データベースの性能が低ければ負荷に耐え切れずサービスはダウンする</p> <p style="text-align:center;"> <img src="./images/service_down.png"> </p> <p>そのため、データベースにはスケーラビリティが必要</p> </div> <div class='slide'> <h1> スケーラビリティとは </h1> <p>システムが負荷の増大に対して柔軟に拡張して対応できる性質</p> <p>主に次の2つの方法によりシステムはスケールされる</p> <ul> <li><font color="blue">スケールアップ</font>:<br/>高価な単一マシンによる性能アップ</li> <br/> <li><font color="red">スケールアウト</font>:<br/>汎用的なマシンを複数台用意することで性能アップ</li> </ul> <p>分散システムにおいては<font color="red">スケールアウト</font>によりスケーラビリティを高める</p> <p style="text-align:center;"> <img style="" src="./images/scalability.png"> </p> </div> <div class='slide'> <h1> データベースのスケーラビリティ </h1> <p>データベースのスケーラビリティを考えるとき、どういう用途で使用するかを考えるのが重要。</p> <li>例えば、掲示板システムにおいては、書き込みと読み込みが速いことが求められる。</li> <br/> <p>ウェブサービスにおいても、どのようなサービスを行うかによってスケーラビリティの確保の仕方も変わってくる。</p> <p>本研究で開発しているデータベースはコンテンツマネジメントシステム(CMS)を対象としている。</p> <br/> </div> <div class='slide'> <h1> コンテンツマネジメントシステム(CMS) </h1> <p>Webコンテンツを構成するテキストや画像などのデジタルコンテンツを管理し配信するシステム。</p> <li>例:ブログツール、Wiki</li> <p>分散コンテンツマネジメントシステムに求められること。</p> <li>Webコンテンツを分散して管理</li> <li>スケールアウトするシステム</li> <p>データ全体の整合性に遅延がある、結果整合性でもよい。書き込みや読み込みを優先としたデータベースが必要。</p> <p>そこで、非破壊的木構造データベースJungleの開発が行われた。</p> <br/> </div> <div class='slide'> <h1> 非破壊的木構造データベースJungle </h1> <p>JungleはスケーラビリティのあるCMSの設計を目指して当研究室で開発されているデータベース。</p> <p>データを木構造で、さらに非破壊で保持する。</p> </div> <div class='slide'> <h1> 非破壊的木構造 </h1> <p>非破壊的木構造は一度作成したデータは変更しない</p> <p>新しい木構造を作成することでデータの編集を行う</p> <p style="text-align:center;"> <img style="width:700px;" src="./images/non_destructive_tree_edit2.png"> </p> </div> <div class='slide'> <h1> 非破壊的木構造の利点 </h1> <p>非破壊的木構造は通常の木構造である破壊的木構造に比べ、以下のような利点を持つ</p> <ul> <li>一度作成したデータは変更されない</li> <li>データが変更されないため自由にコピーを作ることができる(いつでも読み込みが可能)</li> <li>ロックがすくない。ロックが必要なのは最新のルートノードを登録するときだけ</li> </ul> <p>ロックが少なく、いつでもコピーが可能なことから、非破壊的木構造はスケーラブルなシステムに有用となる</p> </div> <div class='slide'> <h1> Jungleの分散設計 </h1> <p>ここまでJungleに実装されている非破壊的木構造の利点について述べた。</p> <p>次に、Jungleにおける分散設計について述べる。</p> <p>データ分散を行うにあたり、まず考えることはトポロジーの形成と他のノードからデータの伝搬の仕方である。</p> <p>Jungleはこの問題に対し、ツリートポロジーを形成し、データ編集の際に発生するオペレーションを他のノードに流すことで解決する。</p> </div> <div class='slide'> <h1> Jungleトポロジーの形成 </h1> <p>Jungleのトポロジー形成には当研究室で開発している並列分散フレームワークAliceを使用する。</p> <p>Aliceは以下の機能が提供されている</p> <ul> <li>複数のノードによる分散トポロジーの設定</li> <li>トポロジー上でのデータアクセス機構</li> </ul> <p>JungleにAliceを組み込み、Jungleのノード同士でトポロジーを形成する。</p> <p>Aliceの機能である他ノードへのデータアクセス機構を使用してデータ分散を行う。</p> </ul> </div> <div class='slide'> <h1> 分散設計: データ編集オペレーション </h1> <p>Aliceにより、ネットワークトポロジーの作成と他サーバが持つデータアクセス機構を実装できた。</p> <p>次はどのデータを取得することでデータの分散を行うか考えなければならない。</p> <br> <p>Jungleにはデータ編集に使われるオペレーションがある。</p> <p>データ編集に使われるオペレーションをそのまま他サーバノードへ流すことでデータの分散が行える。</p> <p>オペレーションには次の4つがある</p> <ul> <li>addNewChild:子ノードの追加を行う</li> <li>deleteChildAt:指定したノードの削除を行う</li> <li>putAttribute:子ノードにattributeに追加を行う</li> <li>deleteAttribute:子ノードのattributeを削除する</li> <br> </div> <div class='slide'> <h1> データ編集オペレーション </h1> <p>子ノードを追加し、その子ノードにattributeを追加する場合次のノードオペレーションが実行される。</p> <ol> <li>[APPEND_CHILD:<-1>:pos:0]</li> <li>[PUT_ATTRIBUTE:<-1,0>:key:mes,value:hello]</li> </ol> <p>このノードオペレーションの実行結果を図に示す。</p> <p style="text-align:center;"> <img src="./images/node_operation.png"> </p> <p><font color="">トポロジー上でノードオペレーションを渡すことで同じ編集を行いデータの分散を行う。</font></p> <br/> <br/> </div> <div class='slide'> <h1> Jungle分散実装 </h1> <p>以上の設計を元にJungleに分散実装を行った。</p> <p>以下の図はJungleにおけるデータ分散の様子を表している。</p> <p style="text-align:center;"> <img src="./images/distributed_jungle.png"> </p> <p>Aliceでトポロジーを形成後は、データ編集に使われたオペレーションを他サーバノードに送られる。</p> <p>オペレーションを受信したノードはデータ編集を行う。他にサーバが繋がっている場合はそちらにもオペレーションを送る。</p> <br/> <br/> </div> <div class='slide'> <h1> Jungle分散実装 </h1> <p>これまでの実装でJungleのデータが分散が行われるようになった。</p> <p>しかしもう1つ問題がある。複数のノードから書き込まれるデータの整合性を取る方法が必要である。</p> <p>JungleではこれをMergeを使うことで自動的に解決する。</p> <p>Mergeとは2つ以上の変更の結果を受けて1つの変更に変えることである。</p> <p>今回は、性能比較に用いる掲示板システムにMergeの実装を行った。</p> <p>掲示板システムにおけるMergeを説明する。</p> </div> <div class='slide'> <h1> 掲示板システムにおけるMerge </h1> <p>2つの状態をもつ掲示板の書き込みができる。この2つの書き込みから新しい書き込みを作る。</p> <p style="text-align:center;"> <img style="width:70%;" src="./images/bulletinboard_merge.png"> </p> <p>掲示板はcommutativeなため、いつ書き込んでも良い。よってMergeが自動的に行える。</p> <br/> </div> <div class='slide'> <h1> 分散データベースJungleの評価 </h1> <p>分散データベースとしてJungleの性能を評価する。</p> <p>分散Key-ValueデーターべースCassandraと比較を行う。</p> <p>比較方法は、Jungle, Cassandra をそれぞれバックエンドとした簡易掲示板を作成する。</p> <p>掲示板に対してHTTP Requestで並列に読み込みと書き込みの負荷をかけ計測する。</p> <p>レスポンスが返る平均時間と標準偏差を求めグラフ化する</p> </div> <div class='slide'> <h1> 実験内容 </h1> <p>実験は2つ行う</p> <li>実験1:サーバを単体で起動し、複数のクライアントからの負荷をかける。</li> <p style="text-align:center;"> <img style="width:60%;" src="./images/cluster_request_server.png"> </p> <p>サーバ単体の性能を比較する。</p> <p>クライアントの増加に対してサーバ1台にかかるリクエストも増加</p> </div> <div class='slide'> <h1> 実験内容 </h1> <li>実験2:サーバを単体で起動し、複数のクライアントからの負荷をかける。</li> <p style="text-align:center;"> <img style="width:60%;" src="./images/clients_request_servers.png"> </p> <p>分散環境下における性能を比較する。</p> <p>クライアントとサーバがともに増加するため、サーバ一台に対するリクエストは変わらず。</p> <p>サーバが全体で受けるリクエストは増加する。</p> </div> <div class='slide'> <h1> 実験1:単体サーバへの負荷 </h1> <p style="text-align:center;"> <img style="width:70%;" src="./images/cluster_request_server.png"> </p> <p>レスポンス速度(縦軸の数値)が低い程良い</p> <p>クライアント(横軸の数値)の増加に対してレスポンス速度の増加がゆるやかなものほどよい</p> </div> <div class='slide'> <h1> 単体サーバへの負荷:読み込み負荷 </h1> <object data="./images/bldsv12_read_bench.svg" type="image/svg+xml"></object> <p>Cassandraに比べJungleが全体的に良い結果を出している。</p> <p>台数が増える毎にJungleとCassandraの平均時間の差は離れている。</p> <br/> <br/> </div> <div class='slide'> <h1> 単体サーバへの負荷:書き込み負荷 </h1> <object data="./images/bldsv12_write_bench.svg" type="image/svg+xml"></object> <p>読み込み同様JungleがCassandraよりもより結果を出している。</p> <p>読み込み以上にCassandraとの差がついている。</p> <br/> </div> <div class='slide'> <h1> 実験1の考察 </h1> <p>読み込み、書き込みともにJungleの性能がよく。平均だけみても2倍以上早い部分もある。</p> <p>特に書き込みに関してはクライアントの数が増えるにつれ差が開いている。</p> <!-- <p>要因の1つとしてCassandraはディスクへ書き込みを行うが、Jungleは全てのデータをオンメモリで扱っていることもある</p> <p>これはある意味当然だが、もう1つ要因をあげられる</p> --> <p>これはJungleが全体的にロックが少ないことが要因としてあげられる。</p> <p><font color="red">なぜロックが少ないか</font></p> <p>Jungleは非破壊でデータの保持をするため、読み込みは自由に行える。書き込み時には木のコピーをとりルートノードを入れ替える ときのみロックが発生する。</p> </div> </div> <div class='slide'> <h1> 実験2:分散環境下における負荷 </h1> <p style="text-align:center;"> <img style="width:70%;" src="./images/clients_request_servers.png"> </p> <p>レスポンス速度(縦軸の数値)が低い程良い</p> <p>クライアントとノードの数(横軸の数値)の増加に対してレスポンス速度の増加がゆるやかなものほどよい</p> </div> <div class='slide'> <h1> 分散環境下における負荷:読み込み </h1> <object data="./images/distributed_read_bench.svg" type="image/svg+xml"></object> <p>QUORUM(緑)はCassandraが3ノードに書き込んでいる結果を示す。</p> <p>Jungle同じレスポンスを維持している。</p> <p>Jungleは1秒から5秒をキープ</p> <br/> </div> <div class='slide'> <h1> 分散環境下における負荷:書き込み </h1> <object data="./images/distributed_write_bench.svg" type="image/svg+xml"></object> <p>QUORUM(緑)はCassandraが3ノードに書き込んでいる結果を示す。</p> <p>Jungle同じレスポンスを維持している。</p> <p>Jungleは5.5秒から7.3秒をキープ</p> <br/> <br/> </div> <div class='slide'> <h1> 実験2の考察 </h1> <p>こちらもJungleがCassadraより良い結果を示した。実験1よりも差がでている。</p> <p>Jungleのグラフが横ばいになっていることに注目したい。</p> <!-- <p>Cassandraはノードの数が増えるに従いデータを取りにいくノードも増えることでレスポンスが遅くなっている。</p> --> <p>Jungleはリクエストに対し手元にあるデータを返す。そのためノードの数が増えてもレスポンスの早さを維持できる。</p> <p>Cassandraはデータを持っている数台のノードに読み込みに行くという作業が入るためJungleより遅くなってしまう</p> <p>ただしJungleは全て非同期でデータの伝搬を行うため、データ全体の整合性は落ちる</p> </div> <div class='slide'> <h1> まとめ </h1> <p>本研究では非破壊的木構造Jungleに分散データベースの実装を行った</p> <p>非破壊的木構造における利点を述べ、分散実装を行った。</p> <p>分散実装ではAliceを用いたトポロジー形成により、他ノードへデータ編集のオペレーションを送ることで 実装を行った。</p> <p>データの整合性に関してはJungle側がMergeにより自動的にMergeを行うことで解決することを述べた。</p> <p>Mergeアルゴリズムの1つとして掲示板プログラムにおけるMergeについて設計・実装を行った</p> <p>性能比較の実験のためJungle、Cassandraで利用できる簡易掲示板の作成を行った</p> <p>実験は単体サーバと分散環境下において行い、どちらともCassandraより平均時間が最低でも2倍以上速いという結果を示すことができた。</p> <!-- <p>特にQUORUMとの差は数十倍になるときもあった。</p> --> <br/> </div> <div class='slide'> <h1> 今後の課題 </h1> <p>Mergeアルゴリズムの設計</p> <ul> <li>JungleはMergeを使うことで更新データ衝突の問題を解決する。</li> <li>今回実装した掲示板プログラムにおけるMergeは単純なもの。</li> <li>他のアプリケーションではどのようにMergeを行うのか考察が必要。</li> </ul> </div> <div class='slide'> <h1> 今後の課題 </h1> <p>過去のデータの掃除について</p> <ul> <li>Jungleは非破壊でデータを保持するため過去のメモリの使用量が大きい</li> <li>ある程度の単位で過去のデータの掃除を行いたい</li> <li>そのためにはどのノードがどのデータを持っているかという情報を扱うことが必要</li> <li>どれくらいデータが古くなると掃除を行うか判断が必要</li> </ul> </div> <div class='slide'> <h1> </h1> </div> <div class='slide'> <h1> </h1> </div> <div class='slide'> <h1> 分散Key-ValueストアCassandraの特徴 </h1> <p>ring型トポロジーを形成。ring上にはHash値があり、書き込むデータのキーのハッシュ値により書き込むノードを決定</p> <p>1つのデータの複製を最大何とるかというReplication factorの設定がある。</p> <p>Consistency Levelというデータの読み書きの際に何台のノードから読み書きするかを決定できる</p> <p>Consistency LevelにはONE,QUORUM,ALLがある。QUORUMはReplication factorの数/2+1 のノードに読み書きする。</p> <p style="text-align:center;"> <img style="margin-top:-30px;" src="./images/consistency_quorum.png"> </p> </div> <div class='slide'> <h1> 実験に使用するサーバの仕様 </h1> <table style="font-size: 0.7em;"> <tr> <th></th><th>ブレードサーバ</th> </tr> <tr> <td>CPU</td> <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> </tr> <tr> <td>コア数</td> <td>24</td> </tr> <tr> <td>Memory</td> <td>132GB</td> </tr> <tr> <td>OS</td> <td>Fedora 16</td> </tr> <tr> <td>HyperVisor</td> <td>なし(物理マシン)</td> </tr> </table> <small> <p style="">並列環境</p> </small> <table style="font-size: 0.7em; margin-top:-20px; "> <tr> <th></th><th>VMWareクラスタ</th><th>KVMクラスタ</th> </tr> <tr> <td>台数</td><td>48</td><td>12</td> </tr> <tr> <td>CPU</td> <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> <td>Intel(R) Xeon(R) CPU X5650@2.67GHz</td> </tr> <tr> <td>コア数</td> <td>4</td> <td>4</td> </tr> <tr> <td>Memory</td> <td>8GB</td> <td>8GB</td> </tr> <tr> <td>OS</td> <td>Fedora 16</td> <td>Fedora 16</td> </tr> <tr> <td>HyperVisor</td> <td>VMWare ESXi</td> <td>KVM (Linux Fedora 16)</td> </tr> </table> </div> </div> <!-- presentation --> </body> </html>