Abstract Today's distributed systems need to replicate data for scalability, performance and availability. However when there are write operations to the replicated data, it is impossible to immediately and synchronously update all replicas, forcing systems to chose between fast writes and data consistency. Additionally these distributed systems also suffer from network partitions which can result in the replicas on opposite sides of the partition diverging. To deal with these problems and tradeoffs, different systems provide different consistency models for these replicas - from strong models like serializability to weak models like eventual consistency - which vary in the guarantees they provide about the consistency of data read from different replicas. The choice of consistency models is ultimately based on application requirements and some distributed systems or frameworks for distributed systems would even go to the extent of providing tuning options to provide different consistency models within the same distributed system.