|
|
1.1 root 1: % run this through LaTeX with the appropriate wrapper
2:
3: \chapter {Motivation and Concepts}\label{cook:concepts}
4: Remote operations are a well understood technique for building distributed
5: applications.
6: Currently,
7: OSI technology provides a powerful notation for specifying the external
8: interactions of these systems.
9: Remote operations in OSI are particularly attractive as they specify the
10: homogeneous externally visible and verifiable characteristics needed for
11: interconnection compatibility,
12: while avoiding unnecessary constraints upon and changes to the heterogeneous
13: internal design and the implementation of the information processing systems
14: to be interconnected.
15: Many feel
16: that this capability is likely to be a key factor in the overall success of
17: OSI standardization.
18:
19: In \cite{ECMA.ROS},
20: a methodology for remote operations is presented which aims to package this
21: technology concisely.
22: Although the latter half of this document has been rendered obsolete by more
23: recent work in the standards bodies
24: (e.g., \cite{ISO.ROS.Service,ISO.ROS.Protocol})
25: The aim of this volume, {\sl The Applications Cookbook},
26: is to provide programming support for this methodology.
27:
28: \section {A Model for Distributed Applications}
29: Remote operations are viewed as part of a methodology for building
30: distributed applications.%
31: \footnote{This section presents a (hopefully) simplified version of the
32: information presented in the first half of \cite{ECMA.ROS}.
33: Interested readers should consult this original work for further details.}
34: In order to understand the role remote operations play in this programming
35: model,
36: one other notion must be explained first.
37:
38: \subsection {Abstract Data Types}
39: An {\em abstract data type\/} is a concept for describing a data structure
40: which is accessed in a well-defined manner.
41: This has several implications:
42: \begin{itemize}
43: \item Although the data structure may have a {\em concrete representation\/}
44: on a given local system (e.g., a {\em C\/} \verb"struct"),
45: its corresponding abstract data type is defined in an
46: implementation-independent fashion,
47: termed its {\em abstract syntax}.
48:
49: \item A well-defined set of rules,
50: defined by an {\em abstract transfer notation},
51: is used to serialize the abstract syntax so that a data structure
52: corresponding to the abstract data type may be unambiguously
53: transmitted on the network.
54: There are actually two mappings here:
55: \begin{itemize}
56: \item First, the data structure is mapped to the abstract syntax
57: for the abstract data type.
58: This is an implementation-dependent mapping.
59:
60: \item Second, the abstract syntax is mapped to the concrete
61: syntax.
62: This is a serializing activity resulting in a stream of octets
63: (although some concrete syntaxes produce bit-aligned,
64: rather than octet-aligned, streams).
65: Do not confuse the concrete representation described above
66: (which deals with programming languages), with the concrete
67: syntax (which deals with transmission properties).
68: \end{itemize}
69:
70: \item Access to an abstract data type is defined by a set of unitary actions
71: termed {\em operations},
72: which define the complete behavior of an instance of the abstract data
73: type.
74:
75: \item {\em Strong typing\/} results when operations are the only permitted
76: means of accessing an abstract data type.
77:
78: \item An {\em object model\/} for programming follows from the use of
79: abstract data types rather than concrete data structures.
80: Since operations are used to ultimately manipulate the data structures,
81: an important level of indirection has been introduced:
82: data structures may be accessed without regard to their actual
83: implementation.
84: \end{itemize}
85:
86: \subsection {Operations}
87: Having described the relationship between data structures,
88: abstract data types,
89: and operations,
90: consider the generic structure of an operation.
91: An {\em operation}, in its most primitive form,
92: is a simple request/reply interaction.
93: The interaction takes the following form:
94: \begin{itemize}
95: \item The operation is {\em invoked}.
96: An invocation consists of:
97: \begin{itemize}
98: \item an {\em operation number},
99: which uniquely identifies the operation to be performed;
100:
101: \item an arbitrarily complex {\em argument\/};
102:
103: \item an {\em invocation identifier},
104: which is used to distinguish this invocation from other
105: previous invocations;
106: and,
107:
108: \item possibly a {\em linked invocation identifier},
109: which is used to indicate that this invocation results
110: during the processing of a previous invocation.
111: \end{itemize}
112:
113: \item If the operation succeeds, then a {\em result\/} may be returned.
114: A result consists of:
115: \begin{itemize}
116: \item an invocation identifier corresponding to the operation
117: which succeeded;
118: and,
119:
120: \item (possibly) an arbitrarily complex {\em result}.
121: \end{itemize}
122:
123: \item If the operation fails, then an {\em error\/} is returned.
124: An error consists of:
125: \begin{itemize}
126: \item an invocation identifier corresponding to the operation
127: which failed;
128:
129: \item an {\em error number},
130: which uniquely identifies the error that occurred;
131: and,
132:
133: \item (possibly) an arbitrarily complex {\em parameter}.
134: \end{itemize}
135:
136: \item If the operation was not performed for some reason
137: (e.g., an unknown operation number, mistyped arguments for
138: the operation, and so on), then a {\em reject\/} is returned.
139: A reject consists of:
140: \begin{itemize}
141: \item an invocation identifier corresponding to the operation
142: which was performed
143: (in degenerate cases this information may not be available);
144: and,
145:
146: \item a {\em reason},
147: which describes, in general terms, the rejection which
148: occurred.
149: \end{itemize}
150: \end{itemize}
151: Note that in all cases,
152: operations are seen as being {\em total}.
153: This means that for any given operation,
154: the normal outcome (the result)
155: and all exception outcomes (the errors) are well-defined and mutually
156: exclusive (unambiguously distinguished).
157:
158: \subsection {Associations}
159: Thus far, we have implicitly assumed some communications relationship
160: (i.e., a {\em binding\/}) between the entity invoking operations,
161: the {\em invoker},
162: and the entity performing them,
163: {\em performer}.
164: It is necessary formalize these notions somewhat.
165:
166: An {\em association\/} is a binding between two entities,
167: which are referred to as
168: the {\em initiator\/} and the {\em responder}.
169: Although this sounds straight-forward,
170: there is actually one level of indirection present:
171: the initiator does not directly select a responder for binding,
172: but rather selects a {\em service\/} that it wishes to use.
173: During this process a responder is located and the binding established.
174:
175: The binding process is actually two-step:
176: first,
177: the initiator determines which service it requires and asks to have this
178: service mapped onto the entities available on the network;
179: second,
180: based on the initiator's communications requirements,
181: an association will be bound to one of those entities,
182: which becomes the responder.
183:
184: Note that there is no requirement that the initiator of an association be the
185: entity which requests operations to be invoked
186: (i.e., the initiator need not be an invoker),
187: nor that the responder of an association be the entity which performs the
188: operations
189: (i.e., the responder need not be a performer).
190:
191: \section {Design Guidelines}
192: Although the characteristics of operations will vary between applications,
193: there are certain guidelines which should be of universal interest.
194:
195: \subsection {Reliability Characteristics}
196: When executing an operation in a distributed environment,
197: there is always an element of uncertainity with regards to the occurrence of
198: remote events,
199: particularly when failures occur.
200: One classification of reliability might be as follows:
201: for a given invocation,
202: a guarantee is given that it occurs {\em exactly once},
203: {\em at least once}, or {\em at most once}.
204:
205: The first two guarantees require an end-to-end confirmation,
206: with the proviso that the semantics of {\em exactly once\/} require a
207: recovery scheme in the event of failures.
208: When an operation has the semantics of {\em at least once},
209: it is called {\em idempotent}.
210: These are operations which read information,
211: but do not modify the remote state.
212:
213: In practice,
214: implementing these semantics can be surprisingly straight-forward,
215: given the judicious use of invocation identifiers:
216: \begin{describe}
217: \item[exactly once:] The invoker repeatedly requests the operation
218: (using the same invocation identifier)
219: until either a confirmation (result or error) is received
220: or a rejection of ``duplicate operation'' is received.
221: The performer keeps track of the invocation identifiers of all
222: performed operations requested by an entity from an epoch date.
223: If the performer finds an invocation identifier being repeated,
224: rather than perform the operation,
225: it rejects the operation as a ``duplicate operation''.
226:
227: \item[at least once:] The invoker repeatedly requests the operation
228: (with any invocation identifier)
229: until a confirmation (result or error) is received.
230: The performer has no state information regarding previously used invocation
231: identifiers.
232:
233: \item[at most once:] The invoker requests the operation exactly once with any
234: invocation identifier.
235: The performer has no state information regarding previously used invocation
236: identifiers.
237: \end{describe}
238:
239: \subsection {Keeping Total Operations Total}
240: An operation may be thought of as {\em confirmed\/} when either a result or
241: error is returned by the performer.
242: However,
243: under the OSI framework for remote operations,
244: it is possible to have an operation which may only return a result,
245: or may only return errors.
246: This is a subtle point,
247: but one worth emphasizing:
248: in the past some operations have been defined which on success do not return
249: a result,
250: this lead to ambiguity in as much as the invoker could not determine the
251: ``correct'' time to terminate the association,
252: since ``silence'' on the part of the performer could mean that the operation
253: completed successfully or that the operation was still in progress and an
254: error return might be forthcoming.
255: In keeping with the philosophy of total operations,
256: it is important to have an operation return a result,
257: even if the information is \verb"NULL".
258:
259: \section {For Further Reading}
260: The first half of \cite{ECMA.ROS} is the most authoritative reference on
261: using remote operations.
262: In particular, Section~4.4
263: presents a simple template methodology for using remote operations.
264: As mentioned earlier,
265: Section~5 and beyond have been obsoleted by work in ISO and CCITT.
266:
267: In as much as the standards from these bodies deal with the remote operations
268: service and protocol,
269: they are not particularly germane here.
270: The ISO work on remote operations is presented in
271: \cite{ISO.ROS.Service} and \cite{ISO.ROS.Protocol}.
272: The corresponding CCITT work is
273: described in \cite{CCITT.ROS.Service} and \cite{CCITT.ROS.Protocol}.
274: The native interface to these services are discussed in
275: Chapter~\ref{librosap} of \volone/.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.