view presen/sample.markdown @ 10:90aaf305aed6 default tip

add presen
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Thu, 18 Feb 2016 09:06:13 +0900
parents b2869724949d
children
line wrap: on
line source

title: 分散フレームワークAliceのMeta Data Segment
author: 照屋のぞみ
profile:琉球大学 工学部 情報工学科  河野研

# 研究目的(1/3)
*  当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する
* ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す
* Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している

# 研究目的(2/3)
* Aliceでは、ComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。
* 分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する
* コードの変更を抑え、変更前の信頼性を保ったまま拡張可能にする

# 研究目的(3/3)
* 本研究では、Alice上に実用的な分散アプリケーションが制作できることを示すために画面配信システムTreeVNCを構築する
* 構築するにあたり必要となった圧縮機能をAliceのMeta Computationとして実装した
* もとのTreeVNCとの比較を行うことでMeta Computationの役割と有効性を示す


# Data Segment と Code Segment
* Aliceではデータを **Data Segment(DS)** 、タスクを **Code Segment(CS)** という単位に分割して依存関係を記述することでプログラミングを行う。
* CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。
* CSはkeyで指定されたDSが全て揃うと実行されるという性質を持つ。
![opt](./images/dsandcs.svg){:width="50%"}

# CodeSegmentの依存関係
* データの依存関係にないCSは並列実行される
* データの依存関係がある場合は Input DS が揃うと順に実行される
* DSはCSに専有されるためロックの記述を必要としない
![opt](./images/dsandcs2.svg){:width="60%"}

# Data Segment Manager
* DS の集合体であるデータベースを  **DS Manager(DSM)** と呼ぶ。  
	* Local DSM … 各ノード固有のデータベース。
	* Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。  
* DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
![opt](./images/remote_datasegment.svg){:width="50%"}


# Computation と Meta Computation
* Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。
* 分散トポロジーの構成、通信の切断・再接続時の処理などはMeta ComputationとしてAliceが提供
* プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定することでシンプルな記述を実現

# Computation と Meta Computation
* DS/CSの接続の間にMeta Computationが実行されている
* AliceのMeta ComputationもCS/DSにより実現される
* Meta ComputationはCS の処理を支えるMeta CSとMeta CSに管理されるMeta DSに分けられる
![opt](./pictures/MetaCSDS.svg){:width="70%"}


# TreeVNCへの応用
* AliceのMeta Computationの有効性を示すため実用的な例題であるTreeVNCを実装する
* TightVNCをもとにした木構造画面配信システム
* 画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能

# TreeVNCで必要な機能  
TreeVNCのComputation(VNCサーバからデータを受け取り表示)を支える機能をMeta Computationとして実装する  

* TreeTopologyの構成・管理(Topology Manager)
* ノード間通信の切断時・再接続時の処理(ClosedEventManager)
* ノードの接続状態確認(KeepAlive)
* 子ノードへのデータの転送(flip)
* データの圧縮

# Meta Computationの追加
* TreeVNCの数MByteの画面差分データを配信し続けるためデータを圧縮している
* 画面データを圧縮して送る → 解凍して画面表示 → 再圧縮して子ノードへ転送
* 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮 するオーバーヘッドを無くすことができる
* 圧縮のMeta Computationと転送のMeta Computationを追加した

# 圧縮表現(Meta DS)の追加
* DSを複数作るのではなく、1つのDSに対しMeta DSとして以下の表現を同時に持たせる

<table style="border:none;">
<tr><td width="550px">
1. 一般的なJavaのオブジェクト<br>  
 LocalDSMにputしたときの形式 <br>   
<br>
2. シリアライズ化されたバイナリオブジェクト  <br>  
 RemoteDSMにputしたときの形式  <br>  
<br>
3. 2を圧縮したバイナリオブジェクト  <br>  
 今回追加した形式  <br>  
</td>
<td width="500px">
<img src="./pictures/compressDS.svg" width="100%">
</td>
</tr>
</table>



# 圧縮表現を扱うDSMとAPIの追加
* Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加
* DSを圧縮したい場合は指定する DSM を Compressed DSM に変える
* 圧縮するコードとしないコードで変更が少ない  
```java
	put("Remote", "Key", val);  
	put("compressedRemote", "Key", val);  
```

# 圧縮表現がオンデマンドに作られる
* DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを解凍した後、転送のためにコピーや再圧縮をすることはない。
* 複数表現は必要最低限にしか作られない。
* 一つのKeyに対し様々な表現のDSが対応するが、キャストメソッドであるasClass()によってユーザーは送られてくるDSの表現を気にせず任意の型で取り出せる。  

# Meta Computationの評価
TreeVNCとAliceVNCを比較した  

* 性能比較  
	各ノードへのメッセージの伝達速度を比較  
	同等の性能が実現できたか  
* コード比較  
	コード量・コード複雑度を比較  
	シンプルな記述で仕様の変更が抑えられているか  

# 性能比較 - 実験結果
* 3段目の計測結果
* 同じ傾向から同等の処理性能があることがわかった  

<table style="border:none;">
	<tr>
	<td><img src="./pictures/TreeVNC_depth3.svg" width="80%"></td>
	<td><img src="./pictures/AliceVNC_compress_depth3.svg" width="80%"></td>
	</tr>
	<tr>
	<td align="center">TreeVNC</td>
	<td align="center">AliceVNC</td>
	</tr>
</table>


# コード量比較
* TightVNCを含む全体の行数・単語数はAliceVNCのほうが少ない
* コードの増加量ではTreeVNCに比べ75%仕様の変更が抑えられている  

<table style="border-collapse: collapse;border:1px solid #000000;">
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 行数 </th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;">単語数</th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;">TightVNCからの変更行数</th>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">19502</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">73646</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">7351</td>
	</tr>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> AliceVNC </td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">14647</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">59217</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">1129</td>
	</tr>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 減少率 (%)</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">25</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">20</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">75</td>
	</tr>
</table>

# コード複雑度比較
* 循環的複雑度を用いる  
	コード内の線形独立な経路の数。if や forが多いほど複雑度が高い。

<table style="border-collapse: collapse;border:1px solid #000000;">
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 平均値 </th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;">最高値</th>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TightVNC </td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">13.63</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">97</td>
	</tr>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">15.33</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">141</td>
	</tr>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> AliceVNC</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">10.95</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">99</td>
	</tr>
</table>


* AliceVNCのほうがTreeVNCに比べ複雑度が低い
* TreeVNC で最も複雑度が高いTreeRFBProto.classはデータの待ち合わせ処理や通信処理が入り組んだ複雑なコード
* AliceVNCで最も複雑度が高いSwingViewerWindow.classは、TightVNCから変更がほとんどないため、AliceVNCの持っている複雑度はTightVNCが元来持っていた複雑度



# まとめ
* Alice が実用的なアプリケーションを記述するための Meta Computation として、Meta Data Segmentに複数の表現のデータを同時に持たせることで圧縮機能を実装した。同様の手法を用いれば暗号表現などへの対応もでき自由度の高い通信を行うことが可能になる。
* TreeVNCをAlice上で実装し比較を行った結果、変更量の少ないシンプルな記述でTreeVNCの基本機能を実現でき、同等の性能を出すことに成功した。
* AliceのMeta Computationが拡張性・信頼性の高い実用的な分散アプリケーションの構築に有用であることが確認された。

# 今後の課題
* TreeVNCでは拡張が困難であった別ネットワーク間の通信もTopology Manager を用いれば容易に拡張できると考えられる  
![opt](./pictures/overNAT.svg){:width="60%"}  

# 今後の課題
* APIの再設計
	* put/updateに対しtake/peekがcreate()・setKey()の操作はわかりにくい
* DSの型情報のマネジメント
	* 型情報がないのでpeek/takeする際にわかりにくい
* セキュリティをサポートしていない
	* 圧縮と同様の手法で暗号形式のデータ表現を扱えるように拡張可能





<style type="text/css">
<!--
*{
	font:nomal 100% 'PT Sans';
}

ul > li{
	list-style-type:disc;
}

.slide h1{
	text-align:left;
	color:#777777;
	font:bold 40px/1.13 'PT Sans', sans-serif;
	margin-bottom: 50px;
}

div#slide1 h1{
	text-align:left;
	color:#777777;
	font:bold 60px 'PT Sans', sans-serif;
	margin-bottom: 50px;
}

pre > code{
	font-family:'Droid Sans Mono', 'Courier New', monospace;
}

img[alt="opt"]{
	display: block;
	margin-left: auto;
	margin-right: auto;
}

img[alt="right"]{
	margin-right: 0;
}

table {
	margin-left: auto;
	margin-right: auto;
}

th {
    font-size: 120%;
}
-->
</style>