# sandesh-543/cdn_simulation architecture

> Architecture diagram of the GitHub repository sandesh-543/cdn_simulation, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sandesh-543/cdn_simulation
- Repository: https://github.com/sandesh-543/cdn_simulation

## Overview

#### Purpose and Entry Points
This is a Java CDN simulation/service that exposes HTTP endpoints for cache/data access, node health, and CDN routing. The application starts from `src/main/java/cdn_server/CdnSimulationApplication.java`; request-facing entry points are in `src/main/java/controller/CdnController.java`, `src/main/java/controller/DataController.java`, and `src/main/java/controller/HealthController.java`.

#### HTTP/API Layer
Controllers define the external control boundary:
- `CdnController` likely accepts CDN content requests and delegates node selection and cache access.
- `DataController` provides data/object-oriented operations used by the simulation.
- `HealthController` exposes node or service liveness for clients, proxies, or orchestration.
Paths: `src/main/java/controller/CdnController.java`, `src/main/java/controller/DataController.java`, `src/main/java/controller/HealthController.java`.

#### Request Routing and Node Selection
`src/main/java/loadbalancer/LoadBalancer.java` is the routing decision point between incoming CDN requests and available simulated edge nodes. `src/main/java/node/CdnNode.java` represents an individual node and its state/capacity/cache-facing behavior. The key control flow is controller → load balancer → selected CDN node → cache/data result.

#### Caching and Object Model
Cached content is represented by `src/main/java/model/CachedObject.java`. `src/main/java/service/CacheService.java` is the application-level cache boundary: it should determine cache lookup, insertion, expiry/validity behavior, and cache-miss handling before data is returned to the caller. This isolates HTTP routing from storage semantics.

#### Redis Persistence/Shared Cache Boundary
Redis is the material external state service. `src/main/java/service/RedisService.java` encapsulates Redis operations, while `src/main/java/config/RedisConfig.java` owns client/template connection configuration. Redis server configuration is supplied at `redis/redis.conf`. The expected data path is CacheService → RedisService → Redis, allowing multiple CDN node instances to share cache state.

#### Deployment and Edge Infrastructure
The service is containerized by `docker/Dockerfile` and composed with supporting services through `docker/docker-compose.yml`. Nginx is configured in `nginx/nginx.conf` and is the likely reverse-proxy/load-distribution boundary in front of one or more application instances. `scripts/start_cdn_nodes.sh` operationalizes starting multiple CDN nodes, while `scripts/test_load_balancing.sh` exercises that topology.

#### Runtime Configuration and Observability
Application runtime settings are centralized in `src/main/resources/application.properties`; logging behavior is defined by `src/main/resources/logback.xml`. The primary runtime is a Maven-built Java application (`pom.xml`) backed by Redis and optionally fronted by Nginx/Docker Compose. Health endpoints provide the main operational signal for node availability and routing decisions.

Main entry points: [`src/main/java/cdn_server/CdnSimulationApplication.java`](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/cdn_server/CdnSimulationApplication.java) (CDN application), [`src/main/java/service/CacheService.java`](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/service/CacheService.java) (Cache service), [`docker/docker-compose.yml`](https://github.com/sandesh-543/cdn_simulation/blob/main/docker/docker-compose.yml) (Docker Compose), [`src/main/java/controller/CdnController.java`](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/controller/CdnController.java) (CDN controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_edge["Edge &amp; Deployment"]
  node_nginx{{"Nginx reverse proxy<br/>[nginx.conf]"}}
  node_compose["Docker Compose<br/>deployment<br/>[docker-compose.yml]"]
  node_dockerfile["Application image<br/>container build"]
  node_node_start_script["Node startup script<br/>operations script<br/>[start_cdn_nodes.sh]"]
end

subgraph group_app["Java Application"]
  node_application{{"CDN application<br/>Spring Boot entry point"}}
  node_cdn_controller["CDN controller<br/>HTTP controller<br/>[CdnController.java]"]
  node_data_controller["Data controller<br/>HTTP controller"]
  node_health_controller["Health controller<br/>HTTP controller"]
  node_load_balancer["Load balancer<br/>routing service<br/>[LoadBalancer.java]"]
  node_cdn_node["CDN node<br/>edge node model<br/>[CdnNode.java]"]
  node_runtime_config["Runtime settings<br/>application config"]
end

subgraph group_cache["Shared Cache"]
  node_cache_service["Cache service<br/>cache boundary<br/>[CacheService.java]"]
  node_cached_object["Cached object<br/>cache model<br/>[CachedObject.java]"]
  node_redis_service["Redis service<br/>Redis adapter<br/>[RedisService.java]"]
  node_redis_config["Redis client config<br/>connection config<br/>[RedisConfig.java]"]
  node_redis[("Redis<br/>external cache store<br/>[redis.conf]")]
end

node_compose -->|"runs"| node_nginx
node_compose -->|"runs"| node_application
node_compose -->|"runs"| node_redis
node_dockerfile -->|"packages"| node_application
node_node_start_script -->|"starts instances"| node_application
node_nginx -->|"proxies requests"| node_cdn_controller
node_application -->|"serves"| node_cdn_controller
node_application -->|"serves"| node_data_controller
node_application -->|"serves"| node_health_controller
node_cdn_controller -->|"routes through"| node_load_balancer
node_load_balancer -->|"selects"| node_cdn_node
node_cdn_node -->|"accesses cache"| node_cache_service
node_data_controller -->|"accesses objects"| node_cache_service
node_health_controller -->|"checks"| node_cdn_node
node_cache_service -->|"reads/writes"| node_cached_object
node_cache_service -->|"on lookup or miss"| node_redis_service
node_redis_service -->|"stores cached data"| node_redis
node_redis_config -.->|"configures client"| node_redis_service
node_runtime_config -.->|"configures"| node_application

click node_nginx "https://github.com/sandesh-543/cdn_simulation/blob/main/nginx/nginx.conf"
click node_compose "https://github.com/sandesh-543/cdn_simulation/blob/main/docker/docker-compose.yml"
click node_dockerfile "https://github.com/sandesh-543/cdn_simulation/blob/main/docker/Dockerfile"
click node_node_start_script "https://github.com/sandesh-543/cdn_simulation/blob/main/scripts/start_cdn_nodes.sh"
click node_application "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/cdn_server/CdnSimulationApplication.java"
click node_cdn_controller "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/controller/CdnController.java"
click node_data_controller "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/controller/DataController.java"
click node_health_controller "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/controller/HealthController.java"
click node_load_balancer "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/loadbalancer/LoadBalancer.java"
click node_cdn_node "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/node/CdnNode.java"
click node_cache_service "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/service/CacheService.java"
click node_cached_object "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/model/CachedObject.java"
click node_redis_service "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/service/RedisService.java"
click node_redis_config "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/config/RedisConfig.java"
click node_redis "https://github.com/sandesh-543/cdn_simulation/blob/main/redis/redis.conf"
click node_runtime_config "https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/resources/application.properties"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_nginx,node_compose,node_dockerfile,node_node_start_script toneBlue
class node_application,node_cdn_controller,node_data_controller,node_health_controller,node_load_balancer,node_cdn_node,node_runtime_config toneAmber
class node_cache_service,node_cached_object,node_redis_service,node_redis_config,node_redis toneMint
```

## Components

### Edge & Deployment

- [Nginx reverse proxy](https://github.com/sandesh-543/cdn_simulation/blob/main/nginx/nginx.conf): proxy · Distributes external traffic to application instances. · `nginx/nginx.conf`
- [Docker Compose](https://github.com/sandesh-543/cdn_simulation/blob/main/docker/docker-compose.yml): deployment · `docker/docker-compose.yml`
- [Application image](https://github.com/sandesh-543/cdn_simulation/blob/main/docker/Dockerfile): container build · `docker/Dockerfile`
- [Node startup script](https://github.com/sandesh-543/cdn_simulation/blob/main/scripts/start_cdn_nodes.sh): operations script · Starts multiple simulated CDN nodes. · `scripts/start_cdn_nodes.sh`

### Java Application

- [CDN application](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/cdn_server/CdnSimulationApplication.java): Spring Boot entry point · `src/main/java/cdn_server/CdnSimulationApplication.java`
- [CDN controller](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/controller/CdnController.java): HTTP controller · `src/main/java/controller/CdnController.java`
- [Data controller](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/controller/DataController.java): HTTP controller · `src/main/java/controller/DataController.java`
- [Health controller](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/controller/HealthController.java): HTTP controller · Exposes node or service liveness. · `src/main/java/controller/HealthController.java`
- [Load balancer](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/loadbalancer/LoadBalancer.java): routing service · Selects an available CDN node for requests. · `src/main/java/loadbalancer/LoadBalancer.java`
- [CDN node](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/node/CdnNode.java): edge node model · Represents node state, capacity, and cache-facing behavior. · `src/main/java/node/CdnNode.java`
- [Runtime settings](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/resources/application.properties): application config · `src/main/resources/application.properties`

### Shared Cache

- [Cache service](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/service/CacheService.java): cache boundary · Handles lookup, insertion, validity, and misses. · `src/main/java/service/CacheService.java`
- [Cached object](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/model/CachedObject.java): cache model · `src/main/java/model/CachedObject.java`
- [Redis service](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/service/RedisService.java): Redis adapter · Encapsulates shared-cache operations. · `src/main/java/service/RedisService.java`
- [Redis client config](https://github.com/sandesh-543/cdn_simulation/blob/main/src/main/java/config/RedisConfig.java): connection config · `src/main/java/config/RedisConfig.java`
- [Redis](https://github.com/sandesh-543/cdn_simulation/blob/main/redis/redis.conf): external cache store · Shared cache state across CDN node instances. · `redis/redis.conf`

## Connections

- Docker Compose → Nginx reverse proxy: runs
- Docker Compose → CDN application: runs
- Docker Compose → Redis: runs
- Application image → CDN application: packages
- Node startup script → CDN application: starts instances
- Nginx reverse proxy → CDN controller: proxies requests
- CDN application → CDN controller: serves
- CDN application → Data controller: serves
- CDN application → Health controller: serves
- CDN controller → Load balancer: routes through
- Load balancer → CDN node: selects
- CDN node → Cache service: accesses cache
- Data controller → Cache service: accesses objects
- Health controller → CDN node: checks
- Cache service → Cached object: reads/writes
- Cache service → Redis service: on lookup or miss
- Redis service → Redis: stores cached data
- Redis client config → Redis service: configures client
- Runtime settings → CDN application: configures
