view paper/conclusion.tex @ 50:423f4f548fad default tip

add judge.tex
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Tue, 28 Feb 2012 21:25:28 +0900
parents a9f30ac5820d
children
line wrap: on
line source

\chapter{結論} \label{chapter:conclusion}

\section{まとめ}
今回の研究では、まず始めに、先行研究である Federated Linda の開発から得られた知見をまとめ、分散プログラミングに重要な事とは何かについて論じた。

その次に、本研究室で開発している Cerium の新設計のアイディアを踏襲し、 Data Segment と Code Segment という単位に分けてプログラミングを行うというスタイルを取り入れ、新しい分散フレームワークの概観を設計した。

さらに、それらの設計をもとに更に詳細な設計を重ね、 Java を用いて Alice の実装を行った。

最後に Alice の動作方法や、クラスター上での実験方法についてまとめ、 Federated Linda との性能比較等を行った。

実際に実装、実験してみることで、初めて得られた知見がたくさんあり、新たな問題点もたくさん見えてきた。

今後、このフレームワークを用いて、たくさんのプロトコルを提案し、実装し、検証していく過程で、分散プログラミングの分野に有意義な影響を与えることができれば幸いである。

\section{今後の課題}

\subsection{データの永続性の確保}

現在の Alice のデータベースである Data Segment は、プロセスが終了した場合、メモリ解放と共に失われる。

これらを解決するには、 Data Segment を他の Key-Value Store 等のシステムに格納し、永続性を確保することが必要である。

または、自前でファイルに出力することを考えても良い。 Alice では Data Segment の表現に MessagePack を利用しているため、 Data Segment のシリアライズ化が可能である。そのため、比較的容易に Data Segment の永続性をサポートできるのではないかと考えられる。

\subsection{Data Segment のキーごとにスレッドを持つ事による問題点}
現在の Alice では、 Data Segment のキーごとに Data Segment を処理するスレッドを持っている。
このため、 Data Segment のキーが異なる Data Segment にアクセスする API は並列実行することが可能となっている。

しかし、これからキーを大量に利用するアプリケーションの開発を行うことになった際、それらのキー全てがスレッドを持つことになってしまう。そのため、スレッドの切り替えが頻繁に起こり、処理効率の低下が懸念される。

そこで、大量にあるキーごとのスレッドを1本にまとめる方法と、スレッドプールを利用して、ある一定の数までのキーだけ並列処理できる方法が挙げられる。

それらを検証するための例題を作成し、どちらの方法を用いたほうが効率が良くなるのか実験をしていかねばならない。

\subsection{Federated Linda の実行速度を目指したチューニング}
今回の実験結果では、シンプルな実装であった Federated Linda のリングトポロジーの実装速度に勝ることは出来なかった。

マルチスレッドによる多段パイプラインを備えた Alice は、リングを1周させるようなシンプルなプロトコルではなく、複雑な通信が頻繁に飛び交うプロトコル向きだとは言えども、シンプルなプロトコルでも Federated Linda に勝てるように、プロファイルを重ねてチューニングを行なっていきたい。これからボトルネックの炙り出しを行っていく必要がある。

\subsection{HashMap の多用による処理速度の低下}
先行研究である Federated Linda に比べ、 Data Segment Manager のマネージャーキーによる探索や、 Data Segment のキーによる探索など、 HashMap を多用している。

しかし、 Code Segment のコーディングを行なっているときに、キーが固定であるケースも多いため、探索数を減らすことができると考える。

また、 Javassist などのリフレクションを行えるツールを利用して、元になったソースから動的にコンパイルを行うという方法を模索していきたい。

\subsection{Code Segment のユーザビリティ}
Federated Linda に比べ、分散プログラミングをシンプルに行えるようになったとはいえ、まだまだユーザーの Code Segment への記述量は多い。

この記述量を減らすためには、コード生成系を開発すればよい。

また、 Javassist などのリフレクションを行えるツールを利用して、動的にコンパイルを行い、依存関係を解決できるようにするとよいかもしれない。

\subsection{デバッグ方法の提案と実装}
現在、 Alice はログファイルによるデバッグしか行なっておらず、実行時にリアルタイムに Data Segment の内容を調べたり、現在の依存関係を調べる方法がない。
もちろん、全てのマシンに接続を張るというモデルでは、確実にスケールしない。
そのため、効率の良いトポロジーとルーティングを使って、デバッグデータの収集を行う方法を考えていかなくてはならない。