Microservice · Cell-Based Architecture

(Korea Concert Ticketing Platform)
Blast Radius Is a Design Choice.
① MONOLITH ② MICROSERVICE · HORIZONTAL SCALE ③ CELL-BASED
USERS Browser / Mobile
PAYMENT GATEWAY external PSP
webhook
CLOUDFLARE EDGE
DNS · CDN WAF · DDoS · Rate Limit · Bot Protection
ROUTER
Cloudflare Workerpath + session cookie / header
/concert-a
/concert-b
/concert-x
Concert ALanding PageCF Page
Concert BLanding PageCF Page
···
Concert XLanding PageCF Page
/concert-a/book
🔐 Need Login
/concert-b/book
🔐 Need Login
/concert-x/book · small → shared
🔐 Need Login
CELL : EVENT A
▶ Big Event · Multi-AZ
ALB → ECS
Floodgate
MODEQUEUE FIFO
Booking ×Nmicroservices
Cell Data
CELL : EVENT B
▶ Big Event · AZ-b
ALB → ECS
Floodgate
MODEADMIT RATE/s
Booking ×Nmicroservices
Cell Data
SHARED CELL
▶ Small Events · AZ-c
ALB → ECS
Floodgate
MODEMAX CONCURRENCY
Booking ×Nmicroservices
Cell Data
×N = ECS tasks per service, scaled by workload
/
MAIN CLUSTER
app subnet private
ALB ECS
Floodgate
MODEMAX CONCURRENCY
capacity signal → scale out
Main Web + BFF
Admin UI
Report UI
Check-in UI
Main API
Identity API
Admin API
Check-in API
📮 MQ — async 🔗 Service Connect — internal
assign cell → set session cookie
CELL CONTROL PLANE
Step Functions 🗄 cell registry — DynamoDB
provision active sales closed drain VERIFY snapshot DB stopped · 7 days destroy
tickets match money 3-way seats balanced MQ + DLQ empty CDC lag 0
any check red → halt, no delete · compute and Redis go first (ephemeral) · DB only stopped, deleted after 7 days
zoom — inside each cell
INSIDE EACH CELL — SELF-CONTAINED
ALB → ECS (FARGATE)
FLOODGATE
traffic management & scale(Automated)
Waiting Room UICF Page
Queue BFF / ProxyCF Worker
Queue APIGo + Redis Cluster
Queue Monitor UIReact
FLOODGATE MODEselected per requirement
QUEUE FIFONEW ADMIT RATE/s MAX CONCURRENCY ⛔ BLOCK
SCALE SIGNAL · edge | origin
capacity modelsessions/s · concurrency · headroom
scaling controllerthreshold rules · IDP
ECS UpdateServicedesiredCount ×N
predictivescheduledpre-warmmanual
signed admission token + lock session
BOOKING MICROSERVICES app subnet private
Booking UI
Inventory API
Booking API
Payment API
Cache API
WebSocket Hub
📮 MQ
inbound
outbound
EVENT DRIVENRETRY / DLQ
🔗 Service Connect
internal backend service
SERVICE DISCOVERY
CELL DATA (PER CELL) data subnet private
AURORA — CLUSTER (PER CELL)
RDS Proxyconnection pooling
Writerread / write
── replication ▼
READ REPLICAS
replica 1read-only
replica 2read-only
···
read replicas scale out per concert — bigger event, more replicas
QUEUE STORE
DynamoDBqueue
ElastiCache (Redis)cluster mode · queue
primaryreplica ×2 per shard
CACHING
ElastiCache (Redis)caching + distributed lock + booking session
primaryreplica Multi-AZ · automatic failover
paid.success
TICKET GENERATION
EVENT DRIVENSERVERLESS
Lambda
GenerateQR / PDF
S3 / R2
VPC endpoints (S3 · DynamoDB · ECR) · NAT Gateway · VPC Flow Logs
cells / main — emit events
NOTIFY & REPORT (EVENT-DRIVEN)
cells / main emit events
EventBridge
trigger
Lambda
Notificationemail / SMS
KOPIS Reportmandatory daily · Korean government
from CELL DATA (per cell) real-time sync sync mode · MQ fanout | DMS | Debezium
CENTRAL DATA (AWS MANAGED)
data subnet private
MAIN DB — AURORA GLOBAL DATABASE
RDS Proxyconnection pooling
PRIMARY REGION — MULTI-AZ
writerAZ-a · active
replication failover
readerAZ-b · read-only
DR
REGION — headless secondary · backup only
◀ storage-level replication
storage only · no DB instance · no read traffic
add instance → promote to writer (on disaster)
ElastiCache (Redis)session · shared cache
S3 · R2media / ticket (QR·PDF)
OpenSearch
Secrets Manager · KMSdb creds · PSP key · token signing
OBSERVABILITY
o11y subnet private
main
+ all cells
Alloy Collector
Lokilogs
Tempotraces
Prometheusmetrics
Grafanafilter by cell
alert
LINE
Slack
Email
by NU PANUWAT · DevOps / Cloud Infrastructure Engineer
100%