Questo progetto si pone come obiettivo quello di realizzare la componente software di un ipotetico web service di cloud computing per l’esecuzione di codice portable fornito dagli utenti del servizio stesso.
Un utente sottopone il proprio codice al sistema sotto forma di eseguibile attraverso un client apposito. Ad esempio, un utente può sottoporre al sistema un file JAR contenente codice in linguaggio Java e vederlo messo in esecuzione secondo le specifiche che il linguaggio stesso e la Java Virtual Machine su cui viene fatto eseguire indicano.
Il client ha come compito quello di contattare un server, il quale per prima cosa fa persistere il codice che l’utente ha fornito utilizzando un database relazionale. In secondo luogo, contatta il servizio vero e proprio il cui scopo è quello di allocare le risorse necessarie all’esecuzione di codice. Il servizio, dopo aver svolto il proprio compito, fornisce un endpoint che il server può restituire al client, completando la richiesta fatta. L’utente a quel punto può contattare l’endpoint ottenuto attraverso una RESTful API che gli permette di eseguire il codice che ha fornito in precedenza passando gli adeguati parametri che il codice stesso si aspetta di ricevere.
Il sistema responsabile della gestione delle risorse è costituito da un certo insieme di agenti, la cui organizzazione segue il pattern "master-worker". L’agente “master” notifica gli agenti di una nuova richiesta pendente e decide a quale di essi spetta l’esecuzione della specifica richiesta, mentre gli agenti “worker” si preoccupano di riservare le risorse per l’esecuzione del codice. Questi ultimi possono essere, proprio per rendere scalabile la capacità di calcolo, distribuiti su più macchine, perciò comunicano e si sincronizzano tramite un tuple centre remoto. I “worker”, dopo aver preso in carico una richiesta, sono capaci di creare un nuovo agente il cui compito è attendere le richieste dell’utente e, ricevutane una, mettere in esecuzione il codice fornito.