Architecture Overview
The Todos application demonstrates modern cloud-native architecture patterns with complete Infrastructure as Code deployment.
ποΈ System Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AWS Cloud Environment β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Private VPC β β
β β (No Public Access) β β
β β β β
β β βββββββββββββββββββ βββββββββββββββββββ β β
β β β Private Subnet β β Private Subnet β β β
β β β (AZ-1) β β (AZ-2) β β β
β β β β β β β β
β β β βββββββββββββ β β βββββββββββββ β β β
β β β βECS Fargateβ β β βECS Fargateβ β β β
β β β β β β β β (Standby) β β β β
β β β β βββββββββ β β β β β β β β
β β β β βNative β β β β β β β β β
β β β β βImage β β β β β β β β β
β β β β β β β β β β β β β β
β β β β βTodos β β β β β β β β β
β β β β βAPI β β β β β β β β β
β β β β βββββββββ β β β β β β β β
β β β βββββββββββββ β β βββββββββββββ β β β
β β βββββββββββββββββββ βββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Security Groups β β β
β β β (Internal Traffic Only) β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Amazon Keyspaces β β
β β (Managed Cassandra) β β
β β β β
β β βββββββββββββββ βββββββββββββββ β β
β β β Checklist β β Todo β β β
β β β Table β β Table β β β
β β β β β β β β
β β β - id (PK) β β - checklist_id (PK) β β
β β β - name β β - id (CK) β β β
β β β - created β β - task β β β
β β β - updated β β - completed β β β
β β βββββββββββββββ βββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CloudWatch Logs β β
β β (Application Logs) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π§ Application Architecture
Hexagonal Architecture (Ports & Adapters)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Application β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Domain Layer β β
β β (Pure Business Logic) β β
β β β β
β β βββββββββββββββ βββββββββββββββββββ β β
β β β Checklist β β Todo β β β
β β β Entity β β Entity β β β
β β β β β β β β
β β β - id β β - id β β β
β β β - name β β - task β β β
β β β - todos[] β β - completed β β β
β β βββββββββββββββ βββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββ β β
β β β Value Objects β β β
β β β β β β
β β β - ChecklistId β β β
β β β - ChecklistName β β β
β β β - TodoId β β β
β β βββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Application Layer β β
β β (Use Cases) β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββ β β
β β β Services (Ports) β β β
β β β β β β
β β β - CreateChecklistService β β β
β β β - RetrieveChecklistService β β β
β β β - CreateTodoService β β β
β β β - RetrieveTodoService β β β
β β βββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Infrastructure Layer β β
β β (Adapters) β β
β β β β
β β βββββββββββββββ βββββββββββββββββββ β β
β β β Web β β Persistence β β β
β β β Adapter β β Adapter β β β
β β β β β β β β
β β β REST API β β Cassandra β β β
β β β WebFlux β β Reactive β β β
β β β HATEOAS β β Driver β β β
β β βββββββββββββββ βββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Network Architecture
Security-First Design
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AWS Region β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Todos VPC β β
β β 10.0.0.0/16 β β
β β β β
β β βββββββββββββββββββ βββββββββββββββββββ β β
β β β Private Subnet β β Private Subnet β β β
β β β 10.0.1.0/24 β β 10.0.2.0/24 β β β
β β β AZ-A β β AZ-B β β β
β β β β β β β β
β β β βββββββββββββ β β βββββββββββββ β β β
β β β β ECS β β β β ECS β β β β
β β β β Task β β β β Task β β β β
β β β β(Primary) β β β β(Standby) β β β β
β β β βββββββββββββ β β βββββββββββββ β β β
β β βββββββββββββββββββ βββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββ β β
β β β Security Group β β β
β β β β β β
β β β Inbound Rules: β β β
β β β β
Self-reference (all traffic) β β β
β β β β No external ingress β β β
β β β β β β
β β β Outbound Rules: β β β
β β β β
All traffic (for AWS APIs) β β β
β β βββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Network Features: β β
β β β No Internet Gateway β β
β β β No NAT Gateway β β β
β β β No Public Subnets β β
β β β
Private DNS Resolution β β
β β β
VPC Endpoints (AWS Services) β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ποΈ Data Architecture
Amazon Keyspaces Schema
-- Keyspace
CREATE KEYSPACE todos
WITH REPLICATION = {
'class': 'SimpleStrategy',
'replication_factor': 3
};
-- Checklist Table
CREATE TABLE todos.checklist (
id text PRIMARY KEY,
name text,
created_at timestamp,
updated_at timestamp
) WITH point_in_time_recovery = true;
-- Todo Table (Clustered by checklist)
CREATE TABLE todos.todo (
checklist_id text, -- Partition Key
id text, -- Clustering Key
task text,
completed boolean,
created_at timestamp,
updated_at timestamp,
PRIMARY KEY (checklist_id, id)
) WITH CLUSTERING ORDER BY (id ASC)
AND point_in_time_recovery = true;
Data Access Patterns
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Query Patterns β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Checklist Queries β β
β β β β
β β β’ GET /checklists β β
β β β SCAN todos.checklist β β
β β β β
β β β’ GET /checklists/{id} β β
β β β SELECT * FROM todos.checklist β β
β β WHERE id = {id} β β
β β β β
β β β’ POST /checklists β β
β β β INSERT INTO todos.checklist β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Todo Queries β β
β β β β
β β β’ GET /tasks?checklist={id} β β
β β β SELECT * FROM todos.todo β β
β β WHERE checklist_id = {id} β β
β β β β
β β β’ POST /tasks β β
β β β INSERT INTO todos.todo β β
β β β β
β β β’ PUT /tasks/{id} β β
β β β UPDATE todos.todo β β
β β WHERE checklist_id = ? AND id = ? β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Container Architecture
Native Image Container
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Docker Container β
β todos-application:native β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Base Layer β β
β β (Ubuntu Jammy Tiny) β β
β β ~20MB β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Native Executable β β
β β net.ssimmie.todos.application.TodosApp β β
β β ~119MB β β
β β β β
β β Features: β β
β β β
Ahead-of-time compilation β β
β β β
No JVM overhead β β
β β β
Fast startup (~50ms) β β
β β β
Low memory usage (~64MB) β β
β β β
Optimized for cloud deployment β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Configuration Layer β β
β β β β
β β Environment Variables: β β
β β β’ SPRING_PROFILES_ACTIVE=aws β β
β β β’ CASSANDRA_KEYSPACE=todos β β
β β β’ CASSANDRA_ENDPOINTS=keyspaces β β
β β β’ CASSANDRA_PORT=9142 β β
β β β’ CASSANDRA_SSL=true β β
β β β β
β β Health Check: β β
β β β’ curl -f /actuator/health β β
β β β’ 30s interval, 5s timeout β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Total Container Size: ~237MB β
β (vs ~520MB for JVM-based container) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Security Architecture
Defense in Depth
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Security Layers β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Network Security β β
β β β β
β β β
Private VPC (No public access) β β
β β β
Security Groups (Restrictive) β β
β β β
NACLs (Network ACL default) β β
β β β
No Internet Gateway β β
β β β
No NAT Gateway β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Application Security β β
β β β β
β β β
No hardcoded secrets β β
β β β
Environment-based config β β
β β β
Non-root container user β β
β β β
Health check endpoints only β β
β β β
Minimal attack surface β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Data Security β β
β β β β
β β β
Encryption at rest (Keyspaces) β β
β β β
Encryption in transit (TLS) β β
β β β
AWS IAM authentication β β
β β β
Point-in-time recovery β β
β β β
Automatic backups β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β IAM Security β β
β β β β
β β β
Least privilege principle β β
β β β
Task-specific roles β β
β β β
No long-term credentials β β
β β β
AWS service authentication β β
β β β
Audit trail (CloudTrail) β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Performance Architecture
Reactive Non-Blocking Design
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Request Flow β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Load Balancer β β
β β (ECS Service) β β
β βββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Netty Server β β
β β (Spring WebFlux) β β
β β β β
β β Event Loop Threads: 2-4 β β
β β Non-blocking I/O β β
β β Reactive Streams β β
β βββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β WebFlux Router β β
β β β β
β β β’ Functional routing β β
β β β’ Request validation β β
β β β’ Content negotiation β β
β β β’ HATEOAS links β β
β βββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Application Services β β
β β β β
β β β’ Reactive composition β β
β β β’ Error handling β β
β β β’ Business logic β β
β βββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Cassandra Driver β β
β β β β
β β β’ Async/reactive driver β β
β β β’ Connection pooling β β
β β β’ Load balancing β β
β β β’ Retry logic β β
β βββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Amazon Keyspaces β β
β β β β
β β β’ Serverless scaling β β
β β β’ Multi-AZ replication β β
β β β’ Consistent performance β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Performance Characteristics
Metric | Native Image | JVM |
---|---|---|
Startup Time | ~50ms | 2-3s |
Memory Usage | ~64MB | 256MB+ |
CPU Usage | Lower at startup | Higher initially |
Container Size | 237MB | 520MB+ |
First Request | <10ms | 100ms+ |
Steady State | <5ms | <5ms |
π Deployment Architecture
Infrastructure as Code Flow
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Developer Workflow β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Local Development β β
β β β β
β β 1. Code changes β β
β β 2. ./mvnw test β β
β β 3. ./mvnw clean install β β
β β 4. Native image build β β
β βββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β Infrastructure Deployment β β
β β β β
β β 1. cd infrastructure β β
β β 2. cdk diff β β
β β 3. cdk deploy --all β β
β β 4. Verify deployment β β
β βββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β AWS Services β β
β β β β
β β CloudFormation β Creates resources β β
β β ECR β Pulls container image β β
β β ECS β Deploys application β β
β β Keyspaces β Database ready β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Next Steps
- AWS Deployment Guide - Deploy the infrastructure
- API Reference - Explore the REST API
- Testing Guide - Run tests and benchmarks