annotate presen/sigOS/sample.markdown @ 16:1ac38e2b7572

before review
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2015 00:09:45 +0900
parents 696a908208c8
children a26eacfb4922
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: 分散フレームワークAliceの圧縮機能
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: 照屋のぞみ
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile:琉球大学 工学部 情報工学科 4年
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 # 研究背景(1/2)
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 * 信頼性とスケーラビリティに優れた分散プログラムをプログラマが一から記述することは容易ではない。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 * 本研究室ではデータを *Data Segment* 、タスクを *Code Segment* という単位で分割して記述する**並列分散フレームワークAlice**の開発を行っている。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 * Aliceは分散環境の構築のためのAPIが提供されており、スケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 # 研究背景(1/2)
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 * 水族館の例題等において、Aliceが分散プログラムを記述する能力を有することは確認された。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 * 実用的な分散プログラムを作成するためには、圧縮形式のデータで通信する機能等が必要だとわかった。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 # 研究目的
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 * Aliceに圧縮機能等を追加することにより、Data Segmentの多態性を実現しノード間通信における自由度の向上を図る。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 # Aliceの概要(1) - Data Segment
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 * 複数の関係のない要素を1つのデータオブジェクトで表現した場合、全ての操作でlockが必要になり、スケラビリティーを低下させる。
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
19 * Alice はデータを細かく分割して記述する。その分割されたデータを **Data Segment(DS)** と呼ぶ。
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 # Aliceの概要(2) - Data Segment Manager
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 * DS は queue に保存される。queue には対 になる key し、 key を指定して DS の保存、取得を行う。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 * queue の集合体であるデータベースデータベースを Alice では DS Manager(DSM) と呼ぶ。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 ![opt](./pictures/dsm.svg)
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 # Aliceの概要(2) - Data Segment Manager
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 * Local DSM … 各ノード固有のデータベース。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 * Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 ![opt](./images/remote_datasegment.svg){:width="450px"}
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 # Aliceの概要(3) - Data Segment API
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 DSMに対して以下のコマンドを送り操作できる
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 <table style="border-collapse: collapse;border:1px solid #000000;">
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 <tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 <td style="border:1px solid #000000;"> put</td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 <td style="border:1px solid #000000;">データを追加する</td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 </tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 <tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 <td style="border:1px solid #000000;"> update </td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 <td style="border:1px solid #000000;">データを更新する</td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 </tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 <tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 <td style="border:1px solid #000000;"> peek</td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 <td style="border:1px solid #000000;">データを取得する</td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 </tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 <tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 <td style="border:1px solid #000000;"> take</td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 <td style="border:1px solid #000000;">データを取得する。取得したデータはDSMから削除される。</td>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 </tr>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 </table>
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
53 # Aliceの概要(4) - Data Segment の表現
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
54 * 一般的な Java のクラスオブジェクト
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
55 * LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
56 * MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
57 * RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
59 # Aliceの概要(5) - Code Segment
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
60 * Alice上で実行されるタスクの単位を **Code Segment(CS)** と呼ぶ。
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 * 複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
62 * CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
63
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
64 # Aliceの概要(5) - Code Segment
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 * 入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 * keyで指定されたDSが揃うと実行されるという性質を持つ。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 ![opt](./images/dsandcs.svg)
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
69 # Aliceの概要(6) - CodeSegmentの依存関係
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 * データの依存関係にないCSは並列実行される
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 * データの依存関係がある場合は依存を解決した順に実行される
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 * 並列度あげるために、処理を細かく記述し、依存するDSを少なくする
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 ![opt](./images/dsandcs2.svg)
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
75 # AliceのMeta Computation(1/2)
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 * 並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 * Aliceではプログラマが記述する部分を *Computation*、Aliceが提供するComputationを支える部分を *Meta Computation* として分けて捉えている。
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
78 * 分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
80 # AliceのMeta Computation(2/2)
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 * AliceのComputation
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 * keyによりData Segmentを待ち合わせてCode Segmentを実行する
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 * AliceのMeta Computation
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 * Javaで記述したAliceの実装システム
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
87 * Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる
16
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
88 * Meta Computation も CS と DS により表現される。
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
89
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
90 # AliceVNC
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
91 * 研究室では授業向け画面共有システムTreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
92 ![opt](./images/treeVNC.svg)
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 # Alice の新機能
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
95 * Alice が実用的なアプリケーションを記述する能力をもつことを確認するため、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
96 * AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
97 * 転送機能 … Input DS を Output DS として転送する
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
98 * 圧縮機能 … DS Manager の指定によってDSの表現を切り替える
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
100 # 転送機能
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
101 * 通常、Input DSに変更を加えOutput DSとして出力する場合DSのコピーが行われる。
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
102 * AliceVNCのようにInput DS をそのまま子ノードに Output DS として出力する場合、コピーを行なうのは無駄。
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
103 * Input DSをコピーせずそのままOutput DSに渡すMeta Computationとして転送機能を実装した。
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
16
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
105 # 転送機能
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
106 ```java
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
107 public void flip(Receiver receiver) {
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
108 DataSegment.getLocal().put(receiver.key, receiver.getReceiveData(), null);
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
109 }
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
110 ```
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
111
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 # 圧縮機能
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
113 * AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
114 * ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
115 * 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。
13
c0fe42a8808d add slides
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
117 # 圧縮機能 - Data Segmentの表現の変更
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
118 1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
119 1. 一般的な Java のクラスオブジェクト
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
120 2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
121 3. 2 を圧縮したバイナリオブジェクト
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
122
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
123 # 圧縮機能 - Data Segmentの表現の変更
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
124 ```java
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
125 public class ReceiveData {
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
126 private Object val = null;
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
127 private byte[] messagePack = null;
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
128 private byte[] zMessagePack = null;
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
129 }
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
130 ```
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
131
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
132 # 圧縮機能 - DSMの追加
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
133 * Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
134 * Compressed DSM にputする場合
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
135 * DS が圧縮表現を持っていればそれをputする
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
136 * 持っていなければその時点で圧縮表現を作ってputする
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
137
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
138 # 圧縮機能 - 任意の表現でDSを取得
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
139 * ReceiveData内にあるDSのcastメソッドであるasClass()を用いる
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
140 ```java
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
141 public <T> T asClass(Class<T> clazz) {
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
142 if (val != null) { return (T) val; }
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
143
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
144 if (zMessagePack != null && messagePack == null) {
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
145 messagePack = unzip(zMessagePack, dataSize);
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
146 }
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
147
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
148 return packer.read(messagePack, clazz);
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
149 }
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
150 ```
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
151
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
152 # 圧縮機能 - API設計
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
153 通常のデータを扱う場合
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
154 * put(String managerKey, String key, Object val)
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
155 * take(String managerKey, String key)
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
156
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
157 圧縮表現のデータを扱う場合
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
158 * put(String **"compressed"** + managerKey, String key, Object val)
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
159 * take(String **"compressed"** + managerKey, String key)
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
160
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
161 # 圧縮機能 - 通信プロトコルの変更
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
162 * Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
163 * 圧縮した byteArray の追加により、Remote から put された byteArray が圧縮されているのか判断する必要がある。
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
164
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
165 # 圧縮機能 - 通信プロトコルの変更
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
166 * Alice の通信におけるヘッダにあたる CommandMessage.classに **シリアライズ状態表すフラグ**と、**圧縮状態を表すフラク** を追加
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
167 * これにより put された DSM はフラグに応じた適切な形式で格納できる。
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
168
16
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
169 # 圧縮機能 - 通信プロトコルの変更
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
170
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
171 ```java
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
172 public class CommandMessage {
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
173 public int type;
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
174 public int seq;
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
175 public String key;
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
176 public boolean quickFlag = false;
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
177 public boolean serialized = false;
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
178 public boolean compressed = false;
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
179 public int dataSize = 0;
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
180 }
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
181 ```
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
182 
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
183
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
184 # 圧縮機能 - 通信プロトコルの変更
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
185 <table style="border-collapse: collapse;border:1px solid #000000;">
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
186 <tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
187 <td style="border:1px solid #000000;"> type</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
188 <td style="border:1px solid #000000;">CommandType PEEK, PUT などを表す</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
189 </tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
190 <tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
191 <td style="border:1px solid #000000;"> seq </td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
192 <td style="border:1px solid #000000;">DS の待ち合わせを行っている CS を表す unique number</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
193 </tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
194 <tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
195 <td style="border:1px solid #000000;"> key </td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
196 <td style="border:1px solid #000000;">どの Key に対して操作を行うか指定する</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
197 </tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
198 <tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
199 <td style="border:1px solid #000000;"> quickFlag </td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
200 <td style="border:1px solid #000000;">SEDA を挟まず Command を処理を行うかを示す</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
201 </tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
202 <tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
203 <td style="border:1px solid #000000;"> serialized </td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
204 <td style="border:1px solid #000000;">データ本体のシリアライズ状態を示す</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
205 </tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
206 <tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
207 <td style="border:1px solid #000000;"> compressed </td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
208 <td style="border:1px solid #000000;">データ本体の圧縮状態を示す</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
209 </tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
210 <tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
211 <td style="border:1px solid #000000;"> dataSize </td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
212 <td style="border:1px solid #000000;">圧縮前のデータサイズを表す</td>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
213 </tr>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
214 </table>
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
215
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
216 # 圧縮機能の評価
16
1ac38e2b7572 before review
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
217 RingRelayTest
15
696a908208c8 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
218 ![opt](./images/topologyring.svg)
14
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
219
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
220 # まとめ
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
221 * Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
222 * これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
223 * 同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。
99e5104997b7 add compress part
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
224 * 今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。