Files
next.orly.dev/cmd/benchmark/docker-compose.yml
mleku 8dbc19ee9e Add benchmark results for multiple Nostr relay backends
Introduced comprehensive benchmarks for `next-orly-badger`, `next-orly-neo4j`, and `nostr-rs-relay` backends, covering peak throughput, burst patterns, mixed read/write, query, and concurrent query/store tests. Reports include detailed performance metrics (e.g., events/sec, latency, success rates) and are saved as text and AsciiDoc formats. Aggregate summary also generated for testing consistency across relay implementations.
2025-12-04 05:43:20 +00:00

290 lines
7.4 KiB
YAML

version: "3.8"
services:
# Next.orly.dev relay with Badger (this repository)
next-orly-badger:
build:
context: ../..
dockerfile: cmd/benchmark/Dockerfile.next-orly
container_name: benchmark-next-orly-badger
environment:
- ORLY_DATA_DIR=/data
- ORLY_LISTEN=0.0.0.0
- ORLY_PORT=8080
- ORLY_LOG_LEVEL=off
- ORLY_DB_TYPE=badger
volumes:
- ./data/next-orly-badger:/data
ports:
- "8001:8080"
networks:
- benchmark-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Next.orly.dev relay with Neo4j (this repository)
next-orly-neo4j:
build:
context: ../..
dockerfile: cmd/benchmark/Dockerfile.next-orly
container_name: benchmark-next-orly-neo4j
environment:
- ORLY_DATA_DIR=/data
- ORLY_LISTEN=0.0.0.0
- ORLY_PORT=8080
- ORLY_LOG_LEVEL=off
- ORLY_DB_TYPE=neo4j
- ORLY_NEO4J_URI=bolt://neo4j:7687
- ORLY_NEO4J_USER=neo4j
- ORLY_NEO4J_PASSWORD=benchmark123
volumes:
- ./data/next-orly-neo4j:/data
ports:
- "8008:8080"
networks:
- benchmark-net
depends_on:
neo4j:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# Neo4j database
neo4j:
image: neo4j:5.15-community
container_name: benchmark-neo4j
ports:
- "7474:7474" # HTTP
- "7687:7687" # Bolt
environment:
- NEO4J_AUTH=neo4j/benchmark123
- NEO4J_server_memory_heap_initial__size=2G
- NEO4J_server_memory_heap_max__size=4G
- NEO4J_server_memory_pagecache_size=2G
- NEO4J_dbms_security_procedures_unrestricted=apoc.*
- NEO4J_dbms_security_procedures_allowlist=apoc.*
- NEO4JLABS_PLUGINS=["apoc"]
volumes:
- ./data/neo4j:/data
- ./data/neo4j-logs:/logs
networks:
- benchmark-net
healthcheck:
test: ["CMD-SHELL", "cypher-shell -u neo4j -p benchmark123 'RETURN 1;' || exit 1"]
interval: 10s
timeout: 5s
retries: 10
start_period: 40s
# Khatru with SQLite
khatru-sqlite:
build:
context: ./external/khatru
dockerfile: ../../Dockerfile.khatru-sqlite
container_name: benchmark-khatru-sqlite
environment:
- DATABASE_TYPE=sqlite
- DATABASE_PATH=/data/khatru.db
volumes:
- ./data/khatru-sqlite:/data
ports:
- "8002:3334"
networks:
- benchmark-net
healthcheck:
test: ["CMD-SHELL", "wget -q -O- http://localhost:3334 || exit 0"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Khatru with Badger
khatru-badger:
build:
context: ./external/khatru
dockerfile: ../../Dockerfile.khatru-badger
container_name: benchmark-khatru-badger
environment:
- DATABASE_TYPE=badger
- DATABASE_PATH=/data/badger
volumes:
- ./data/khatru-badger:/data
ports:
- "8003:3334"
networks:
- benchmark-net
healthcheck:
test: ["CMD-SHELL", "wget -q -O- http://localhost:3334 || exit 0"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Relayer basic example
relayer-basic:
build:
context: ./external/relayer
dockerfile: ../../Dockerfile.relayer-basic
container_name: benchmark-relayer-basic
environment:
- POSTGRESQL_DATABASE=postgres://relayer:relayerpass@postgres:5432/relayerdb?sslmode=disable
volumes:
- ./data/relayer-basic:/data
ports:
- "8004:7447"
networks:
- benchmark-net
depends_on:
postgres:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "wget -q -O- http://localhost:7447 || exit 0"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Strfry
strfry:
image: ghcr.io/hoytech/strfry:latest
container_name: benchmark-strfry
environment:
- STRFRY_DB_PATH=/data/strfry-db
- STRFRY_RELAY_PORT=8080
volumes:
- ./data/strfry:/data
- ./configs/strfry.conf:/etc/strfry.conf
ports:
- "8005:8080"
networks:
- benchmark-net
entrypoint: /bin/sh
command: -c "mkdir -p /data/strfry-db && exec /app/strfry relay"
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1:8080"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Nostr-rs-relay
nostr-rs-relay:
build:
context: ./external/nostr-rs-relay
dockerfile: ../../Dockerfile.nostr-rs-relay
container_name: benchmark-nostr-rs-relay
environment:
- RUST_LOG=info
volumes:
- ./data/nostr-rs-relay:/data
- ./configs/config.toml:/app/config.toml
ports:
- "8006:8080"
networks:
- benchmark-net
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Rely-SQLite relay
rely-sqlite:
build:
context: .
dockerfile: Dockerfile.rely-sqlite
container_name: benchmark-rely-sqlite
environment:
- DATABASE_PATH=/data/relay.db
- RELAY_LISTEN=0.0.0.0:3334
volumes:
- ./data/rely-sqlite:/data
ports:
- "8009:3334"
networks:
- benchmark-net
healthcheck:
test: ["CMD-SHELL", "curl -s --max-time 2 http://localhost:3334 2>&1 | head -1 | grep -q ."]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
# Benchmark runner
benchmark-runner:
build:
context: ../..
dockerfile: cmd/benchmark/Dockerfile.benchmark
container_name: benchmark-runner
depends_on:
next-orly-badger:
condition: service_healthy
next-orly-neo4j:
condition: service_healthy
khatru-sqlite:
condition: service_healthy
khatru-badger:
condition: service_healthy
relayer-basic:
condition: service_healthy
strfry:
condition: service_healthy
nostr-rs-relay:
condition: service_healthy
rely-sqlite:
condition: service_healthy
environment:
- BENCHMARK_TARGETS=rely-sqlite:3334,next-orly-badger:8080,next-orly-neo4j:8080,khatru-sqlite:3334,khatru-badger:3334,relayer-basic:7447,strfry:8080,nostr-rs-relay:8080
- BENCHMARK_EVENTS=50000
- BENCHMARK_WORKERS=24
- BENCHMARK_DURATION=60s
volumes:
- ./reports:/reports
networks:
- benchmark-net
command: >
sh -c "
echo 'Waiting for all relays to be ready...' &&
sleep 30 &&
echo 'Starting benchmark tests...' &&
/app/benchmark-runner --output-dir=/reports &&
echo 'Benchmark complete - triggering shutdown...' &&
exit 0
"
# PostgreSQL for relayer-basic
postgres:
image: postgres:16-alpine
container_name: benchmark-postgres
environment:
- POSTGRES_DB=relayerdb
- POSTGRES_USER=relayer
- POSTGRES_PASSWORD=relayerpass
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- benchmark-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U relayer -d relayerdb"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
networks:
benchmark-net:
driver: bridge
volumes:
benchmark-data:
driver: local