A distributed data flow satisfies the following informal properties. •
Asynchronous,
non-blocking, and
one-way. Each event represents a single instance of a
non-blocking, one-way,
asynchronous method invocation or other form of explicit or implicit
message passing between two layers or software components. For example, each event might represent a single request to
multicast a
packet, issued by an
application layer to an underlying
multicast protocol. The requirement that events are one-way and asynchronous is important. Invocations of methods that may return results would normally be represented as two separate flows: one flow that represents the requests, and another flow that represents responses. •
Homogeneous,
unidirectional, and
uniform. All events in the distributed flow serve the same functional and logical purpose, and are related to one another; generally, we require that they represent method calls or message exchanges between
instances of the same functional
layers, or instances of the same
components, but perhaps on different
nodes within a
computer network. Furthermore, all events must flow in the same direction (i.e., one type of a layer or component always produces, and the other always consumes the events), and carry the same type of a
payload. For example, a set of events that includes all multicast requests issued by the same application layer to the same multicast protocol is a distributed flow. On the other hand, a set of events that includes multicast requests made by different applications to different multicast protocols would not be considered a distributed flow, and neither would be a set of events that represent multicast requests as well as acknowledgments and error notifications. •
Concurrent,
continuous, and
distributed. The flow usually includes all events that flow between the two layers of software, simultaneously at different locations, and over a finite or infinite period of time. Thus, in general, events in a distributed flow are distributed both in space (they occur at different nodes) and in time (they occur at different times). For example, the flow of multicast requests would include all such requests made by instances of the given application on different nodes; normally, such flow would include events that occur on all nodes participating in the given multicast protocol. A flow, in which all events occur at the same node would be considered degenerate. == Formal representation ==