【发布时间】:2011-02-05 13:46:15
【问题描述】:
我正在阅读 twitter (http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html) 上最近发布的 Gizzard 分片框架的文章。它提到所有的写操作必须是幂等的,以确保高可靠性。
根据wikipedia,“幂等操作是可以多次应用而不改变结果的操作。”但是,恕我直言,在 Gizzard 的情况下,幂等写操作应该是顺序无关紧要的操作。
现在,我的问题是:如何使写操作具有幂等性?
我唯一能想到的就是在每次写入时附加一个版本号。例如,在博客系统中,每个博客必须有一个 $blog_id 和 $content。在应用程序级别,我们总是像这样 write($blog_id, $content, $version) 来编写博客内容。 $version 在应用程序级别被确定为唯一的。因此,如果一个应用程序首先尝试将一个博客设置为“Hello world”,然后再将其设置为“Goodbye”,那么 write 是幂等的。我们有这样两个写操作:
write($blog_id, "Hello world", 1);
write($blog_id, "Goodbye", 2);
这两个操作应该改变数据库中的两条不同的记录。所以,无论这两个操作执行多少次,以什么顺序执行,结果都是一样的。
这只是我的理解。如果我错了,请纠正我。
【问题讨论】: