Design a Distributed Key-Value Store: Partitioning, Quorums, and Repair