comparison paper/chapter3.tex @ 17:675939a7f983

change experiment picture
author sugi
date Fri, 23 Jan 2015 16:43:48 +0900
parents b9b3f2241ab4
children fd43827452ad
comparison
equal deleted inserted replaced
16:8e0b26d962cc 17:675939a7f983
73 接続状態に問題があり、{\tt CLOSE}タスクの実行されるまでにレスポンスがない場合は、{\tt CLOSE}タスクによりRemote Data Segmentが削除される。 73 接続状態に問題があり、{\tt CLOSE}タスクの実行されるまでにレスポンスがない場合は、{\tt CLOSE}タスクによりRemote Data Segmentが削除される。
74 74
75 heartbeatは、Node AからNode Bに一方向に送られる訳ではなく、Node BからNode Aにも送られている。 75 heartbeatは、Node AからNode Bに一方向に送られる訳ではなく、Node BからNode Aにも送られている。
76 76
77 \section{切断時の処理} 77 \section{切断時の処理}
78 DataBaseではデータ更新の際にトランザクション処理に障害が起こった場合、DataBase側でトランザクション処理開始前に戻すロールバックという処理が行われる。 78 MMORPGでは、試合の最中にサーバーからユーザーが切断された場合、自動的にユーザーが操作するキャラクターをゲーム開始時の位置に戻すという処理が実行される。
79 同様にTreeVNCでは切断を検知した場合、LostParentというメッセージがトップノードに対して送信される。 79 同様にTreeVNCでは切断を検知した場合、LostParentというメッセージがトップノードに対して送信される。
80 80
81 以上の例のように、アプリケーションはノードの切断に対する処理を用意したい場合がある。 81 以上の例のように、アプリケーションはノードの切断に対する処理を用意したい場合がある。
82 しかし、Aliceを用いたアプリケーションの場合、アプリケーション側で検知するのは難しい。 82 しかし、Aliceを用いたアプリケーションの場合、アプリケーション側で検知するのは難しい。
83 切断自体は、Remote Data Segmentに対してwriteまたはreadを行った際に出るExceptionにより判断することができる。 83 切断自体は、Remote Data Segmentに対してwriteまたはreadを行った際に出るExceptionにより判断することができる。
84 だが、I/O の処理はCode Segmentを実行するThreadで行われない。専用のI/O Threadによって行われるため、Code Segment内でExceptionを捕まえられず、例外として処理することができない。 84 だが、I/O の処理はCode Segmentを実行するThreadで行われない。専用のI/O Threadによって行われるため、Code Segment内でExceptionを捕まえられず、例外処理を行なうことができない。
85 85
86 そこで、Aliceが切断を検知した際に、任意のCode Segmentを実行できる機能 (ClosedEventManager)を追加した。 86 そこで、Aliceが切断を検知した際に、任意のCode Segmentを実行できる機能 (ClosedEventManager)を追加した。
87 ユーザはClosedEventManagerにCode Segmentを登録することで、切断時の処理として実行するCode Segmentを指定できる。 87 ユーザはClosedEventManagerにCode Segmentを登録することで、切断時の処理として実行するCode Segmentを指定できる。
88 \begin{table}[htbp] 88 \begin{table}[htbp]
89 \lstinputlisting[label=src:registerEvent, caption=切断時に実行されるCode Segmentの登録方法]{source/RegisterEvent.java} 89 \lstinputlisting[label=src:registerEvent, caption=切断時に実行されるCode Segmentの登録方法]{source/RegisterEvent.java}
104 104
105 この問題を解決するには、アプリケーションからノードが切断するたびにTopologyの再構成を行なう必要がある。そこで、Dynamic Topology Managerに、Topologyの再構成を行う機能を追加した。 105 この問題を解決するには、アプリケーションからノードが切断するたびにTopologyの再構成を行なう必要がある。そこで、Dynamic Topology Managerに、Topologyの再構成を行う機能を追加した。
106 106
107 図 \ref{fig:TopologyFIx}、 \ref{fig:TopologyFIx2}、\ref{fig:TopologyFIx3}はTopologyの再構成をコラボレーションダイアグラムで表したものである。 107 図 \ref{fig:TopologyFIx}、 \ref{fig:TopologyFIx2}、\ref{fig:TopologyFIx3}はTopologyの再構成をコラボレーションダイアグラムで表したものである。
108 108
109 %コラボレーションダイアグラム図の挿入
110 \begin{figure}[htbp] 109 \begin{figure}[htbp]
111 \begin{center} 110 \begin{center}
112 \includegraphics[width=120mm]{images/TopologyFIx.pdf} 111 \includegraphics[width=120mm]{images/TopologyFIx.pdf}
113 \end{center} 112 \end{center}
114 \caption{切断ノードの検知} 113 \caption{切断ノードの検知}
145 \item Node6に対して、Node1、Node3、Node4の情報を送り、接続を行わせる。 144 \item Node6に対して、Node1、Node3、Node4の情報を送り、接続を行わせる。
146 \item お互いにRemote Data Segmentの名前を贈り合い、Remote Data Segmentが利用可能になる。 145 \item お互いにRemote Data Segmentの名前を贈り合い、Remote Data Segmentが利用可能になる。
147 \end{enumerate} 146 \end{enumerate}
148 147
149 \section{再接続の処理} 148 \section{再接続の処理}
149 MMORPGでは、試合の最中に障害などによりサーバーから離脱したユーザーが、試合が終わるまでに再びサーバーに接続してきた場合に、再びその試合に参加できるような再接続の処理が用意されている。
150
151 分散にアプリケーションでは、MMORPGの例のように再接続してきたノードに対して通常の処理とは別の処理を行わせたい場合がある。そこで、Aliceに再接続してきたノードに、任意のCode Segmentを実行できる機能を追加した。ユーザーはconfigにCode Segmentを継承したClassを登録することで、再接続時に実行されるCode Segmentを指定することができる。
152
153 \begin{table}[htbp]
154 \lstinputlisting[label=src:StartAquarium, caption=再接続に実行するCode Segmentの登録方法]{source/StartAquariumFX.java}
155 \end{table}
150 156
151 \section{Multicast Data Segment} 157 \section{Multicast Data Segment}
152 TreeVNCには、Multicastを利用して起動しているTreeVNCのRoot Nodeの情報の一覧にして表示する接続先自動検索システムという機能がある。この機能によりTreeVNCの起動の際にIPアドレスを入力する手間を省くことができる。 158 TreeVNCには、Multicastを利用して起動しているTreeVNCのRoot Nodeの情報の一覧にして表示する接続先自動検索システムという機能がある。この機能によりTreeVNCの起動の際にIPアドレスを入力する手間を省くことができる。
153 159
154 現在のAliceは起動時にTopology ManagerのIPアドレスを入力する必要があり、TreeVNCの接続先自動検索機能が必要と考えられる。 160 現在のAliceは起動時にTopology ManagerのIPアドレスを入力する必要があり、TreeVNCの接続先自動検索機能が必要と考えられる。