Files
notifkit/profiling/docker-compose.distributed.yml
T
coo1estguy ceeecf3937 refactor(profiling): name service containers and update dependencies
- Upgrade zod to ^4.6.5 along with compatible dependency updates across ai, dotenv, drizzle-orm, ioredis, pino, postgres, and dev tools.

- Adjust tests/workers-ai.test.ts mock UUIDs to adhere to RFC 4122 v4 validation in Zod 4.

- Update tests/http.test.ts validation message expectations for Zod 4.

- Replace generic server container names with role-based definitions (api-server-1, api-server-2, enricher-worker, engine-worker, delivery-worker).

- Add serverNodes option in distributed profiling harness to route and health-check designated worker and API nodes.

- Add multi-run statistical metrics (mean, median, min, max, stdDev) reporting to money-scaling benchmark runner.
2026-09-26 16:49:23 +05:30

445 lines
12 KiB
YAML

services:
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: notifkit
POSTGRES_USER: notifkit
POSTGRES_PASSWORD: password
ports:
- "35432:5432"
deploy:
resources:
limits:
cpus: "${DB_CPUS:-1.0}"
memory: "${DB_MEMORY:-1G}"
redis:
image: redis:7-alpine
ports:
- "36379:6379"
deploy:
resources:
limits:
cpus: "${REDIS_CPUS:-1.5}"
memory: "${REDIS_MEMORY:-1G}"
# ── Descriptive Role-Based Services ──────────────────────────────────────────
api-server-1:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${API_SERVER_1_SERVICES:-api}
ports:
- "35678:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
api-server-2:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${API_SERVER_2_SERVICES:-api}
ports:
- "35679:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
pipeline-worker:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${PIPELINE_WORKER_SERVICES:-enricher,engine,scheduler}
ports:
- "35680:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
delivery-worker:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${DELIVERY_WORKER_SERVICES:-delivery}
ports:
- "35681:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
scheduler-worker:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SCHEDULER_WORKER_SERVICES:-scheduler}
ports:
- "35682:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
enricher-worker:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${ENRICHER_WORKER_SERVICES:-enricher}
ports:
- "35683:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
engine-worker:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${ENGINE_WORKER_SERVICES:-engine}
ports:
- "35684:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
monolith-server:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${MONOLITH_SERVER_SERVICES:-all}
ports:
- "35678:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
worker-node:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${WORKER_NODE_SERVICES:-enricher,engine,delivery,scheduler}
ports:
- "35679:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
# ── Generic Server Definitions (Backwards Compatibility) ─────────────────────
server1:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SERVER1_SERVICES:-all}
ports:
- "35678:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
server2:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SERVER2_SERVICES:-all}
ports:
- "35679:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
server3:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SERVER3_SERVICES:-all}
ports:
- "35680:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
server4:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SERVER4_SERVICES:-all}
ports:
- "35681:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
server5:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SERVER5_SERVICES:-all}
ports:
- "35682:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
server6:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SERVER6_SERVICES:-all}
ports:
- "35683:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"
server7:
build:
context: ..
dockerfile: profiling/Dockerfile
environment:
DATABASE_URL: postgres://notifkit:password@db:5432/notifkit
REDIS_URL: redis://redis:6379
ADMIN_API_KEY: perf-admin-key
LOG_LEVEL: warn
HOST: 0.0.0.0
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-100}
DB_MAX_CONNECTIONS: ${DB_MAX_CONNECTIONS:-5}
PROVIDER_LATENCY_MS: ${PROVIDER_LATENCY_MS:-0}
RATE_LIMIT_PER_HOUR: ${RATE_LIMIT_PER_HOUR:-10000000}
SERVICES: ${SERVER7_SERVICES:-all}
ports:
- "35684:3000"
depends_on:
- db
- redis
deploy:
resources:
limits:
cpus: "${SERVER_CPUS:-2.0}"
memory: "${SERVER_MEMORY:-2G}"