# HG changeset patch # User Nobuyasu Oshiro # Date 1391404740 -32400 # Node ID 396b121f989cb7de53cc88ecd9e328980c7036b8 # Parent f257e8ebd79cd157d3c7ccd1d8f4b094254d53fd fixed slides diff -r f257e8ebd79c -r 396b121f989c slides/graffle/distributed_jungle.graffle --- a/slides/graffle/distributed_jungle.graffle Mon Feb 03 13:40:36 2014 +0900 +++ b/slides/graffle/distributed_jungle.graffle Mon Feb 03 14:19:00 2014 +0900 @@ -486,8 +486,8 @@ 3042 Points - {127.09999999999999, 219} - {182.04838104423936, 245.10669687622232} + {127.09999999999997, 219} + {182.04838104423936, 245.10669687622234} Style @@ -610,12 +610,12 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 commit log} +\f0\fs24 \cf0 operation} Bounds - {{210.4792478622102, 309.46509330538788}, {79.5, 21}} + {{210.47943009689689, 309.46509167217647}, {79.5, 21}} Class ShapedGraphic ID @@ -647,7 +647,7 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 commit log} +\f0\fs24 \cf0 operation} @@ -675,7 +675,7 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 commit log} +\f0\fs24 \cf0 operation} @@ -703,7 +703,7 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 commit log} +\f0\fs24 \cf0 operation} @@ -866,8 +866,8 @@ 11 Points - {228.12232377068844, 282.43082688753901} - {272.3772926444218, 357.56917653507588} + {228.12238999129161, 282.43082627275749} + {272.3775911089877, 357.56917388154017} Style @@ -901,8 +901,8 @@ 10 Points - {199.26989998631828, 282.39837385693244} - {142.23022340979924, 357.60162725857236} + {199.26987871078217, 282.39837366008095} + {142.23012736023978, 357.6016263731625} Style @@ -933,6 +933,14 @@ 9 Shape Rectangle + Style + + shadow + + Draws + NO + + Text Text @@ -954,6 +962,14 @@ 8 Shape Rectangle + Style + + shadow + + Draws + NO + + Text Text @@ -978,8 +994,8 @@ 7 Points - {293.56685580867173, 164.41792239522417} - {342.93314418168188, 239.58207760477583} + {293.56685581033651, 164.41792239522417} + {342.93314418918908, 239.58207760477583} Style @@ -1045,6 +1061,14 @@ 5 Shape Rectangle + Style + + shadow + + Draws + NO + + Text Text @@ -1066,6 +1090,14 @@ 4 Shape Rectangle + Style + + shadow + + Draws + NO + + Text Text @@ -1087,6 +1119,14 @@ 3 Shape Rectangle + Style + + shadow + + Draws + NO + + Text Text @@ -1147,7 +1187,7 @@ MasterSheets ModificationDate - 2014-02-03 00:36:34 +0000 + 2014-02-03 05:13:01 +0000 Modifier Oshiro Nobuyasu NotesVisible diff -r f257e8ebd79c -r 396b121f989c slides/images/distributed_jungle.png Binary file slides/images/distributed_jungle.png has changed diff -r f257e8ebd79c -r 396b121f989c slides/slides.html --- a/slides/slides.html Mon Feb 03 13:40:36 2014 +0900 +++ b/slides/slides.html Mon Feb 03 14:19:00 2014 +0900 @@ -105,6 +105,7 @@

ウェブサービスにとってデータベースは必須であり、ウェブサービスの規模に比例してデータベースへの負荷も高まる。

データベースの処理能力の高さはそのままウェブサービスの質に繋がるため、データベースのスケーラビリティの確保は重要である。

スケーラビリティ確保の方法としてデータ分散があるが、分散する方法により性能も変わってくる。

+

コンテンツマネジメントシステムに合ったスケーラビリティの確保ができるデータベースの開発を行う。

@@ -158,7 +159,7 @@
  • Webコンテンツを分散して管理
  • スケールアウトするシステム
  • データ全体の整合性に遅延がある、結果整合性でもよい。書き込みや読み込みを優先としたデータベースが必要。

    -

    そこで、非破壊的木構造データベースJungleの提案を行った。

    +

    そこで、非破壊的木構造データベースJungleの開発が行われた。

    @@ -200,7 +201,7 @@

    ここまでJungleに実装されている非破壊的木構造の利点について述べた。

    次に、Jungleにおける分散設計について述べる。

    データ分散を行うにあたり、まず考えることはトポロジーの形成と他のノードからデータの伝搬の仕方である。

    -

    Jungleはこの問題に対し、ツリートポロジーを形成し、データ編集の際に発生するcommit logを他のノードに流すことで解決する。

    +

    Jungleはこの問題に対し、ツリートポロジーを形成し、データ編集の際に発生するオペレーションを他のノードに流すことで解決する。

    @@ -215,86 +216,127 @@

    JungleにAliceを組み込み、Jungleのノード同士でトポロジーを形成する。

    Aliceの機能である他ノードへのデータアクセス機構を使用してデータ分散を行う。

    - -
    - -
    -

    - Jungleの分散設計: データ変更コマンドのAPI -

    - - -
    - -
    -

    - -

    - - -
    - - - -
    -

    - 掲示板システムにおけるMerge -

    -

    - -

    -

    2つの状態をもつ掲示板の書き込みができる。

    -

    掲示板はcommutativeなため、Mergeが自然に行える。

    +

    - Jungleの分散設計:トポロジー形成とログによるデータ分散 + 分散設計: データ編集オペレーション

    - - - - - - - -
    commit log伝搬によるデータ分散
    - -
    -

    サーバノード同士でツリートポロジーを形成する。データ編集をどのように行ったのかを示すログ commit log を伝搬させデータの分散を行う。

    +

    Aliceにより、ネットワークトポロジーの作成と他サーバが持つデータアクセス機構を実装できた。

    +

    次はどのデータを取得することでデータの分散を行うか考えなければならない。

    +
    +

    Jungleにはデータ編集に使われるオペレーションがある。

    +

    データ編集に使われるオペレーションをそのまま他サーバノードへ流すことでデータの分散が行える。

    +

    オペレーションには次の4つがある

    +
      +
    • addNewChild:子ノードの追加を行う
    • +
    • deleteChildAt:指定したノードの削除を行う
    • +
    • putAttribute:子ノードにattributeに追加を行う
    • +
    • deleteAttribute:子ノードのattributeを削除する
    • +
    - -

    - -

    + データ編集オペレーション + +

    子ノードを追加し、その子ノードにattributeを追加する場合次のノードオペレーションが実行される。

    +
      +
    1. [APPEND_CHILD:<-1>:pos:0]
    2. +
    3. [PUT_ATTRIBUTE:<-1,0>:key:mes,value:hello]
    4. +
    +

    このノードオペレーションの実行結果を図に示す。

    +

    + +

    +

    トポロジー上でノードオペレーションを渡すことで同じ編集を行いデータの分散を行う。

    +
    +

    + Jungle分散実装 +

    +

    以上の設計を元にJungleに分散実装を行った。

    +

    以下の図はJungleにおけるデータ分散の様子を表している。

    +

    + +

    +

    Aliceでトポロジーを形成後に、データ編集に使われたオペレーションを他サーバノードに送る。

    +

    オペレーションを受信したノードはデータ編集を行う。他にサーバが繋がっている場合はそちらにもオペレーションを送る。

    +
    +
    +
    - +
    +

    + Jungle分散実装 +

    +

    これまでの実装でJungleのデータが分散が行われるようになった。

    +

    しかしもう1つ問題がある。複数のノードから書き込まれるデータの整合性を取る方法が必要である。

    +

    JungleではこれをMergeを使うことで自動的に解決する。

    +

    Mergeとは2つ以上の変更の結果を受けて1つの変更に変えることである。

    +

    今回は、性能比較に用いる掲示板システムにMergeの実装を行った。

    +

    掲示板システムにおけるMergeを説明する。

    +
    +

    + 掲示板システムにおけるMerge +

    +

    2つの状態をもつ掲示板の書き込みができる。この2つの書き込みから新しい書き込みを作る。

    +

    + +

    +

    掲示板はcommutativeなため、いつ書き込んでも良い。よってMergeが自動的に行える。

    +
    +
    + + +

    - + 分散データベースJungleの評価

    +

    分散データベースとしてJungleの性能を評価する。

    +

    分散Key-ValueデーターべースCassandraと比較を行う。

    +

    比較方法は、Jungle, Cassandra をそれぞれバックエンドとした簡易掲示板を作成する。

    +

    掲示板に対してHTTP Requestで並列に読み込みと書き込みの負荷をかけ計測する。

    +

    レスポンスが返る平均時間と標準偏差を求めグラフ化する

    -

    - -

    +

    + 実験内容 +

    +

    実験は2つ行う

    +
  • 実験1:サーバを単体で起動し、複数のクライアントからの負荷をかける。
  • +

    + +

    +

    サーバ単体の性能を比較する。

    +

    クライアントの増加に対してサーバ1台にかかるリクエストも増加

    +
    +

    + 実験内容 +

    +
  • 実験2:サーバを単体で起動し、複数のクライアントからの負荷をかける。
  • +

    + +

    +

    分散環境下における性能を比較する。

    +

    クライアントとサーバがともに増加するため、サーバ一台に対するリクエストは変わらず。

    +

    サーバが全体で受けるリクエストは増加する。

    +

    @@ -303,11 +345,10 @@

    +

    レスポンス速度(縦軸の数値)が低い程良い

    +

    クライアント(横軸の数値)の増加に対してレスポンス速度の増加がゆるやかなものほどよい

    - - -

    単体サーバへの負荷:読み込み負荷 @@ -351,7 +392,7 @@

    レスポンス速度(縦軸の数値)が低い程良い

    -

    クライアトとノードの数(横軸の数値)の増加に対してレスポンス速度の増加がゆるやかなものほどよい

    +

    クライアントとノードの数(横軸の数値)の増加に対してレスポンス速度の増加がゆるやかなものほどよい