Project Plan for Inferno Experiment
Aim of the project
We would like to create a simple distributed system which is built up from services running on remote machines. This might include three services:
- A data extraction service (like GADS)
- A data processing service (maybe finding the depth of an isosurface or similar)
- A data rendering/visualisation service (perhaps creating a simple movie from the results of the processing)
The ultimate aim is to be able to "pipe" these services together in a very simple fashion. So the scientist (end user) would type in a command like this:
extract | process | render
The output from the
extract service is piped directly into the input of the
process service, and so forth. There are few notable advantages of this approach:
- The data can be "streamed" directly from service to service without having to be written to any hard drive in an intermediate format
- This is because the extract service will write its output to the standard output and the process service will read from standard input, just like Unix pipes
- It should be possible for the process service to start running before the extraction service has finished.
- If the extract service is extracting a time series, then the process service can start work as soon as it receives the first timestep's worth of data. Processing of the first timestep can proceed simultaneously with extraction of the second.
- The Inferno system should make it easy to monitor the progress of the running services.
These features are very hard to achieve using a Web/Grid Services architecture.
[Question: It is likely that, as a first attempt, the data will not actually go from service to service but will pass through the controlling machine (red path on diagram below):

What would be the best way to make the data pass from service to service (green path on diagram)? Not sure yet, but see
InfernoServiceToServiceCommunication for more info.]
Project breakdown
We shall follow this series of steps:
- Become familiar with the Inferno environment and the Limbo language
- We'll have to work out whether to use the Limbo language to implement the services. We might not have to; we could run native processes (written in C/C++/Java/etc) via Inferno.
- Write a "dummy" extraction service that outputs some data
- Work out how to run this service on a remote machine
- And work out how to monitor its progress
- Write a "dummy" processing service that takes in raw data and does something to it
- Run the processing service on a different remote machine
- Try to stream data between the two services
- If this doesn't work immediately, make sure the streaming works when the services are running on the same machine (perhaps we can test them as native Unix/Linux processes, connected with standard Unix pipes)
- Write a "dummy" rendering service and include this in the pipeline
- Change the "dummy" services for "real" services.
--
JonBlower - 01 Apr 2004
Topic revision: r3 - 25 May 2004 - 16:50:38 -
JonBlower