代码之家  ›  专栏  ›  技术社区  ›  Brandon Pelfrey

对具有断开连接的S3操作的并发请求的行为是什么?

  •  0
  • Brandon Pelfrey  · 技术社区  · 1 年前

    假设客户端发出删除对象的请求,并且在收到响应之前,该客户端已断开连接。现在假设发出并完成了对同一密钥的put请求。

    1. 有没有可能在put成功后执行第一个删除操作,从而出现似乎已损坏的情况?我目前的理解是,对于这样的并发请求,S3的行为是未定义的,但我找不到任何更具体的信息。
    2. 更一般地说,如果客户端在初始请求阶段后断开连接,S3中如何处理并发请求?

    需要明确的是,当提出第二个请求时,我对上面的行为感兴趣,并且在第一个请求有机会完成之前就会完成。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Filippo Testini    1 年前

    这里有两个主题可供讨论:

    1. S3的一致性模型
    2. 发送请求后客户端断开连接时API调用的行为

    首先,S3的一致性模型是 well-documented 甚至解决了并发调用的情况:

    在最后一个示例中,W2在W1接收到 确认。因此,这些写入被认为是并发的。 AmazonS3内部使用last-writer-wins语义来确定 哪个写入优先。
    然而,亚马逊S3 接收请求和应用程序接收的顺序 由于各种因素,确认是无法预测的,例如 作为网络延迟。
    例如,W2可能由亚马逊发起 同一Region中的EC2实例,而W1可能由主机启动 那是更远的地方。
    确定最终值的最佳方法是 确认两次写入后执行读取。

    至于第二个主题,它实际上不是关于服务器(在本例中是S3)的问题。
    如果客户端在发送请求之前断开连接,则不会发送请求。
    但是,如果客户端在发送请求后断开连接,服务器仍将接收到请求。
    客户端需要在重新连接时刷新数据,如果它试图执行与服务器状态不一致的操作,服务器会阻止它。