Tod*_*odd 6 amazon-s3 amazon-ec2 amazon-web-services
我有一个S3存储桶,其中包含多个可以从中拉出的S3对象(水平缩放时).每个EC2将一次拉出一个对象,对其进行处理,然后将其移动到另一个桶中.
目前,为了确保多个EC2实例不处理相同的对象,我的Java应用程序将其重命名为添加到其S3对象键的"锁定"扩展名.问题是"重命名"实际上是在做"移动".因此,S3存储桶中的大文件可能需要几分钟才能完成"重命名",从而导致锁定过程无效.
有没有人有最佳实践来完成我想要做的事情?
我考虑使用SQS,但是"解决方案"有其自身的一系列问题(订单无法保证,消息可能不止一次传送,并且多个EC2获得相同的消息)
我想知道设置一个"锁定"标题是否会更快"锁定"过程.
订单无法保证,消息传递的可能性不止一次,并且多个EC2获得相同的消息
实际获得同一消息不止一次的几率很低.它只是"可能",但不太可能.如果在孤立的情况下,如果你碰巧不止一次处理一个文件,那么它本质上只是一个烦恼,那么SQS似乎是一个完全合理的选择.
否则,您将需要一个外部机制.
在对象上设置"锁定"标题有一个问题 - 当你用自己的副本覆盖一个对象时(这就是你改变元数据时会发生的事情) - 创建一个新的对象副本,同样的键)然后你受制于最终一致性的吊索和箭头.
问:Amazon S3采用什么数据一致性模型?
所有Regions中的Amazon S3存储桶都为新对象的PUTS提供了读写后一致性,并为覆盖PUTS和DELETES提供了最终一致性.
更新元数据是"覆盖" PUT
.您的新标题可能不会立即显示,如果两个或多个工作人员设置了自己的唯一标题(例如x-amz-meta-locked:i-12345678),则完全有可能出现如下情况(W1,W2) =工人#1和#2):
W1: HEAD object (no lock header seen)
W2: HEAD object (no lock header seen)
W1: set header
W2: set header
W1: HEAD object (sees its own lock header)
W2: HEAD object (sees its own lock header)
Run Code Online (Sandbox Code Playgroud)
在几种不同的定时排列中可能发生相同或类似的故障.
在这样的最终一致性环境中,对象无法有效锁定.
归档时间: |
|
查看次数: |
7637 次 |
最近记录: |