System Design advanced LIVE DEMO
πŸ“¦

Object Storage PUT/GET Lifecycle Visualization

Walk through an S3-like object storage system from PUT validation and multipart upload through erasure coding, metadata manifest commit, GET reads, drive failure, self-healing rebuild

System DesignObject StorageS3Multipart UploadErasure CodingDistributed Systems
Interactive Demo

Continue with the guided workspace

Use the paired workspace to connect this guide's mental model with live component state, visible signals, and the outcome each step or scenario is meant to prove.

Mental Model

An S3-compatible Object Storage system must store petabytes of data reliably on cheap commodity hardware. Unlike traditional filesystems, object storage decouples file metadata from the raw byte chunks, utilizing erasure coding and active self-healing to maintain high durability.

For interactive exploration of these behaviors, you can run the live sandbox: Object Storage System Simulator.

Components and Why They Exist

Client

The client represents applications writing (PUT) or reading (GET) large binary objects. It issues HTTP REST commands (PUT, GET, DELETE) and streams object payloads to and from the API Gateway.

API Gateway

The API gateway serves as the public-facing HTTP interface that validates incoming requests and enforces access control and throttling. Every client request passes authentication signature and bucket policy checks at this gateway before proceeding into the storage pipeline.

Multipart Coordinator

The multipart coordinator manages the upload lifecycle for large files by splitting them into smaller, parallelizable parts. Incoming large object uploads are partitioned into independent chunks here, tracked as they stream in, and assembled into a logical object once all parts arrive.

Erasure Coder

The erasure coder optimizes storage efficiency while maintaining high durability by generating parity blocks. Each incoming data payload is sliced into DD data chunks and paired with PP computed parity chunks (such as a 4+24+2 Reed-Solomon stripe) before placement.

Placement Engine

The placement engine selects storage targets that maximize fault tolerance by separating chunk locations across distinct racks and failure domains. Data and parity chunks scatter across different Storage Nodes according to these anti-affinity placement rules.

Metadata Service

The metadata service acts as the catalog mapping object keys to logical versions and physical chunk locations. It stores object manifests containing checksums, version IDs, and chunk placement coordinates, committing the manifest last to complete the PUT lifecycle atomically.

Storage Nodes (A, B, C)

Storage Nodes A, B, and C are the physical servers and disks storing raw byte chunks. Each node exposes block-level storage operations to read and write individual chunk files, while red status indicators highlight any storage node that goes offline during a drive failure.

Rebuild Monitor

The rebuild monitor reconstructs lost chunks automatically in the background to maintain durability after hardware failures. When a disk outage leaves a stripe degraded, it pulls surviving data and parity chunks from healthy peers, recalculates the lost block, and writes the repaired chunk onto an available storage node.

Disk Sweeper

The disk sweeper performs background garbage collection to reclaim physical disk space after object deletions. Once an object’s metadata has been marked with a Delete Marker, the sweeper asynchronously wipes the obsolete physical chunks from the Storage Nodes.

Edge Cases and Misconceptions

Metadata Availability vs. Data Plane Health

A common misconception is that if storage nodes are healthy, data is accessible. In object storage, the Metadata Service is the critical brain. If the metadata database suffers an outage, the system cannot resolve object keys to physical chunk paths, causing all GET/PUT requests to fail, even if storage disks are fully operational.

Replication vs. Erasure Coding Tradeoffs

Replication (e.g. 3-way mirroring) is simple and has low CPU overhead, but requires a 200%200\% storage overhead. Erasure Coding (e.g. 4+2) only requires a 50%50\% storage overhead for similar durability but consumes significant CPU resources for calculating parity and reconstructing files.

Delete Markers vs. Physical Deletion

When an object is deleted, it is not immediately wiped from disk. Instead, the Metadata Service commits a β€œDelete Marker” version. This makes the object appear deleted to users (GET returns 404). The physical data is only deleted later when background Disk Sweeper jobs run asynchronously.

Common Questions

Why is the metadata manifest committed last in a PUT operation?

Committing the manifest last ensures that an object is only visible for read operations after its physical chunks are securely persisted across storage nodes, preventing clients from reading partially uploaded data.

How does erasure coding reconstruct data from disk failures?

Under a D+P scheme (e.g. 4 data + 2 parity chunks), the original file can be perfectly reconstructed as long as any D (4) of the total D+P (6) chunks are readable.

What is a thundering herd in storage rebuilds?

When a storage node fails, thousands of objects become degraded. If the Rebuild Monitor attempts to repair all degraded chunks simultaneously, it can saturate the internal network and disk IOPS, further degrading the performance of client GET/PUT requests.

Why are large objects uploaded using Multipart Uploads?

Multipart upload breaks a large file into smaller, independent chunks. This allows chunks to be uploaded in parallel (improving speed) and allows single failed chunk uploads to be retried individually without restarting the entire file upload.