Architectural decisions, design records (ADRs), system specifications, and structural evolution behind momo’s distributed object store.
SigV4 signed payload verification for S3 PUT/POST and Server-Sent Events for async operation notifications.
aws-chunked payload encoding streams large S3 uploads in signed chunks — no full-body buffering, per-chunk SigV4 integrity.
Momo’s transport layer grew from TCP to a QUIC/TLS 1.3 fan-out — fixing handshake, ACK framing, deadlines, and TLS identity along the way.
The [storage] backend seam swaps blob storage (local, nfs, s3, raw) behind one Store interface, keeping CAS metadata local.
Weighted rendezvous hashing picks replicas deterministically and peer-equally without a central allocator — later hardened for failure domains. Teaches: content-hash-based placement, weighted rendezvous hashing, deterministic stable sort, failure domain filtering.
Chain, Splay, and Primary-Splay replication — and the metrics-driven controller that switches between them at runtime.
Identify every object by its SHA-256 content hash — server-side dedup, verify-on-read, and a path that later mounted a filesystem. Teaches: content addressing principles, single write chokepoint, Bolt/Sentinel patterns.
A scaleless-gossip ring: SWIM-style failure detection, discovered-peer dialing, and ALIVE/OFFLINE restoration — momo’s nervous system.
How momo started as a file-replication playground in Go and grew into a distributed content-addressed object store.