Mercurial > hg > Papers > 2012 > kazz-master
annotate paper/chapter1.tex @ 8:0b01b77d33b4
write about Federated Linda
author | kazz <kazz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 06 Feb 2012 03:19:53 +0900 |
parents | 70f19a2daea6 |
children | 7a2a26770f62 |
rev | line source |
---|---|
1 | 1 \chapter{Federated Linda の実装により得られた知見} |
2 | |
3 \section{Federated Linda} | |
4 本研究室では、自然に分散プログラミングが書けるようなプログラミングモデルとして、グローバルな ID を持たない連邦型タプルスペース(以下 Federated Linda と記す)を提案してきた。 | |
5 | |
6 \subsection{Linda} | |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
7 Linda は、タプルという ID で番号づけられたデータの集合を、以下の API (表\ref{tb:lindaApi}) を用いて共有されたタプルスペースに出し入れすることにより、外部との通信を行うプログラミングモデルである。(図\ref{fig:lindaServer}) |
0 | 8 |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
9 \begin{table}[htbp] |
1 | 10 \caption{Linda API} |
11 \label{tb:lindaApi} | |
12 \begin{center} | |
13 \begin{tabular} {|l|l|} | |
14 \hline | |
15 {\bf API}&{\bf 概要}\\ | |
16 \hline | |
17 in(id)&タプルスペースからタプルを取り出す。\\&タプルスペースにタプルは残らない。\\ | |
18 \hline | |
19 read(id)&タプルスペースからタプルを取り出す。\\&タプルスペースにタプルが残る。\\ | |
20 \hline | |
21 out(id,data)&タプルスペースへタプルを書きこむ。\\ | |
22 \hline | |
23 \end{tabular} | |
24 \end{center} | |
25 \end{table} | |
26 | |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
27 \begin{figure}[htbp] |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
28 \begin{center} |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
29 \includegraphics[width=50mm]{images/linda_server.pdf} |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
30 \end{center} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
31 \caption{Linda Server とそれを API を用いて操作するクライアント} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
32 \label{fig:lindaServer} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
33 \end{figure} |
2 | 34 |
1 | 35 \subsection{Federated Linda} |
36 | |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
37 Federated Linda は、複数のタプルスペース (Linda Server) を相互に接続することにより分散プログラミングを実現する。一つのタプルスペースには少数の接続があることが期待されており、多数のタプルスペースが接続することにより分散アプリケーションを実現する(図\ref{fig:connectionOfTspace})。 smtp/nntp デーモンが行単位でプロトコルを作るのと似た形で、タプルスペースへの in/out でプロトコルを作ることになる。 |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
38 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
39 通信モデルは、タプルの出し入れによるリレー転送のようになる。インターネットのパケット転送のように、タプルスペースからタプルスペースへとタプルを転送していく。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
40 |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
41 クライアントのアクセス数が増えても、タプルスペース等の数を増やし、ネットワーク処理を分散することにより、スケーラビリティを保つ。 |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
42 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
43 \begin{figure}[htbp] |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
44 \begin{center} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
45 \includegraphics[width=100mm]{images/connection_of_tspace.pdf} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
46 \end{center} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
47 \caption{タプルスペースの相互接続} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
48 \label{fig:connectionOfTspace} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
49 \end{figure} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
50 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
51 \section{Federated Linda の分散プログラミング} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
52 Federated Linda の分散プログラムには "Tuple Space", "Protocol Engine", "Link Configuration" の3つの要素がある。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
53 Federated Linda は、この3つの要素に基づいてプログラミングモデルを提供する。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
54 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
55 \subsection{Tuple Space} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
56 プロトコルへのアクセスは Linda の API を用いる。 |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
57 つまり、タプルスペースへの "in", "read", "out" 等である。 |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
58 これらのコマンドは単純で、理解しやすいものである。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
59 タプルの出し入れというモデルで通信を行うことができる。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
60 |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
61 また、 Protocol Engine との通信は非同期に行われる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
62 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
63 \subsection{Protocol Engine} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
64 プロトコルを規定する Protocol Engine は、分散アルゴリズムを内包し、他のプロトコルへのアクセスもタプルスペース経由で行う。通信はタプルをタプルスペースからタプルスペースへと伝搬させるように転送する。クライアントはタプルスペースを介した通信を行うので、クライアントからはプロトコルの細かい挙動は見えない。しかし、クライアントプログラムのプロトコルへの依存を低く抑えることが可能である。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
65 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
66 タプルスペースとのタプルのやり取りは非同期で行われるuが、これらのライブラリはシングルスレッドで実装されている。 |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
67 そのため、"in", "read" を実行した際にリクエストは送信されず、また返ってくるであろうタプルのレスポンスは返ってこない。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
68 "sync" を行った時にキューに入っているリクエストを Linda Server へ送信する。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
69 この時、サーバー側からクライアントへのレスポンスが準備できていればそれらを受け取る。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
70 |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
71 サーバー側からレスポンスデータを受信した際、ユーザーはそれらを確認する以下の2つの方法がある。 |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
72 \subsubsection{poll 方式} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
73 poll 方式とは、 "sync" を行った後に、その "in", "out" のレスポンスが ready 状態になっているか確認する方法である。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
74 この方式を用いた場合、レスポンスが ready 状態かどうかをユーザーが好きなタイミングで記述するため、行いたい処理を順次書くだけでよくなるため、ソースコードの可読性が上がる。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
75 |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
76 しかし、レスポンスが返って来ない間、ループを行い、状態チェックを行う等の処理を書かなくてはいけなくなるため、処理効率は悪化する。(図\ref{fig:pollBased}) |
6 | 77 |
78 \begin{figure}[htbp] | |
79 \begin{center} | |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
80 \includegraphics[width=70mm]{images/poll_based.pdf} |
6 | 81 \end{center} |
82 \caption{poll 方式の例} | |
83 \label{fig:pollBased} | |
84 \end{figure} | |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
85 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
86 \subsubsection{callback function 方式} |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
87 callback function 方式とは、 "in", "out" を行う際に、そのレスポンスがサーバー側から返ってきた時の処理を予め記述しておく方法である。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
88 |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
89 レスポンスがサーバー側から返って来た時に指定したコールバック関数が自動で実行されるため、ユーザーは受信したかどうかチェックする処理を書かなくてもよい。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
90 また、それらの処理がまるごと消えるため、処理効率は向上する。(図\ref{fig:callbackFunctionBased}) |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
91 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
92 しかし、実行されるタイミングをユーザーが把握することが難しくなる。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
93 そのため、ソースコードの難読化につながる。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
94 コールバック関数間のデータの共有も難しくなる。 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
95 |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
96 \begin{figure}[htbp] |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
97 \begin{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
98 \includegraphics[width=70mm]{images/callback_function_based.pdf} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
99 \end{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
100 \caption{callback function 方式の例} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
101 \label{fig:callbackFunctionBased} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
102 \end{figure} |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
103 |
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
104 \subsection{Link Configuration} |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
105 タプルスペースや Protocol Engine の接続を規定する。接続の状態を XML として表し、各ノードがそれにしたがってIPの上位レイヤーでオーバーレイネットワークを構築する。オーバーレイネットワークを構築するために、接続等を扱うモジュールを提供する。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
106 |
5
0d56d00f89fc
description of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
107 |
2 | 108 \section{Federated Linda の改良} |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
109 Federated Linda はいくつかの段階を経て実装されてきた。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
110 それは、プロトタイプをプログラミングすることによって、設計を詳細なものへと落としこんでいく必要があったからである。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
111 |
2 | 112 \subsection{Meta Protocol Engine} |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
113 従来の Protocol Engine は、タプルスペース (Linda Server) とは独立したプロセスであった。(図\ref{fig:flindaType2}) |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
114 それでは、その2つのプロセスがローカルの同じマシン上にあっても、タプルをやり取りするためにソケット通信を行う必要があった。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
115 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
116 \begin{figure}[htbp] |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
117 \begin{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
118 \includegraphics[width=110mm]{./images/flinda_type2.pdf} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
119 \end{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
120 \caption{タプルスペースと Protocol Engine が別プロセス} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
121 \label{fig:flindaType2} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
122 \end{figure} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
123 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
124 そこで、 Linda Server と一体型の Protocol Engine として、 Meta Protocol Engine を提案し、実装した。(図\ref{fig:flindaType3}) |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
125 Protocol Engine のプロセスがタプルスペースと同じであるため、ローカルのタプルスペースへアクセスする際にメモリ空間に直接アクセスすることができるようになった。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
126 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
127 \begin{figure}[htbp] |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
128 \begin{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
129 \includegraphics[width=110mm]{./images/flinda_type3.pdf} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
130 \end{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
131 \caption{タプルスペースと Protocol Engine が同じプロセス} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
132 \label{fig:flindaType3} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
133 \end{figure} |
2 | 134 |
135 \subsection{update API の追加} | |
8 | 136 Federated Linda の例題を書いているときに、 "in" の直後に "out" を実行することが多いことに気がついた。これは即ち、タプルを消して、新しいタプルを書き込むということである。そこで、新しく "update" API を追加することにした。(表\ref{tb:additionalLindaApi}) |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
137 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
138 \begin{table}[htbp] |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
139 \caption{追加 Linda API} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
140 \label{tb:additionalLindaApi} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
141 \begin{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
142 \begin{tabular} {|l|l|} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
143 \hline |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
144 {\bf API}&{\bf 概要}\\ |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
145 \hline |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
146 update(id,data)&タプルスペースからタプルを取り除く。\\&タプルスペースへデータを書き込む。\\ |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
147 \hline |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
148 \end{tabular} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
149 \end{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
150 \end{table} |
1 | 151 |
152 | |
7
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
153 \section{Federated Linda の問題点} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
154 Federated Linda の設計と実装、それらを使った例題の作成を通して、 Federated Linda の抱える問題点が浮き彫りとなった。これらの問題点を整理し、次章に記す新しい分散アプリケーションフレームワークの設計に活かすことができた。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
155 その問題点を以下に記す。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
156 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
157 \subsection{シングルスレッドを用いた設計} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
158 Federated Linda の設計上の問題点としてシングルスレッドで設計されていることが挙げられる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
159 シングルスレッドで設計された理由として、 Federated Linda の実装を行った当時は、シングルコア CPU が主流であったことが挙げられる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
160 さらに、Java 2 SE, v1.4 がリリースされ、 java.nio がノンブロッキング I/O をサポートたことも理由として挙げられる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
161 java.nio.channels.Selector を使用し、シングルスレッドで複数の入出力を取り扱うという方法が当時のサーバーの主流であった。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
162 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
163 この方法では、大きな容量のデータを送受信した際に、 CPU がそのデータの送受信にかかりっきりになってしまい、その処理が終わるまで他の小さな処理が全て待ち状態になってしまうといった問題が発生していた。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
164 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
165 しかし、近年では、シングルコア CPU の性能向上が発熱量等の問題により頭打ちとなり、マルチコアのマシンが主流となっている。将来的にはメニーコアのマシンが主流になっていくと考えられる。そのような背景を踏まえて、 Apache の Cassandra プロジェクトではデーモンの実装に SEDA アーキテクチャを採用している。これは、マルチスレッドを用いて大量の接続を管理し、受け取ったデータを、処理ごとに分けられたステージと呼ばれるスレッドに投げ、処理が終わると次のステージにデータを伝搬させる。これを用いることによってマルチコア性能を生かし、パイプライン的に効率よく処理することが可能となっている。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
166 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
167 分散アプリケーションを作成する上で、マルチスレッドをどのように活用するかといったことが、重要な課題となっている。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
168 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
169 \subsection{タプルの表現方法} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
170 次の問題点として、タプルの表現方法が挙げられる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
171 Federated Linda におけるタプルはバイトの配列として表現されている。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
172 例えば、 Java を用いた実装では、 ByteBuffer を利用している。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
173 バイトの配列を用いることによる問題点としては、データを送受信する際に、ユーザーが Protocol Engine で利用しているデータをバイトの配列へ変換、またはその逆を行う必要があるということが挙げられる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
174 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
175 また、異なるアーキテクチャ間におけるデータフォーマットの取り扱いも問題となる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
176 異なるアーキテクチャとは、CPU の違い(バイトオーダー、ビット数等)、使用するプログラミング言語の違い、 OS の違い等である。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
177 例えば、 PlayStation 3 (Cell) 上の Linux で動作するアプリケーションと、 Mac OS X (Intel) 上で動作するアプリケーション間である。そのアプリケーション間で、とある共通の構造体のデータをやり取りするといった事案でデータフォーマットに関する問題が発生する。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
178 通信するたびに、 XDR (External Data Representation) などのデータフォーマットを用いて、ユーザーがデータを変換する必要がある。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
179 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
180 \subsection{タプルの ID が整数値であること} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
181 更なる問題点として、タプルの ID が整数値であることが挙げられる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
182 これは、整数値であるため、送受信する際や、タプルスペースのデータを探すときには効率がよいというメリットがある。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
183 一方で、ユーザーが整数 ID を管理するためには、 enum やハッシュ、即ち文字列から整数値への射影を管理する必要が出てくるのである。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
184 新しいタプルをタプルスペースで使用する際に新しい整数 ID と文字列の対応をユーザーが管理する手間がかかる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
185 この問題はデバッグ時に顕著となる。それら無数の整数値をユーザーがログを見ながらどのデータか把握しなければならないからである。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
186 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
187 Cassandra 等の KVS (Key-Value Store) では、キーに直接文字列を使用しているため、キーの管理が行いやすくなっている。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
188 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
189 \subsection{Protocol Engine の記述方法} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
190 次に Protocol Engine の記述方法である。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
191 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
192 Protocol Engine は処理効率の観点から基本的に callback function 方式 (図\ref{fig:callbackFunctionBased}) を用いて行うが、これらの取り扱いが問題となる。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
193 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
194 "in" や "read" を行う時にコールバック関数を準備し、タプルに設定する。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
195 更に、そのコールバック関数内で、新しいコールバック関数を準備し、 "in" や "read" を行ってタプルに設定する。このように、コールバック関数が "in" や "read" を介してツリー状に接続されているという構図が生まれる。(図\ref{fig:callbackTree}) このように、ユーザーはタプルの ID を元にコールバック関数の繋がりを把握する必要がある。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
196 分散アプリケーションであるため、ローカルマシンのタプル ID だけでなく、リモートマシン上のコールバック関数の影響も受ける。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
197 そのため、スタック上に関数を呼び出して読んでいくことが難しい。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
198 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
199 これらのタプルの接続をユーザーが "in" や "read" を直接用いて表現するのではなく、フレームワーク側で接続関係をサポートする必要がある。 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
200 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
201 \begin{figure}[htbp] |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
202 \begin{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
203 \includegraphics[width=70mm]{./images/callback_tree.pdf} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
204 \end{center} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
205 \caption{コールバック関数同士がタプルを介してツリー状に接続されている} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
206 \label{fig:callbackTree} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
207 \end{figure} |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
208 |
70f19a2daea6
add the problem of Federated Linda
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
209 \subsection{接続しているタプルスペースリソースの管理} |
8 | 210 Federated Linda にはタプルスペースへのコネクションを管理する機構がないため、ユーザーがそれらのコネクションを管理する必要があった。 |
211 分散アプリケーションにおいて、どのようなグラフ構造でマシンが接続されているかという情報は重要である。 | |
212 接続時に、コネクションに把握しやすい名前をつけることで、ユーザーは接続を管理しやすくなる。 | |
213 例えば、リングトポロジーの場合、1つのマシンに着目してみると、右への接続を"right"、左への接続を"left"といったキーで呼び出すことができると嬉しい。 | |
2 | 214 |
8 | 215 また、受け取ったデータがどこから来たか、受け取るときに把握できると望ましい。 |
216 なぜならば、ルーティングを行うときに役立つからである。ツリートポロジーの場合、親から来たデータを子に伝搬するといった処理を記述することがよくある。その時に、どこからデータが来たかという情報は重要である。 | |
2 | 217 |
8 | 218 これらの問題点を踏まえて設計した、新しい分散アプリケーションフレームワークの設計を次章では示す。 |
219 |