Skip to content

7. Deployment View

Help: The deployment view describes:

  1. The technical infrastructure used to execute the system, with infrastructure elements like geographical locations, environments, computers, processors, channels, and net topologies as well as other infrastructure elements.
  2. The mapping of (software) building blocks to that infrastructure elements.

Often systems are executed in different environments, e.g., development, test, staging, production. In such cases, you should document all relevant environments.

Especially document the deployment view when your software is executed as a distributed system with more than one computer, processor, server, or container, or when you design and construct your own hardware/infrastructure.

Motivation: Software does not run without hardware. This underlying infrastructure can and will influence your system and/or some cross-cutting concepts. Therefore, you need to know the infrastructure.

Form: UML deployment diagrams, C4 deployment diagrams, or similar infrastructure-aware notations. Use tables to map building blocks to infrastructure nodes.


7.1 Infrastructure Level 1

Help: Describe (usually in a combination of diagrams, tables, and text):

  • The distribution of your system to multiple locations, environments, computers, processors, etc., as well as the physical connections between them
  • Important justification or motivation for this deployment structure
  • Quality and/or performance features of the infrastructure
  • The mapping of software artifacts to elements of the infrastructure

Deployment Overview Diagram

\<Insert a deployment diagram showing the production infrastructure. Consider using PlantUML, Mermaid, or C4 deployment notation.>

┌───────────────────────────────────────────────────────────────────┐
│                        Cloud Provider (AWS)                       │
│                                                                   │
│  ┌─────────────────────────┐  ┌─────────────────────────┐        │
│  │    Availability Zone A   │  │    Availability Zone B   │        │
│  │                         │  │                         │        │
│  │  ┌───────────────────┐  │  │  ┌───────────────────┐  │        │
│  │  │  K8s Node Pool    │  │  │  │  K8s Node Pool    │  │        │
│  │  │  ┌─────┐ ┌─────┐ │  │  │  │  ┌─────┐ ┌─────┐ │  │        │
│  │  │  │Svc A│ │Svc B│ │  │  │  │  │Svc A│ │Svc B│ │  │        │
│  │  │  └─────┘ └─────┘ │  │  │  │  └─────┘ └─────┘ │  │        │
│  │  └───────────────────┘  │  │  └───────────────────┘  │        │
│  │                         │  │                         │        │
│  │  ┌───────────────────┐  │  │  ┌───────────────────┐  │        │
│  │  │  Database (Primary)│  │  │  │  Database (Replica)│  │        │
│  │  └───────────────────┘  │  │  └───────────────────┘  │        │
│  └─────────────────────────┘  └─────────────────────────┘        │
│                                                                   │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐            │
│  │  CDN / WAF    │  │  Load        │  │  Object      │            │
│  │              │  │  Balancer    │  │  Storage     │            │
│  └──────────────┘  └──────────────┘  └──────────────┘            │
└───────────────────────────────────────────────────────────────────┘

Motivation

\<Why was this deployment topology chosen? What are the key drivers (availability, cost, compliance, latency)?>

Quality and Performance Features

Feature Specification Notes
\<Availability> \<99.9% SLA> \<Multi-AZ deployment>
\<Scalability> \<Auto-scaling 2-20 pods> \<CPU/memory-based HPA>
\<Network Latency> \<< 50ms within region> \<Same-region deployment>
\<Storage> \<Encrypted at rest, AES-256> \<Managed encryption keys>
\<Backup> \<Daily automated backups> \<30-day retention>

Mapping of Building Blocks to Infrastructure

Building Block Infrastructure Element Instance Count Resources
\<Service A> \<K8s Deployment> \<2-10 replicas> \<512Mi RAM, 0.5 CPU>
\<Service B> \<K8s Deployment> \<2-5 replicas> \<1Gi RAM, 1 CPU>
\<Database> \<RDS PostgreSQL> \<1 primary + 1 replica> \<db.r6g.large>
\<Cache> \<ElastiCache Redis> \<3-node cluster> \<cache.r6g.large>
\<Message Broker> \<Amazon MSK> \<3 brokers> \<kafka.m5.large>
\<Static Assets> \<S3 + CloudFront> \<1 bucket + CDN> \<Standard tier>

7.2 Infrastructure Level 2

Help: Here you can include the internal structure of (some) infrastructure elements from Level 1. Copy the structure from Level 1 for each selected element.

7.2.1 \<Kubernetes Cluster Detail>

\<Provide more detailed information about the Kubernetes cluster configuration, namespace strategy, resource quotas, network policies, etc.>

Namespace Services Resource Quota Network Policy
\<production> \<Service A, Service B> \<CPU: 8, Memory: 16Gi> \<Ingress restricted>
\<monitoring> \<Prometheus, Grafana> \<CPU: 4, Memory: 8Gi> \<Internal only>
\<ingress> \<Nginx Ingress> \<CPU: 2, Memory: 4Gi> \<External facing>

7.3 Environments

Help: Document the different environments if they differ significantly in structure or if the differences are architecturally relevant.

Environment Purpose Infrastructure Data Access
\<Development> \<Local development and unit testing> \<Docker Compose / Minikube> \<Synthetic test data> \<Developers>
\<Integration> \<Integration testing> \<Shared K8s cluster (reduced)> \<Anonymized subset> \<Dev + QA teams>
\<Staging> \<Pre-production validation> \<Production-mirror (scaled down)> \<Anonymized production copy> \<QA + Ops teams>
\<Production> \<Live system> \<Full HA infrastructure> \<Real data> \<Ops team only>

Based on the arc42 architecture template (https://arc42.org).
Created by Dr. Peter Hruschka and Dr. Gernot Starke.
Licensed under CC BY-SA 4.0.