Service to Service Communication in Inferno

Inferno makes it easy to create simple workflows by "piping" data from one service to the next (see InfernoExperimentProjectPlan). However, it is not literally true that the data move from one remote service to the next: in fact, the data will be piped to the user's console, from where they will be piped out to the next service. For large amounts of data, this could be rather inefficient, especially if the user is on a low-bandwidth Internet connection.

This page describes a possible alternative way of transporting data, at the expense of a greater required effort in specifying the workflow. Let's say we'd like to run the workflow:

extract < input.data | process | render > output.data

Each step reads data from its standard input and writes to its standard output. Let's assume that the "extract" service runs on a machine called "alpha", the "process" service runs on "bravo" and the "render" service runs on "charlie". The user is sitting at another machine, called "delta".

Each service exposes a namespace that looks like this:

                   /
                   |
   ----------------------------------
   |         |        |        |
extract   output   progress   ...

The left-most "file" represents the executable, ("extract", "process" or "render"). When the user writes data to this "executable" (e.g. cat input.data | extract) the service is set up to write data to its "output" file. To achieve service-to-service communication, the next executable in the chain (in this case, "process") is mounted in place of the "output" file.

-- JonBlower - 25 May 2004

Topic revision: r1 - 25 May 2004 - 17:04:00 - JonBlower
 
This site is powered by the TWiki collaboration platformCopyright &© by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback