确保多个用户写入/读取时 S3 中的数据一致性

确保多个用户写入/读取时 S3 中的数据一致性

我需要一些建议/想法,关于如何确保我的 s3 存储桶中的数据一致性。我有 2-3 个用户正在从 s3 推送和读取资源。很容易看出,这会导致数据不一致(用户 A 正在从 S3 下载该资源,而用户 B 仍在写入该资源)。

我们正在从 s3 同步 saltstack 代码。我们为每个环境(生产环境、暂存环境)设置一个存储桶,并使用 AWS IAM 角色来控制访问。当我尝试从 s3 获取数据并且其他开发人员正在将代码推送到该存储桶时,就会出现问题,最终导致下载的资源处于不一致的状态。

如果你们能分享解决此类问题的想法、观点和经验,我将不胜感激。

谢谢

答案1

这就是为什么您需要一个生产环境和一个暂存环境。暂存环境应该是“对所有人免费”的,而生产环境则是在您的代码完美无缺时使用的。

如果您想要允许更精细的粒度,您应该考虑对 SaltStack 代码/yaml 进行源代码控制。(git、mercurial 等)每个用户都可以有自己的分支,然后当事情变得紧急时,您必须将所有内容合并到“暂存”分支中,然后最终部署到“生产”

您在 S3 中看到的行为是“最终一致性”的默认行为,基本上,您将获得最后更新文件的副本,并且在“其他用户”最终推动他/她的更改之前不会获得任何新内容。

AWS 网站上的文档中关于 S3 数据一致性的说明如下:

问:Amazon S3 采用什么数据一致性模型?美国西部(俄勒冈)、美国西部(加利福尼亚北部)、欧洲(爱尔兰)、亚太地区(新加坡)、亚太地区(东京)、亚太地区(悉尼)和南美洲(圣保罗)区域的 Amazon S3 存储桶为新对象的 PUTS 提供读写一致性,并为覆盖 PUTS 和 DELETES 提供最终一致性。美国标准区域的 Amazon S3 存储桶提供最终一致性。

您可以在这里阅读有关“最终一致性”的内容:

http://en.wikipedia.org/wiki/Eventual_consistency

相关内容