abstract
This project aims to realize the software component of an hypothetical cloud service for the execution of portable code, which is provided by the users of the service itself.
A user submits their code to the system as an executable file through a specific client. For example, a user can submit to the system a JAR file containing Java code, so it can be executed following the specifications dictated by the language itself and the Java Virtual Machine on which is being executed.
The client task is to contact a server, which firstly persists the code that the user provided using a relational database. Secondly, it reaches the real service, which task is to allocate the resources needed for the code execution. The service, after completing its task, returns an endpoint which can then be returned by the server to the client, in order to complete the request made by the latter. After this, the user can contact the given endpoint through a RESTful API which allows them to execute the previously provided code passing the adequate parameters that the code itself needs.
The system responsible for the resources management is made by an ensemble of agents, which organization follows the "master-worker" pattern. The "master" agent notifies the other agents of a new pending request and decides which of them will perform the execution of this request. The "worker" agents task is to allocate the resources needed for the code execution. Those latter can be, so as to make the computational ability as scalable as possible, distributes on different machines. This means that all agents communicate and synchronize with the aid of a remote tuple centre. The "workers", after accepting a request, are able to create a new agent whose task is to wait for the user requests and, after they received one, to execute the given code.
outcomes