Since last year, I’m working with technologies related to distributed computing. Currently, my work is related to Windows High Performance Computing. But I was in touch with DSS/CCR, WCF, and I examined Java implementations, like GridGain. I mentioned Grid as a Service as an idea to implement in my post Grid Computing Programming.
A Grid as a Service is something that it could be implemented, with different base technologies. I guess there are some current implementations. Here is the idea in my mind:
- A grid of normal computers
- Software to distribute a task in that grid
- API and Web Front End, to upload a grid application to that grid.
- API and Web interface, to launch a task
The grid application could be:
- An executable, as an .exe or .dll (if the grid is Windows-based), or .jar (in Java).
- A manifest, describing the characteristics of the application: needed parameters, expected output (file, database, XML, …)
To launch a task, the user provides the input parameters to the uploaded grid application. And, at the end of execution, he/she receives a notification, possibly, an URL with the calculated result.
The underlying grid could be expanded to borrow more power from other grids. That is, the same API the developers use, could be consumed by other grid applications.
The machines could be provided by data centers that currently offer cloud services or virtual machines.
There are many details to discuss, as security concerns. An alternative is to program in a sandbox, or in a dedicated language oriented to grid and parallel computing. Parallel computing is not the same as grid computing: in my opinion, grid computing is more flexible, a grid application could send messages to any node in the grid, at any time, instead, parallel computing are more oriented to algorithms like map reduce, and more synchronized message passing (like MPI implementations).