⚠️ Alpha software. Pre-launch; no production deploys. APIs and schemas may change without notice.
S3-compatible object gateway — drop-in replacement for Ceph RGW. Metadata in Cassandra or TiKV; data in RADOS, S3, or memory.
Strata speaks the S3 HTTP API and serves objects out of one or more storage backends. Compared with Ceph RGW, it moves the bucket index off RADOS omap so listing and resharding stop being the operator's worst day. Buckets can pin their data to specific clusters; a drain workflow lets you decommission a cluster without downtime. One static binary runs the gateway and every background worker; an embedded web console handles day-to-day operator tasks.
- S3 surface: buckets, objects, multipart, versioning, ACLs, lifecycle, SSE-S3/KMS, replication, Object Lock, tagging.
- Two first-class metadata backends: Cassandra (and ScyllaDB drop-in) or TiKV. Memory backend ships for tests + smoke.
- Multi-cluster RADOS routing with per-bucket placement policies and weighted default routing.
- Online drain + rebalance — move a cluster's data off without taking the bucket offline.
- One static binary:
strata serverruns the gateway plus opt-in workers (GC, lifecycle, replication, notifications…). - Embedded operator console at
/console/— buckets, drain progress, metrics, audit log. - OpenTelemetry tracing, Prometheus metrics, Grafana dashboards out of the box.
| Capability | Strata | Ceph RGW |
|---|---|---|
| Bucket index | 208k ops/s on a 100k-key bucket; RGW saturates the OSD on the seed phase1 | RADOS omap, dynamic resharding stalls1 |
| Concurrent 1 KiB PUT (p99) | ~211 ms @ c=8 — sharded bucket_stats fan-out absorbs writes2 |
11–22 s @ c=8 — omap-index serialises every PUT2 |
| Single-object PUT/GET (p99) | ~12 ms @ c=1 (user-space SigV4)3 | ~2 ms @ c=1 (in-process auth)3 |
| Multipart 5 GB (throughput) | 4 MiB chunk write, manifest LWT on Complete4 | 4 MiB striping, omap-index bookkeeping4 |
| Online resharding | Yes — strata admin reshard, no read pause |
Re-shard locks the bucket |
| Multi-cluster routing | Per-bucket policies + weighted default routing | Multisite zonegroups only |
| Cluster drain | First-class workflow with live progress + ETA | Manual rados cppool dance |
| Admin surface | REST API + embedded web console | radosgw-admin CLI |
| Deployment shape | One Docker image, one binary | RGW + osd + mon + mgr stack |
| Observability | OTel traces, Prometheus, Grafana, request-id correlation | Native metrics, partial tracing |
| License | Apache 2.0 | LGPL 2.1 |
Bench numbers from make bench-rgw-comparison on lima/macOS M3 Pro; see Limitations.
Strata is in alpha — pre-launch, no production deploys yet. Shipped features below; open work tracked in ROADMAP.md.
- Shipped: S3 surface (92.7% of
ceph/s3-testspass), Cassandra + TiKV backends, multi-cluster RADOS, drain & rebalance, lifecycle, replication, notifications, SSE-S3/KMS, Object Lock, operator console, OTel tracing. - In flight: benchmark harness vs upstream RGW, ScyllaDB performance numbers, documentation polish.
- Parked: alternative metadata backends (FoundationDB, Postgres). Cassandra + TiKV cover the design space.
make run-memory
make smokeListens on :9999 with memory metadata + memory data. Round-trips a PUT/GET over the gateway.
make up-all
make wait-tikv
make wait-ceph
make wait-strata-lab
make smoke
open http://localhost:9999/console/Bare docker compose up -d is the canonical 2-replica TiKV lab. Cassandra-backed regression lab layers on with
make up-cassandra (adds the Cassandra-backed Strata replica at :9998 behind the same compose stack).
X-Forwarded-Proto/X-Forwarded-For/X-Real-IPno longer blindly trusted (US-007 harden-gateway). Operators fronting Strata with a load balancer or ingress MUST setSTRATA_TRUSTED_PROXIESto the proxy's source CIDR (comma-separated, IPv4 / IPv6). Default empty = forwarded headers ignored (safe for direct exposure). Affected surfaces: admin session-cookieSecureflag, S3 notification eventSourceIP,audit_log.source_ip,access_log.source_ip. See [reference/env-vars]({{< ref "/reference/env-vars" >}}) →STRATA_TRUSTED_PROXIES.
Full guides — Get Started, Concepts, Deploy, Operate, Best Practices, Architecture deep dive, Reference, S3 Compatibility — live at danchupin.github.io/strata.
For source-tree readers: make docs-serve runs the Hugo site locally on :1313.
Report vulnerabilities via GitHub Security Advisories. See SECURITY.md for the disclosure policy, SLA, and in-scope surfaces.
Apache 2.0 — see LICENSE.
Footnotes
-
ListObjects 100k-key p99 — see rgw-comparison#list-100k. ↩ ↩2
-
1 KiB PUT concurrency sweep (c=1/8/32/128) — see rgw-comparison#put-small. ↩ ↩2
-
1 KiB GET concurrency sweep (c=1/8/32/128) — see rgw-comparison#get-small. ↩ ↩2
-
Multipart 5 GB per-part p99 + aggregate throughput — see rgw-comparison#multipart-5g. ↩ ↩2