The Optimization Server is a docker-based modularized application.

On the following diagram, you will find different clients on the left, the master on the middle and the workers on the right.
Optimization Server Global architecture Master and workers communicate through messaging, using AMQP over RabbitMQ. Workers are automatically discovered by the master, as soon as they are deployed. Master uses MongoDB to store Optimization Server internal data. Both RabbitMQ and MongoDB are infrastructure, and should be transparent for a user of Optimization Server. More details about how the master works are given in Section Master.

Moreover, keycloak or basic authentication has to be used to securely access master API. Keycloak can handle more complex authentication use cases than basic authentication, but is more difficult to use locally (requires valid hostname). More details about authentication are given in the dedicated section.

A typical workflow is the following. A job creation is requested on the client side, being given input(s) and sent to the master. The master stores inputs in buckets and forward the job creation request through messaging to workers. One of the workers executes the job and sends back information to the master, that stores them. Either clients receive information about this job through Web-sockets over STOMP, or they can regularly pull the master through HTTP.