Shipped this project!
I built Warehouse, a distributed object storage system from scratch!
It has three main components:
- The master server, handling client requests and managing volumes/volume servers
- The volume server(s), which individual volumes, letting clients upload/download directly to them for increased performance.
- The web UI, which provides full access to the API from the browser
There is also a Go SDK, although the documentation is limited to bucket and object management
My motivations to build it were that I was unhappy with the current feature set of S3. Unfortunately, Warehouse doesn’t currently have more features than S3, but that’s because I underestimated how long it would take to build.
I built it to be horizontally scalable, by making it possible to extend the storage pool with multiple “volume servers”.
Its also optimised for small files, using large “volume” files which contain many small files, which reduces disk operations and actually safes storage by reducing the amount of metadata needed.
It has support for very large files, using a chunking system, where files are split into 80 MiB chunks, and stored across multiple volumes for faster uploads/downloads. The chunking and reassembly of files is managed on the client side, to reduce load on the server.
My favourite features are:
- The volume file format
- The volume servers
- The chunking mechanism
I included implementation details of these in the Docs, which include diagrams.


