Skip to content

Repository files navigation

Strata

CI License

⚠️ 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.

What is Strata?

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.

Key features

  • 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 server runs 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.

Strata vs Ceph RGW

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.

Status & maturity

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-tests pass), 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.

Quickstart

In-memory smoke (fastest)

make run-memory
make smoke

Listens on :9999 with memory metadata + memory data. Round-trips a PUT/GET over the gateway.

Full TiKV lab (PD + TiKV + two Ceph clusters + two Strata replicas behind nginx)

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).

Breaking changes

  • X-Forwarded-Proto / X-Forwarded-For / X-Real-IP no longer blindly trusted (US-007 harden-gateway). Operators fronting Strata with a load balancer or ingress MUST set STRATA_TRUSTED_PROXIES to the proxy's source CIDR (comma-separated, IPv4 / IPv6). Default empty = forwarded headers ignored (safe for direct exposure). Affected surfaces: admin session-cookie Secure flag, S3 notification event SourceIP, audit_log.source_ip, access_log.source_ip. See [reference/env-vars]({{< ref "/reference/env-vars" >}}) → STRATA_TRUSTED_PROXIES.

Documentation

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.

Security

Report vulnerabilities via GitHub Security Advisories. See SECURITY.md for the disclosure policy, SLA, and in-scope surfaces.

License

Apache 2.0 — see LICENSE.

Footnotes

  1. ListObjects 100k-key p99 — see rgw-comparison#list-100k. 2

  2. 1 KiB PUT concurrency sweep (c=1/8/32/128) — see rgw-comparison#put-small. 2

  3. 1 KiB GET concurrency sweep (c=1/8/32/128) — see rgw-comparison#get-small. 2

  4. Multipart 5 GB per-part p99 + aggregate throughput — see rgw-comparison#multipart-5g. 2

About

Scalable S3 gateway in Go — metadata in TiKV or Cassandra, data in RADOS

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages