使用AWS PHP SDK v2在S3区域之间进行非阻塞对象复制


Non blocking object copy between S3 regions with the AWS PHP SDK v2

我正在尝试使用AWS PHP SDK v2中的S3Client->copyObject()操作在位于不同区域的桶之间复制Amazon S3中的大型对象。

对象复制确实有效,但问题是复制操作可能需要相当长的时间才能返回响应,并且它会阻塞PHP脚本的执行,这不是我想要的在这个特殊情况下。

是否有任何方法可以通过SDK以非阻塞方式进行copyObject()调用(可能使用一些较低级别的Guzzle设置)?我需要这种非阻塞行为,因为我必须定期向另一个服务(Amazon SWF)发送健康检查,让它知道我的脚本仍在运行。

如果调用不能以非阻塞的方式执行,我知道还有其他可能的解决方案,但我希望从有更多SDK经验的人那里得到更多的想法。

(我认为我可以采取的一种可能的方法是fork()过程&在子进程中执行copyObject()操作;此外,如果Guzzle支持它,并且如果它确保回调方法至少每分钟执行一次,那么某种进度回调也可以工作

为此,您需要创建一些在后台运行的进程。

您可以使用amazon队列服务。

查看此链接- http://aws.amazon.com/sqs/

解决方案1-你只需要提供作业队列服务,它会在后台执行你的任务,所以你的PHP脚本不需要等待。

解决方案2-还有另一种方法是让您的PHP cron作业每分钟或每5分钟执行一次。您可以将任务存储在数据库中,cron将从DB访问任务并执行它。它是如何工作的你只需要把你的任务转储到DB并返回。然后你的cron将从DB中读取并在后台执行。