Networking
Project-private only
No ingress, no hostname, no TLS termination. Workers receive no inbound traffic from outside the cluster and have no attack surface on the public internet.
Run queue consumers, application-managed schedulers, and any continuous workload that should not be reachable from the public internet. Same image, environment, and secret model as HTTP containers — just no hostname.
Workers run without ingress, TLS certificates, or DNS records. They communicate with the rest of your stack over project-private networking and can reach Memcached, secrets, and the public internet just like any other container — they just cannot be reached from outside.
Image, registry, environment variables, secrets, resources, and active regions all work identically to HTTP containers. You can move logic between an HTTP container and a worker without rewriting deployment configuration.
Set a minimum and maximum number of replicas. Each region scales independently based on CPU and memory utilisation, so a queue spike in one region does not affect capacity elsewhere.
Workers don't require an HTTP server, but if yours exposes a health endpoint you can enable in-cluster probes. Bahriya will restart a worker that becomes unresponsive without ever opening that port to the public internet.
Platform features
Every capability you need to run background work reliably across regions, with no extra moving parts.
Networking
No ingress, no hostname, no TLS termination. Workers receive no inbound traffic from outside the cluster and have no attack surface on the public internet.
Scaling
Horizontal Pod Autoscaler runs in each region independently. Configure CPU and memory utilisation targets with min/max replica bounds — capacity follows demand without manual intervention.
Command control
Point a worker at a specific entrypoint or argument list without rebuilding the image. Use the same image as your HTTP container with a different command to run a queue consumer or scheduled task runner.
Configuration
Plain environment variables for non-sensitive config, encrypted project secrets for credentials and connection strings. Same secret store you use for HTTP containers and cron jobs.
Observability
Stream stdout/stderr logs in the console or CLI, view deployment events, and chart CPU and memory utilisation per region. The same observability surface as HTTP containers.
Observability
Workers can expose a Prometheus-compatible metrics endpoint even without serving public traffic. Configure a port and path, and Bahriya scrapes it internally from every replica — giving you the same application-level visibility as HTTP containers.
Billing
Pay for the CPU and memory your workers actually request, per minute, per region. Every runtime period is rounded up to the next whole minute with a 60-second minimum. No charge for ingress capacity you don't use — workers don't consume it.
Use cases
The workloads that don't fit an HTTP container — but still need to run continuously.
Pull messages from RabbitMQ, AWS SQS, or any external queue and process them. Scale the number of workers based on queue depth via CPU utilisation, or run a fixed pool for predictable throughput.
If your application has its own scheduler (Celery beat, Laravel scheduler, custom cron loop), run it as a worker. Single replica, no autoscaling, kept alive across deploys.
Listen to webhooks via long-poll, subscribe to event streams (Kafka, NATS), or maintain persistent connections to third-party APIs. Workers stay running between events without needing an HTTP entrypoint.
Image resizing, document conversion, ML inference, ETL pipelines — anything you trigger from your HTTP layer and want to handle out-of-band. Pair workers with a queue to decouple request latency from processing time.
Continuous, public-facing, ingress + TLS + DNS. Use when external clients need to reach your code.
Continuous, no public exposure. Use for queue consumers, schedulers, and long-running background processes.
Scheduled, ephemeral. Use for nightly batches, periodic clean-ups, and anything that runs to completion at a fixed cadence.
All three types share image, env vars, secrets, resources, regions, and billing. Pick the right shape per workload — Bahriya manages the rest.
Coming Soon
Planned for later in 2026/2027, timeline subject to change.
Persistent block storage that attaches to your containers. Retain data across restarts and deployments without external storage services.
Redis-compatible in-memory data store with persistent snapshots and restore. Session caching, queues, pub/sub, and real-time data — without Redis licensing concerns.
Managed relational database with automated backups, point-in-time recovery, and regional deployment. A production-ready RDBMS for structured data and transactional workloads.
Managed PostgreSQL with automated backups, point-in-time recovery, and regional deployment. Advanced SQL features, JSONB support, and extensions for modern application workloads.
A globally distributed, multi-region document database with built-in replication. Conflict-free sync across regions for offline-first applications and geo-distributed NoSQL workloads.
S3-compatible object storage for files, media, backups, and static assets. Accessible from your containers or directly via standard S3 APIs and client libraries.
Global content delivery network for static assets, media, and API acceleration. Edge caching across multiple PoPs with automatic origin pull from your containers or object storage.
Managed RabbitMQ for asynchronous messaging between containers. Multi-region clusters, project-private networking, and per-node billing — same operational model as Memcached.
Deploy a worker container in minutes — same image, same configuration, no ingress.