Reliable Distributed Storage

Storage is nowadays commonly provided as a service, accessed by clients over a network. A distributed storage service provides clients with the abstraction of a single reliable shared storage device, using a collection of possibly unreliable computing units. Algorithms that implement this abstraction vary according to many dimensions, including their complexity, the consistency semantics they provide, the number and types of failures they tolerate, as well as the assumptions they make on the underlying architecture. Certain tradeoffs have to be addressed and the choices are tricky.