Architecture¶
OpenStack is a distributed cloud operating system composed of independent services that communicate through a shared message bus (RabbitMQ) and a central identity service (Keystone). Each service owns its database and exposes a REST API. This microservices architecture enables incremental adoption but increases operational complexity compared to single-daemon platforms like OpenNebula.
See also: infrastructure/openstack/index, infrastructure/openstack/architecture, infrastructure/openstack/operations, infrastructure/openstack/security
Component Overview¶
graph TD
subgraph Users["User Interfaces"]
HORIZON["Horizon<br/>(Web Dashboard)"]
CLI["OpenStack CLI"]
end
subgraph Core["Core Services"]
KEYSTONE["Keystone<br/>(Identity)"]
NOVA["Nova<br/>(Compute)"]
NEUTRON["Neutron<br/>(Networking)"]
CINDER["Cinder<br/>(Block Storage)"]
GLANCE["Glance<br/>(Image)"]
SWIFT["Swift<br/>(Object Storage)"]
end
subgraph Orchestration["Orchestration"]
HEAT["Heat<br/>(Orchestration)"]
MAGNUM["Magnum<br/>(Container Infra)"]
end
subgraph Infrastructure["Shared Infrastructure"]
MQ["RabbitMQ<br/>(Message Bus)"]
DB["MariaDB / Galera<br/>(Database)"]
MEMCACHED["Memcached<br/>(Cache)"]
end
HORIZON --> KEYSTONE
CLI --> KEYSTONE
KEYSTONE --> DB
NOVA --> MQ
NOVA --> DB
NEUTRON --> MQ
NEUTRON --> DB
CINDER --> MQ
CINDER --> DB
GLANCE --> DB
SWIFT --> DB
HEAT --> MQ
HEAT --> DB
NOVA --> NEUTRON
NOVA --> CINDER
NOVA --> GLANCE
MAGNUM --> HEAT
Core Services¶
Keystone (Identity)¶
Keystone is the central authentication, authorization, and service catalog for OpenStack:
- Authentication: Validates user identity via passwords, tokens, or federated identity (SAML, OIDC)
- Authorization: Role-Based Access Control (RBAC) with per-project policies
- Service Catalog: Registry of all OpenStack service endpoints (each service registers its API URL)
- Multi-domain: Supports multiple identity backends (SQL, LDAP, Active Directory)
- Token types: Fernet tokens (lightweight, symmetric-key) or JWT tokens
- Every API request in OpenStack starts with Keystone token validation
Nova (Compute)¶
Nova manages the lifecycle of virtual machine instances:
- nova-api: Accepts and validates REST API requests
- nova-scheduler: Selects compute hosts based on filters and weights (similar to Kubernetes scheduling)
- nova-conductor: Mediates database access for compute nodes (security proxy)
- nova-compute: Runs on each hypervisor node, manages VM lifecycle via libvirt (KVM) or other drivers
- nova-novncproxy / nova-serialproxy: Console access to instances
- Supports live migration, resize, snapshot, and evacuate operations
- Integrates with Neutron for networking, Cinder for volumes, Glance for images
Neutron (Networking)¶
Neutron provides network connectivity as a service between interface devices managed by other OpenStack services:
- Networks and subnets: Virtual L2 segments with IP address management
- Routers: Virtual L3 routing between subnets, with SNAT for external access
- Floating IPs: One-to-one NAT from external networks to VMs
- Security groups: Per-port stateful firewall rules
- Plugins: ML2 (Modular Layer 2) with drivers for Open vSwitch, Linux bridge, SR-IOV, and vendor SDNs
- Agents: L2 agent (per compute node), L3 agent (routing), DHCP agent, metadata agent
Cinder (Block Storage)¶
Cinder provides persistent block storage volumes to instances:
- Volume creation, attachment, snapshot, and cloning
- Backend drivers: LVM (local), Ceph RBD, NetApp, Dell EMC, AWS EBS, and dozens more
- Volume types with extra specs (performance tiers, replication)
- Availability zone awareness for volume placement
- Backup to external backends (Swift, Ceph, POSIX)
Glance (Image)¶
Glance manages VM disk images:
- Stores, discovers, and retrieves bootable disk images
- Supports multiple formats: QCOW2, RAW, VHD, VMDK, ISO, AKI/ARI (kernel/ramdisk)
- Backend stores: local filesystem, Swift, Ceph, S3, HTTP
- Image properties and metadata for scheduling hints
- Image sharing across projects
Swift (Object Storage)¶
Swift provides highly available, eventually consistent object storage:
- Stores unstructured data objects organized in containers and accounts
- Designed for durability and horizontal scalability (no single point of failure)
- Ring-based data placement across storage nodes
- Supports large objects (segmented uploads), versioning, and expiration
- Independent of the SQL database (uses its own consistency layer)
Orchestration and Supporting Services¶
Heat (Orchestration)¶
Heat provisions OpenStack resources using declarative templates (HOT format -- Heat Orchestration Template):
- Define stacks of interconnected resources (instances, networks, volumes, etc.)
- Supports auto-scaling via Ceilometer alarms
- Handles dependency ordering and rollback on failure
- Environment files separate parameter values from templates
Horizon (Dashboard)¶
Horizon is the web-based management interface:
- Dashboard for managing instances, volumes, networks, and images
- Project and user administration via Keystone integration
- Extensible via Django plugins for additional services
- Serves as the primary GUI for cloud operators and tenants
Magnum (Container Infrastructure)¶
Magnum provisions and manages Kubernetes, Swarm, and Mesos clusters on OpenStack:
- Uses Heat templates to orchestrate cluster creation
- Integrates with Neutron for cluster networking
- Manages cluster lifecycle (create, update, delete)
- Certificates and node group management
Shared Infrastructure¶
RabbitMQ (Message Bus)¶
All OpenStack services communicate asynchronously through RabbitMQ:
- Implements AMQP 0-9-1 protocol
- Topics-based routing (e.g.,
notifications.info,nova) - Supports quorum queues for durability
- HA via mirrored queues or quorum queues across a cluster
MariaDB / Galera (Database)¶
Each service runs its own database, typically MariaDB with Galera clustering for HA:
- Galera provides multi-master synchronous replication
- Each service has its own database schema (nova_api, nova_cell0, neutron, cinder, glance, keystone, heat)
- Connection routed through a load balancer (HAProxy) with health checks
Memcached¶
Memcached provides caching for Keystone tokens and service catalog lookups:
- Reduces database load for repeated authentication
- Deployed as a pool of instances behind a load balancer
- All services use
memcache_serversconfiguration for shared caching
Request Flow: Instance Creation¶
sequenceDiagram
actor User
participant Horizon as Horizon / CLI
participant Keystone as Keystone
participant Nova as Nova API
participant Sched as Nova Scheduler
participant Compute as Nova Compute
participant Glance as Glance
participant Neutron as Neutron
participant MQ as RabbitMQ
User->>Horizon: Launch instance
Horizon->>Keystone: authenticate (get token)
Keystone-->>Horizon: token
Horizon->>Nova: POST /servers (token + flavor + image)
Nova->>Keystone: validate token
Nova->>MQ: publish create_instance message
Nova-->>Horizon: instance BUILD status
Sched->>MQ: consume schedule message
Sched->>Sched: filter + weigh compute hosts
Sched->>MQ: publish selected host
Compute->>MQ: consume build message for this host
Compute->>Glance: download image
Glance-->>Compute: image data
Compute->>Neutron: create ports + allocate IPs
Neutron-->>Compute: port info (MAC, IP)
Compute->>Compute: create VM via libvirt/KVM
Compute->>Nova: update instance status ACTIVE
Nova-->>Horizon: instance ACTIVE
Horizon-->>User: instance ready
Service Port Reference¶
| Service | Port | Protocol |
|---|---|---|
| Keystone | 5000 | HTTP (API v3) |
| Nova API | 8774 | HTTP |
| Neutron | 9696 | HTTP |
| Cinder | 8776 | HTTP |
| Glance | 9292 | HTTP |
| Swift | 8080 | HTTP (proxy) |
| Heat | 8004 | HTTP |
| Horizon | 80/443 | HTTP/HTTPS |
| RabbitMQ | 5672 | AMQP |
| MariaDB | 3306 | MySQL |
| Memcached | 11211 | TCP |
References¶
How It Works¶
Internal mechanisms, VM lifecycle, network data paths, and service interactions.
VM Provisioning Flow¶
sequenceDiagram
participant User as User / Horizon
participant KS as Keystone
participant Nova_API as Nova API
participant Sched as Nova Scheduler
participant MQ as RabbitMQ
participant Compute as Nova Compute
participant Neutron as Neutron
participant Glance as Glance
participant Cinder as Cinder
User->>KS: Authenticate (token)
KS-->>User: Token
User->>Nova_API: POST /servers (flavour, image, network)
Nova_API->>KS: Validate token
Nova_API->>Glance: Check image exists
Nova_API->>Neutron: Allocate port
Nova_API->>MQ: Schedule request
MQ->>Sched: Pick host
Sched->>Sched: Filter: RAM, CPU, disk, AZ
Sched->>Sched: Weigh: balance, spread
Sched->>MQ: Host selected
MQ->>Compute: Build instance
Compute->>Glance: Download image
Compute->>Cinder: Attach volume (if any)
Compute->>Neutron: Plug port → OVN
Compute->>Compute: Launch KVM/QEMU domain
Compute->>Nova_API: Instance ACTIVE
Neutron Networking (OVN)¶
flowchart TB
subgraph Tenant["Tenant Network"]
VM1["VM 1\n(10.0.0.2)"]
VM2["VM 2\n(10.0.0.3)"]
end
subgraph OVN["OVN Data Path"]
LS["Logical Switch\n(tenant subnet)"]
LR["Logical Router\n(inter-subnet)"]
GW["Gateway Router\n(external)"]
SNAT["SNAT\n(floating IP)"]
end
subgraph Physical["Physical Network"]
ExtNet["External Network\n(provider bridge)"]
end
VM1 --> LS
VM2 --> LS
LS --> LR
LR --> GW
GW --> SNAT
SNAT --> ExtNet
style OVN fill:#ef3e42,color:#fff
Ceph Integration¶
| OpenStack Service | Ceph Layer | Purpose |
|---|---|---|
| Cinder | RBD (RADOS Block Device) | Persistent VM volumes |
| Glance | RBD or RGW (Object) | VM image storage |
| Nova | RBD (ephemeral disks) | Live migration enabler |
| Swift | RGW (RADOS Gateway) | S3-compatible object store |
| Manila | CephFS | Shared file systems |
Multi-Region Architecture¶
flowchart TB
subgraph Global["Global Services"]
KS_G["Keystone\n(shared identity)"]
end
subgraph Region1["Region 1"]
Nova1["Nova"]
Neutron1["Neutron"]
Cinder1["Cinder"]
Compute1["Compute Hosts"]
end
subgraph Region2["Region 2"]
Nova2["Nova"]
Neutron2["Neutron"]
Cinder2["Cinder"]
Compute2["Compute Hosts"]
end
KS_G --> Region1
KS_G --> Region2
Sources¶
Benchmarks¶
Scope
Performance characteristics, scaling limits, and resource consumption for OpenStack.
Nova (Compute) Performance¶
| Operation | Time | Notes |
|---|---|---|
| VM boot (local) | 10-30s | Depends on image size |
| VM boot (Ceph) | 15-45s | RBD clone is fast |
| Live migration | 5-60s | Depends on memory size |
| Snapshot | 10-120s | Copy-on-write with Ceph |
Scaling Benchmarks¶
| Dimension | Tested | Notes |
|---|---|---|
| Compute nodes | 500+ | Production deployments |
| VMs per compute | 100+ | Depends on host resources |
| Total VMs | 50,000+ | Large cloud deployments |
| API requests/sec | 1,000+ | Keystone auth bottleneck |
Neutron (Networking)¶
| Feature | OVS Performance | OVN Performance |
|---|---|---|
| Port creation | 5-10s | 2-5s |
| Network create | 1-3s | 1-2s |
| Floating IP | 2-5s | 1-3s |
| East-west throughput | 8-9 Gbps | 9-10 Gbps |
Sourcing Status¶
Unsourced Performance Data
The performance numbers in this document are estimated from vendor documentation, community benchmarks, and engineering judgment. They do not represent controlled benchmarks with documented test conditions. Specific hardware configurations, software versions, and test methodologies were not recorded.
Use these figures as rough guidance only. For production capacity planning, run your own benchmarks against your specific workload and infrastructure.