1. A distributed storage system comprising: memory hosts, each memory host comprising: non-transitory memory; and a network Interface controller in communication with the non-transitory memory for servicing remote direct memory access requests; and a curator separate and remote from the memory hosts and in communication with the memory hosts, the curator managing striping of data across the memory hosts by: dividing a file into data stripes and replicating each data stripe; and allocating storage of the data stripes and data stripe replications on the memory hosts; wherein in response to a memory access request to access the file by a client in communication with the memory hosts and the curator, the curator providing the client a file descriptor comprising: a file encoding protocol buffer describing an encoding of the file; an array of stripe protocol buffers mapping location information of the data stripes and the data stripe replications of the file on the memory hosts for remote direct memory access of the file on the memory hosts; and a key to allow access to the file on the memory hosts through the corresponding network Interface controllers.