Operations¶
Deployment¶
Services are packaged as OCI images and deployed with Helm. Each service exposes /livez, /readyz, and /metrics; readiness verifies critical dependencies without calling upstream stores.
image: ghcr.io/steamdeals/pricing-service:2026.11.06.2
replicaCount: 3
env:
STEAMDEALS_ENV: production
DATABASE_URL: secretRef:pricing-db-url
EVENT_TOPIC_OFFER_CHANGED: pricing.offer-changed.v1
Docker development uses Compose for PostgreSQL, Redis, Kafka-compatible broker, and local object storage. Kubernetes workloads use workload identity, resource limits, PodDisruptionBudgets, and network policies.
Configuration and migrations¶
Configuration is environment-variable based. Required variables include DATABASE_URL, REDIS_URL, KAFKA_BROKERS, OTEL_EXPORTER_OTLP_ENDPOINT, and service-specific signing keys. Validate configuration at startup and redact it in diagnostics.
Database migrations are forward-only, reviewed, and run as a separate pre-deploy job. Expand/contract schema changes: add compatible fields, deploy readers/writers, backfill, then remove only in a later release.
Logging, monitoring, and health checks¶
Emit structured JSON logs with timestamp, level, service, request_id, trace_id, and redacted error context. Monitor request rate, p95/p99 latency, error rate, consumer lag, connector freshness, active sockets, and notification success. Alert on SLO burn rate and data freshness breaches.
Backup and recovery¶
PostgreSQL supports point-in-time recovery; object storage versions export artifacts; ClickHouse uses replicated snapshots. Test restore quarterly against an isolated environment. Recovery targets are RPO 15 minutes and RTO 4 hours for public read paths.