作者 | Roberto Vitillo 译者 | 冬雨 策划 | 陈思 数据存储提供的一致性保证往往有悖于你的直觉,分布式存储尤是如此。有许多一致性模型对各种一致性保证给出了定义,本文将借助这些模型探讨这些一致性保证的区别是什么,你需要结合自己的需要做出怎样的权衡。
本文最初发布于 Roberto Vitillo 个人博客,InfoQ 中文站翻译并分享。
设象一下,如果给一个变量赋了值,然后立即读取,却发现读不到它,会不会很是让人抓狂呀!
x = 42
assert(x == 42) # 抛出异常
然而,使用具有弱一致性保证的分布式数据存储时还真有可能发生这样的情况。“但是等等,难道不应该由数据库为我处理一致性问题吗?”你可能会提出这样的问题。答案是,能够尽早读取到更新的值取决于数据库提供的保证。
为了提供高可用性和性能,一些数据库所提供的一致性保证与你的直觉并不相符。还有一些软件(比如 Azure 的 Cosmos DB 和 Cassandra)则将选择权交给你,由你自己选择是想要更好的性能还是更强的保证。因此,你应该知道需要做哪些权衡。
剖析数据库请求让我们看看,当你向数据库发出一个请求时会发生什么