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