1

我遇到了这个问题,到目前为止,似乎唯一的解决方案是更强的一致性模型。该服务是提供最终一致性的 Amazon S3。我们将其用作 blob 存储后端。

问题是,我们将消息传递模式引入了我们的应用程序,我们喜欢它。毫无疑问,它的好处。但是,它似乎需要更强的一致性。设想:

  1. 子系统从用户那里获取数据
  2. 数据保存到 S3
  3. 消息已发送
  4. 消息被另一个子系统接收
  5. 从 S3 读取数据
  6. ...蟋蟀。这是旧数据吗?有时是的。

所以。显而易见,我们尝试在消息中发送数据,以避免从 S3 读取不一致。但这样做很糟糕,消息变得不必要地大,当接收器太忙或出现故障时,在已经有新数据可用的情况下接收消息较晚,它就会失败。

是否有解决方案,或者我们是否真的需要为一些更一致的后端(如 RDBMS 或 MongoDB)转储 S3?

4

1 回答 1

0

如果您的方案允许您的数据始终在新密钥下写入 S3(通过始终创建新对象),那么您可以依赖 Amazon 的 read-after-write 一致性。

以下是 Amazon 对这种一致性模型的描述:

美国西部(加利福尼亚北部)、欧洲(爱尔兰)、亚太地区(新加坡)和亚太地区(东京)区域的 Amazon S3 存储桶为新对象的 PUTS 提供读写一致性,并为覆盖 PUTS 和 DELETES 提供最终一致性. 美国标准区域中的 Amazon S3 存储桶提供最终一致性。

于 2011-11-03T08:18:03.530 回答