iCo*_*unk 4 streaming amazon-s3 amazon-sqs
如标题所述,如果我将事件附加到用于放置事件的S3存储桶中,并且将文件流式传输到该存储桶,那么一旦开始上传,事件将触发吗?这样,接收者可以开始下载该文件的流。
还是在文件上传完成后触发事件?
您要考虑的问题有两个:
在上传完成之前,该事件不会触发。
将对象写入S3始终是原子操作。写入要么成功完成,要么根本不发生……直到成功完成,该对象实际上并不存在于存储桶中。
如果您要将新对象写入存储桶中,则对该对象的授权请求将至少返回404错误,直到上传成功完成。
如果要覆盖现有对象,则对该对象的授权请求将始终返回该对象的旧副本,该副本不变且未损坏,至少直到覆盖成功完成为止。
注意上面的“至少直到”的使用。
在除美国标准(us-east-1)以外的所有区域中,新对象的上传通常在上传后立即可用。 在美国标准中,有时可能会短暂延迟。以前,S3的us-east-1区域(北弗吉尼亚州,以前称为“美国标准”区域)不为新对象提供即时(写后读取)一致性,但现在可以了。
但是,有一个陷阱:在上载对象之前,不得请求该对象。如果是这样,一致性模型就会失效。¹
Amazon S3为所有区域中的S3存储桶中的新对象提供PUTS写入后读取一致性,但请注意。需要注意的是,如果在创建对象之前对键名称发出HEAD或GET请求(以查找对象是否存在),Amazon S3最终将为写后读取提供一致性。
http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#Regions
在所有区域中,对现有对象的覆盖也可能会遇到短暂的延迟(并且删除对象在删除后的短暂时间内可能仍可访问)。
如上所述,这种潜在的延迟是由于S3在某些操作上最终的一致性模型所致。S3不能保证所有操作都会立即可见,尽管出于实际目的,它们几乎总是可见的。什么S3 确实保证的是,如果你的上传成功完成,从S3成功响应,那么你的目标是致力于S3后备存储。
以上适用于PUT上载,PUT /复制和分段。
由于这些原因,在尚未完成上载时,S3无法将文件流式传输给使用者。
为此,需要一个不同的解决方案(尽管在完成流传输后,S3当然可以用作永久存储库)。
¹ 一致性模型破裂。 几乎可以肯定的是,这表明到达S3的请求将查询存储桶索引的副本,并且如果该索引不知道是否存在对象,则它将查询该索引的更权威版本。如果仍然找不到任何内容,它会在本地“记住”该对象不存在,因为上游查找是一项相对昂贵的操作-因此,它将不会在后续请求中再次向上游查找-但一旦创建了新对象如果对象传播到本地索引,则该对象将可用。相同的理论解释了覆盖和删除的最终一致性。
| 归档时间: |
|
| 查看次数: |
1237 次 |
| 最近记录: |