graph TD
%% --- STYLING ---
classDef k8s fill:#326ce5,stroke:#fff,stroke-width:2px,color:#fff;
classDef db fill:#ffffff,stroke:#336791,stroke-width:2px,color:#333;
classDef redis fill:#ffffff,stroke:#d82c20,stroke-width:2px,color:#333;
classDef component fill:#e1f5fe,stroke:#333,stroke-width:1px;
classDef plain fill:#fff,stroke:#333,stroke-width:1px;
subgraph "Cluster: TaskFlow Namespace"
direction TB
%% --- AUTOSCALING ---
subgraph "Autoscaling Logic"
%% Using Kubernetes Logo for KEDA
KEDA("
KEDA Operator"):::plain
end
%% --- DATA LAYER ---
subgraph "Data Layer"
%% Redis Logo
RedisHigh("
Redis (High)"):::redis
%% Redis Logo
RedisLow("
Redis (Low)"):::redis
%% Postgres Logo
Postgres("
PostgreSQL"):::db
%% PgBouncer
PgBouncer("
PgBouncer"):::db
end
%% --- APP LAYER ---
subgraph "Application Layer"
API[("
TaskFlow API(2 Replicas)")]:::k8s
QueueManager[("
Queue Manager(1 Replica)")]:::k8s
Worker[("
Worker(1-20 Replicas)")]:::k8s
end
%% --- CONNECTIONS ---
%% User -> API
User((👤 User)) --> |"POST /tasks"| API
%% API -> Redis Low
API -.-> |"Cache / Rate Limit"| RedisLow
%% API -> Redis
API --> |"PUSH task"| PgBouncer
%% Queue Manager
QueueManager -->|Tasks QUEUED| PgBouncer
QueueManager -->|PUSH Task| RedisHigh
%% KEDA -> Redis (Monitoring)
KEDA -.-> |"Checks Queue Depth"| RedisHigh
%% KEDA -> Worker (Scaling)
KEDA -.-> |"Scales Deployment"| Worker
%% Worker -> Redis (Fetching)
Worker --> |"POP Task"| RedisHigh
%% Worker/API -> PgBouncer
Worker --> |"Connection Pool"| PgBouncer
API --> |"GET /status"| PgBouncer
%% PgBouncer -> Postgres
PgBouncer --> |"Real Connection"| Postgres
end
%% Link Styling
linkStyle 0,2,3,4 stroke-width:2px,fill:none,stroke:green
linkStyle 1,5,6 stroke-width:2px,fill:none,stroke:orange,stroke-dasharray:5 5
linkStyle 7 stroke-width:2px,fill:none,stroke:#2563eb