Consistency —ensuring that data items distributed over remote computers agree with each other— is a fundamental issue of distributed computing. No single consistency model is appropriate for all uses: strong consistency requires lots of synchronisation, which has availability and performance issues; weak consistency performs and scales better but is error-prone. Indeed, the famous “CAP” impossibility result shows there is an inherent trade-off between fault tolerance, performance, and programmability. The first part of the talk will provide some general background on the consistency trade-off.
This has led to a split between databases designed for strong consistency and those designed for performance and availability; application designers must make an early decision of which consistency model to go with. Instead, we propose to fine-tune the database to provide the highest possible performance and availability that is appropriate for a given application. Our Just-Right Consistency approach leverages a novel static analysis (called CISE), which can prove whether a given distributed application maintains a given correctness invariant. In the second part of the talk, we will explain the intuition behind CISE, and how we use it to co-design the application and its consistency model, thereby minimising synchronisation to what is strictly necessary to ensure correctness