Skip to content

Architecture Pattern - Cell-Based Architecture

Overview

Cell-based architecture divides a system into isolated, self-contained units called cells, each capable of independently serving a subset of users or traffic. This pattern limits the blast radius of failures, enables independent scaling, and supports progressive deployments - making it ideal for large-scale, high-availability systems.


Pattern Description

Problem

  • Large monolithic or even microservice architectures can suffer from correlated failures
  • A single bad deployment or infrastructure issue affects all users
  • Scaling the entire system is wasteful when only part of the load is growing
  • Regional failures can take down the entire application
  • Shared infrastructure creates single points of failure

Solution

Partition the system into independent cells where: - Each cell is a complete, self-contained copy of the application stack - Cells are isolated from each other (no shared dependencies) - A routing layer assigns users/tenants to specific cells - Failures in one cell do not propagate to others - Cells can be deployed, scaled, and updated independently

flowchart TB
  U[Users / tenants] --> CR[Cell router<br/>maps tenant to cell]
  CR --> C1
  CR --> C2
  CR --> C3
  subgraph C1[Cell 1]
    A1[App tier] --> D1[(DB)]
    Q1[Queue]
    A1 --> Q1
  end
  subgraph C2[Cell 2 - failure isolated]
    A2[App tier] --> D2[(DB)]
    Q2[Queue]
    A2 --> Q2
  end
  subgraph C3[Cell 3]
    A3[App tier] --> D3[(DB)]
    Q3[Queue]
    A3 --> Q3
  end

When to Use

  • Large-scale SaaS platforms with millions of users
  • Systems requiring fault isolation and blast radius reduction
  • Multi-tenant platforms needing tenant-level isolation
  • Applications with strict availability requirements (99.99%+)
  • Global applications needing regional data residency

When to Avoid

  • Small applications with few users
  • Systems with heavy cross-cell data dependencies
  • Applications where all users must share real-time state
  • Early-stage products where operational complexity is not justified

Architecture Components

Cell Architecture Overview

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚    Cell Router       β”‚
                    β”‚  (assigns users to   β”‚
                    β”‚   cells)             β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚                  β”‚                  β”‚
     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
     β”‚   Cell A     β”‚   β”‚   Cell B     β”‚   β”‚   Cell C     β”‚
     β”‚              β”‚   β”‚              β”‚   β”‚              β”‚
     β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚   β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚   β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
     β”‚  β”‚ API GW  β”‚  β”‚   β”‚  β”‚ API GW  β”‚  β”‚   β”‚  β”‚ API GW  β”‚  β”‚
     β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜  β”‚   β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜  β”‚   β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜  β”‚
     β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”‚   β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”‚   β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”‚
     β”‚  β”‚Services β”‚  β”‚   β”‚  β”‚Services β”‚  β”‚   β”‚  β”‚Services β”‚  β”‚
     β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜  β”‚   β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜  β”‚   β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜  β”‚
     β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”‚   β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”‚   β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”‚
     β”‚  β”‚Database β”‚  β”‚   β”‚  β”‚Database β”‚  β”‚   β”‚  β”‚Database β”‚  β”‚
     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Core Components

Component Purpose Implementation
Cell Router Assigns and routes users to cells DNS, load balancer, custom routing service
Cell Complete application stack (compute, data, cache) Identical deployable units
Cell Gateway Entry point for each cell API Gateway, load balancer
Cell Services Application logic within the cell Microservices, containers, serverless
Cell Data Store Isolated database per cell Dedicated DB instance/cluster
Cell Cache Isolated cache per cell Dedicated Redis/Memcached
Control Plane Manages cell lifecycle and routing Centralized management service
Cross-Cell Service Shared services (if absolutely necessary) Minimal shared dependencies

Cell Routing Strategies

Assignment Methods

Method Description Pros Cons
Hash-Based Hash user/tenant ID to cell Even distribution Rebalancing on cell add/remove
Consistent Hashing Hash ring for cell assignment Minimal rebalancing Complexity
Tenant-Based Assign entire tenant to cell Isolation, data residency Uneven load
Geographic Route by user region Low latency, compliance Complex for global users
Random with Affinity Random assignment, sticky after first request Simple No data locality guarantee

Routing Implementation

Cloud Service Implementation
AWS Route 53 + ALB Weighted/latency routing to cell ALBs
AWS CloudFront + Lambda@Edge Custom routing logic at edge
AWS Global Accelerator Static IPs, cell-level routing
Azure Front Door Backend pools per cell
Azure Traffic Manager DNS-level cell routing
GCP Cloud Load Balancing URL map to cell backends
GCP Cloud DNS Geolocation routing to cells

Cloud Implementation

AWS Cell-Based Architecture

Component AWS Service Per Cell
Router Route 53 / CloudFront + Lambda@Edge Shared
Gateway ALB + API Gateway Dedicated
Compute ECS/EKS/Lambda Dedicated
Database Aurora / DynamoDB Dedicated
Cache ElastiCache Redis Dedicated
Storage S3 (prefixed by cell) Dedicated or partitioned
Queue SQS Dedicated
Monitoring CloudWatch (cell namespace) Dedicated dashboards

AWS Cell Architecture:

Route 53 -> CloudFront -> Lambda@Edge (cell router)
                            |
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚             β”‚             β”‚
         Cell-A ALB    Cell-B ALB    Cell-C ALB
              β”‚             β”‚             β”‚
         ECS Cluster   ECS Cluster   ECS Cluster
              β”‚             β”‚             β”‚
         Aurora-A      Aurora-B      Aurora-C
         Redis-A       Redis-B       Redis-C

Azure Cell-Based Architecture

Component Azure Service Per Cell
Router Azure Front Door Shared
Gateway Application Gateway Dedicated
Compute AKS / Container Apps Dedicated
Database Azure SQL / Cosmos DB Dedicated
Cache Azure Cache for Redis Dedicated
Storage Storage Account Dedicated
Queue Service Bus Dedicated
Monitoring Azure Monitor (cell workspace) Dedicated

Google Cloud Cell-Based Architecture

Component GCP Service Per Cell
Router Global Load Balancer Shared
Gateway Regional Load Balancer Dedicated
Compute GKE / Cloud Run Dedicated
Database Cloud SQL / Spanner Dedicated
Cache Memorystore Redis Dedicated
Storage Cloud Storage (prefixed) Dedicated or partitioned
Queue Pub/Sub Dedicated
Monitoring Cloud Monitoring (cell labels) Dedicated dashboards

Cell Sizing and Capacity

Sizing Guidelines

Factor Consideration
Users per Cell 10,000 - 1,000,000 (depends on workload)
Cell Count Start with 3-5, grow as needed
Max Cell Size Should be small enough that losing a cell is survivable
Min Cell Count At least 3 for meaningful blast radius reduction
Headroom Each cell should run at 60-70% capacity
New Cell Provisioning Automated, < 30 minutes

Cell Lifecycle

State Description
Provisioning New cell being created (infrastructure + deployment)
Active Serving traffic, accepting new users
Draining Not accepting new users, serving existing
Maintenance Temporarily offline for updates
Decommissioned All users migrated, infrastructure torn down

Failure Isolation

Blast Radius Comparison

Architecture Bad Deployment Impact Infrastructure Failure Impact
Monolith 100% of users affected 100% of users affected
Microservices (shared infra) 100% of users (for affected service) 100% of users
Cell-Based (10 cells) ~10% of users per cell ~10% of users per cell
Cell-Based (100 cells) ~1% of users per cell ~1% of users per cell

Failure Handling

Failure Type Detection Response
Cell Health Degradation Health checks, error rate monitoring Route new users away, investigate
Cell Total Failure Health checks fail Evacuate users to healthy cells
Bad Deployment Canary metrics Rollback cell, stop deployment
Data Corruption Consistency checks Isolate cell, restore from backup
Capacity Exhaustion Resource utilization alerts Stop routing new users, scale or add cell

Deployment Strategies

Progressive Cell Deployment

Strategy Description Risk
Single Cell Canary Deploy to one cell first, monitor Very low
Wave Deployment Deploy to cells in waves (10% -> 30% -> 100%) Low
Cell-at-a-Time Deploy to one cell, verify, move to next Very low (slow)
Blue/Green per Cell Maintain two environments per cell Low (expensive)

Deployment Pipeline

Code Commit -> Build -> Test -> Deploy to Canary Cell
                                       |
                              Monitor (30 min)
                                       |
                              β”Œβ”€β”€ Pass ──> Deploy Wave 1 (3 cells)
                              β”‚                    |
                              β”‚           Monitor (60 min)
                              β”‚                    |
                              β”‚           Deploy Wave 2 (remaining cells)
                              β”‚
                              └── Fail ──> Rollback Canary Cell
                                           Alert On-Call

Cross-Cell Concerns

What Can Be Shared

Component Shared or Per-Cell Rationale
User Directory / Auth Shared Users need single identity
Cell Router / Control Plane Shared Must know all cells
DNS / CDN Shared Single entry point
Billing / Payment Shared (or per-cell with aggregation) Financial consistency
Admin Portal Shared Operators manage all cells
Application Data Per-Cell Isolation requirement
Application Cache Per-Cell Performance isolation
Message Queues Per-Cell Failure isolation
Monitoring Data Per-Cell (aggregated centrally) Cell-level visibility

Cross-Cell Data Access

When data from another cell is needed (rare): 1. Async replication via events (preferred) 2. Cross-cell API calls (with circuit breakers) 3. Shared read-only data store (for reference data) 4. Data aggregation service (for analytics)


Real-World Examples

Company Implementation
AWS (internal) Cell-based architecture for core services (Route 53, IAM)
Slack Cells per workspace/organization
Microsoft (Xbox Live) Cell-based for gaming services
Shopify Pod architecture (cell variant) per merchant group

Certification Exam Focus Areas

AWS

  • Multi-AZ and multi-Region architectures
  • Route 53 routing policies for cell assignment
  • DynamoDB global tables for cross-cell reference data
  • CloudFormation StackSets for cell provisioning
  • AWS Organizations for cell-level account isolation

Azure

  • Availability Zones and paired regions
  • Azure Front Door for global routing
  • Deployment Stamps pattern (Azure's term for cell-based)
  • ARM templates / Bicep modules for cell templates
  • Azure Lighthouse for multi-cell management

Google Cloud

  • Regional vs multi-regional resource deployment
  • Cloud Spanner for globally consistent cross-cell data
  • Deployment Manager or Terraform for cell provisioning
  • GKE multi-cluster with fleet management
  • Cloud Load Balancing for global cell routing

  • AWS Cell-Based Architecture: https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/
  • Azure Deployment Stamps: https://learn.microsoft.com/en-us/azure/architecture/patterns/deployment-stamp
  • Google Cloud Multi-Region: https://cloud.google.com/architecture/framework/reliability
  • Cell-Based Architecture (AWS Blog): https://aws.amazon.com/blogs/architecture/shuffle-sharding-massive-and-magical-fault-isolation/

Key Takeaways

  1. Cell-based architecture is the gold standard for blast radius reduction in large-scale systems
  2. The key principle is complete isolation - each cell should have zero shared dependencies with other cells
  3. Cell routing is the most critical component - it must be highly available and low latency
  4. Start with a small number of cells (3-5) and grow as the system scales
  5. Progressive deployment across cells provides the safest deployment model
  6. The operational complexity is significant - automate cell provisioning and management
  7. This pattern is most valuable for systems serving millions of users with strict availability SLAs
  8. AWS internally uses this pattern extensively - understanding it demonstrates advanced architectural thinking