⚙️ Installation & Configuration
Best Physical Architecture
📖 Docs

Best Physical Architecture - Optimizely CMS 12

Exam Area: Area 2 – Installation, Operation & Configuration (20%)


1. Minimum Production Setup

Load Balancer
    │
    ├── CMS Server 1 (Web + CMS)
    └── CMS Server 2 (Web + CMS)
         │
         ├── SQL Server (shared)
         ├── Azure Blob Storage (shared media)
         ├── Redis Cache (shared distributed cache)
         └── Azure Service Bus (shared events)

2. Components That Must Be Shared

ComponentPurposeTechnology
DatabaseContent storageSQL Server
Blob StorageMedia filesAzure Blob / File Share
Distributed CacheShared cacheRedis
Event BusCache invalidationAzure Service Bus / SQL events

3. Development Setup (Local)

Developer Machine:
├── IIS / IIS Express / Kestrel
├── SQL Server LocalDB / SQL Express
├── Local file system (no Blob)
└── No Redis needed (in-memory cache)

4. DXP (Azure) Architecture

Azure DXP:
├── Integration Environment
│   └── App Service (1 instance)
├── Preproduction Environment  
│   └── App Service (1-2 instances)
└── Production Environment
    └── App Service Plan (2+ instances, auto-scale)
         + Azure SQL Managed Instance
         + Azure Blob Storage
         + Azure Redis Cache
         + Azure CDN
         + Azure Service Bus

5. Network Considerations

Internet → CDN (static assets) → App Service
Internet → WAF/Firewall → App Service (dynamic)
App Service → Azure SQL (private endpoint)
App Service → Redis (private endpoint)
App Service → Blob Storage (private endpoint)

6. Scaling

// Horizontal scaling: add more instances
// Vertical scaling: upgrade App Service Plan

// With multiple instances, you MUST have:
// 1. Shared database
// 2. Shared media storage (Blob)
// 3. Shared cache (Redis)
// 4. Shared events (Service Bus)

Review Questions

  1. What shared storage is required when running multi-server? (Azure Blob Storage for media)
  2. What handles cache invalidation in a cluster? (Azure Service Bus to broadcast events)
  3. What is Redis used for in CMS? (Distributed cache - shared across instances)
  4. Is Redis required for local development? (Not required - in-memory cache is sufficient)