考虑一个只有最终一致性的无版本桶。
假设我刚刚上传了一个对象,现在我将其删除。删除请求将转到对象尚未传播到的服务器。
现在,在我看来,只有三件事情可以发生:
服务器会记住删除操作,因此一旦到达此服务器就会删除该对象。
服务器回复“404 Not found”,对象继续存在。
服务器回复“201 No data”,忘记删除操作,对象继续存在。
答案1 意味着每个S3服务器必须记住它收到的每个删除请求,以防它后来从另一个服务器收到相应的对象。重置此内存的唯一方法是整个S3集群的某种全局原子同步(因此服务器可以确定没有针对它想要忘记的删除的未完成更新),我认为这是不太可能的。但是,如果对象仍然显示出来,那么记忆删除的定期超时会破坏最终的一致性保证。
另一方面,答案2 暗示如果
..所以我最终得到了一个过时的对象版本,这打破了最终的一致性保证。
答案3 也意味着最终的一致性保证被破坏,因为在发出删除请求后该对象仍然存在。
所以基本上所有三个答案似乎都不太可能。我错过了什么吗?