annotate paper/conclusion.tex @ 16:8e0b26d962cc

modify conclusion
author sugi
date Sun, 18 Jan 2015 00:23:22 +0900
parents 930eae4e8aeb
children 6b470aab9a41
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
295b393a7134 first commit
sugi
parents:
diff changeset
1 \chapter{結論} \label{chapter:conclusion}
295b393a7134 first commit
sugi
parents:
diff changeset
2
295b393a7134 first commit
sugi
parents:
diff changeset
3 \section{まとめ}
16
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
4 今回の研究では、さまざまなアプリケーションの作成を行い、Aliceの性能的問題や不足機能を洗い出した。
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
5 性能的な問題に対しては、並列と分散の両方の観点から改善を行った。その結果、実行速度を最大24\%改善した。
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
6 不足機能に関しては、洗いだした機能を実装することで、当研究室で開発しているTreeVNCをAlice上で実装できるまでになった。
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
7
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
8 しかし、性能も機能も十分であるとは言えない。性能に関しては、先行研究であるFederated Lindaに勝てていない。
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
9 機能に関しては、versionの違うプロトコルに対応するなどまだ必要な機能も多い。
0
295b393a7134 first commit
sugi
parents:
diff changeset
10
295b393a7134 first commit
sugi
parents:
diff changeset
11 \section{今後の課題}
16
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
12 \subsection{データの永続性の確保}
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
13 現在のAliceは、On memoryであるためプロセスの終了とともにData Segmentは全て失われてしまう。
0
295b393a7134 first commit
sugi
parents:
diff changeset
14
16
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
15 この問題を解決するためには、Data Segmentを他のKey Value Store等のシステムに保存し、永続性を確保する昼用がある。また、JungleのようにLogファイルとして出力することでも解決ができる。
0
295b393a7134 first commit
sugi
parents:
diff changeset
16
15
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
17 \subsection{DataSegmentKeyの領域分け}
16
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
18 現在Meta Data SegmentとData Segmentは、同じKey Value Queueで管理されている。つまり、Data Segment APIを用いれば、誰でもMeta Data Segmentを変更することができてしまう。Meta Data SegmentにAliceの状態を表すものがあるため、ユーザーによる変更は望ましくない。また、ユーザーが意図せずMeta Data Segment Keyに対して、putすることも考えられる。そして、Meta Code Segmentがactiveになりエラーを起こす。Meta Code Segmentでエラーが起こった場合、ソースコードを見ることができないため解決しづらい。
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
19
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
20 このようなエラーを防ぐためにMeta Data SegmentとData Segmentの領域を分ける必要がある。Data Segmentを分けることによりKeyの重複によるエラーをアプリケーションレベルにすることができる。しかし、領域を分けるだけでは足りない。領域をわけることで解決することができるのはputまたはupdateの場合だけである。Meta Data Segmentを取得する際にtakeを使用した場合Meta Data SegmentがQueueから取り除かれてしまう。この問題に対処するためには権限をCode Segmentに対して設定する必要がある。その権限により、takeと記述しても実際にはpeekを行うようにすることができる。
15
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
21
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
22 \subsection{記述に関する注意点}
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
23 \subsubsection{setKey のシンタックス問題}
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
24 setKeyメソッドをコンストラクタ等で呼ぶ際、setKeyメソッドを必ず最後に呼ばなければならない。
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
25
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
26 Code Segmentは内部で実行に必要なData Segmentを数えている。Data Segmentの取得に成功するとこの値が、デクリメントされ、0になると必要なData Segmentが全て揃ったことと判断される。全て揃った際にはThread poolへ送られる。
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
27
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
28 setKey移行に処理を記述した場合、その処理が行われない可能性がありThread poolへと送られNullPointerExceptionを引き起こす。
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
29
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
30 \begin{table}[html]
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
31 \lstinputlisting[label=src:NullPointerException,caption=NullPointerExceptionになる可能性がある]{source/ShowDataFailed.java}
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
32 \end{table}
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
33
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
34 ソースコード\ref{src:NullPointerException}は、for文でsetKeyとids.createをcntの回数呼び、動的にData Segmentの取得数を決めようとしている。しかし、setKeyが最初に呼ばれた際に、Data Segmentの取得に成功すると実行可能と判断されてしまう。runの中でinfoの配列の要素だけ中身を表示させようとしてるが、2回目のasClassでNullPointExceptionを引き起こす。今回の場合、コンストラクタ内をソースコード\ref{src:success}のように記述する必要がある。
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
35
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
36 \begin{table}[html]
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
37 \lstinputlisting[label=src:success,caption=NullPointerExceptionにならない記述]{source/ShowData.java}
930eae4e8aeb modify introduction
sugi
parents: 0
diff changeset
38 \end{table}
16
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
39
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
40 \subsubsection{singleton Code Segment}
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
41 Javaには、クラスのインスタンスを1つに限定するSingletonパターンがある。Code SegmentにSingletonパターンを使用したい場合があり得る。その場合、setKeyを行なう前に{\tt ids.init()}を行なう必要がある。先ほどのsetKeyのシンタックス問題でも述べたが、Code Segmentは内部で実行に必要なData Segmentを示す値がある。一度実行された状態のCode Segmentと新しくインスタンスを作成した場合のCode Segmentでは、値が違うため{\tt ids.init()}を呼ばずにsetKeyを行なうとData Segmentが揃ったにもかかわらずCode Segmentが実行されない。そのためsetKeyを呼ぶ前に{\tt ids.init()}を呼び内部の値を初期化する必要がある。(ソースコード\ref{src:Singleton})
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
42
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
43
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
44 \begin{table}[html]
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
45 \lstinputlisting[label=src:Singleton,caption=setKeyを呼ぶ前にinitを呼ぶ必要がある。]{source/Singleton.java}
8e0b26d962cc modify conclusion
sugi
parents: 15
diff changeset
46 \end{table}