Architecture
Overview
The Cloudify Manager contains several open-source components. The relationships between the components in the Cloudify Manager architecture are illustrated in the diagram below.
Nginx
Nginx is a high-performing web server. In the Cloudify Manager it serves two purposes:
- A proxy for the Cloudify REST service and Cloudify Management Console
- A file server to host Cloudify-specific resources, agent packages, and blueprint resources.
File Server
The file server served by Nginx, is available at https://{manager_ip}:53333/resources
, which is mapped to the /opt/manager/resources/
directory. You must authenticate in order to access the file server.
To access subdirectories that include tenant names in their path, you must have privileges on that tenant. These subdirectories are:
blueprints
uploaded-blueprints
deployments
tenant-resources
The directories that are stored in snapshots are:
blueprints
uploaded-blueprints
deployments
tenant-resources
plugins
global-resources
The tenant-resources
and global-resources
directories are not used by Cloudify Manager and can be created by the user for storing custom resources.
Gunicorn and Flask
Gunicorn is a web server gateway interface HTTP server. Flask is a web framework.
Together, Gunicorn and Flask provide the Cloudify REST service. The REST service is written using Flask, and Gunicorn is the server. Nginx is the proxy to that server. Cloudify’s REST service is the integrator of all parts of the Cloudify environment.
PostgreSQL
PostgreSQL is an object-relational database that can handle workloads ranging from small single-machine applications to large Internet-facing applications.
In the Cloudify Manager, PostgreSQL serves two purposes:
- Provides the main database that stores the application’s model (i.e. blueprints, deployments, runtime properties)
- Provides indexing, logs’, and events’ storage
RabbitMQ
RabbitMQ is a queue-based messaging platform.
RabbitMQ is used by Cloudify as a message queue for different purposes:
- Queueing deployment tasks
- Queueing logs and events
- Queueing metrics
Pika
Pika is a pure-Python implementation of the AMQP 0-9-1 protocol.
The Cloudify management worker and the host agents are using pika
to
communicate with RabbitMQ.
Management Worker (or Agent)
Both the Workflow Executor
and the Task Broker
that appear in the diagram are part of the Cloudify Management Worker.
- The
Workflow Executor
receives workflow execution requests, creates the tasks specified by the workflow, submits the tasks for execution by host agents and theTask Broker
, and manages the workflow state. - The
Task Broker
executes API calls to IaaS providers to create deployment resources and executes other tasks specified incentral_deployment_agent
plugins.
Note: All the agents (the Management Worker, and Agents deployed on application hosts) are using the same implementation.