1

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

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

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

所以。我们试图明显地发送消息中的数据,以避免S3读取不一致。但是这是非常糟糕的事情,消息会变得不必要的巨大,当接收者太忙或者宕机,并且在已经有新数据可用的情况下接收到消息时,它会失败。

有没有解决这个问题的方法,还是我们真的需要转储S3来获得像RDBMS或MongoDB这样更加一致的后端?

回答

0

如果你的场景允许你的数据总是被写在S3下的一个新键上(通过总是创建新的对象),那么你可以依靠亚马逊的写后读一致性。

这里是亚马逊的描述,描述这种一致性模型:

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

+0

我们决定将blob存储转换为MongoDB,它提供了很强的一致性。 – skrat