My first instinct was chunked uploads with retry logic, which is the obvious answer, but I kept second-guessing whether to go deeper on the storage layer or focus on the client-side resumability.
Start by clarifying requirements like file size, concurrency, and consistency needs, then propose a chunked, resumable upload architecture with redundant storage and idempotent operations. Emphasize trade-offs between consistency, availability, and cost, and explain how you'd handle failures at each stage.
Pro tip: Mention that you'd use idempotent upload IDs and checksums to make retries safe, and that you'd design for graceful degradation—e.g., falling back to smaller chunks or slower paths under load—to show you think beyond the happy path.
Ask about expected file sizes, upload frequency, consistency requirements, and budget. This scopes the design and shows you avoid over-engineering.
Propose chunked, resumable uploads with unique upload IDs, checksums per chunk, and idempotent commit. Explain how clients can resume after failures.
Use redundant storage (e.g., erasure coding or replication), distributed metadata, and asynchronous processing. Describe how to detect and recover from node failures.
Discuss how to handle concurrent uploads to the same file, ensure atomic commits, and manage metadata consistency across replicas.
Compare consistency vs. availability, cost vs. durability, and mention monitoring, alerting, and cleanup of orphaned chunks.
AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.