You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS SDK上传大目录遇503 Slowdown错误:如何降低请求速率?

解决AWS SDK uploadDirectory 503 Slowdown错误的方法

看来你遇到了S3兼容存储的限流问题——即使把并发数设为1,连续的上传请求还是触发了503 Slowdown提示。这种情况通常是因为服务端认为你的请求速率超出了允许范围,哪怕是单并发的连续请求也可能触发。下面是几个具体的解决办法:

1. 在文件上传之间添加延迟

你可以利用uploadDirectory的beforeUpload回调,在每个文件上传前(或后)添加固定延迟,直接降低请求频率。修改你的代码如下:

$client->uploadDirectory(
    MY_SOURCE,
    SPACES_NAME,
    DESTINATION,
    array(
        'concurrency' => 1,
        'debug' => TRUE,
        'force' => FALSE,
        'options' => array(
            'ServerSideEncryption' => 'AES256',
        ),
        // 添加上传前延迟
        'beforeUpload' => function ($source, $key, $metadata) {
            // 根据服务限制调整,比如1-2秒
            sleep(1);
            return true; // 返回true允许继续上传
        }
    )
);

如果1秒还是触发限流,可以尝试增加到2秒,具体数值可以根据服务的速率限制灵活调整。

2. 调整SDK的重试策略

默认的重试机制可能会在请求失败后快速重试,间接导致请求速率飙升。你可以在创建S3客户端时,配置更保守的重试规则:

$client = new Aws\S3\S3Client([
    'region' => 'your-region', // 替换为你的存储桶区域
    'version' => 'latest',
    'retries' => 3, // 减少重试次数,避免反复重试增加请求量
    'retry_delay' => function ($retries) {
        // 指数退避策略,重试间隔随次数增加而变长
        return pow(2, $retries); // 第1次重试等2秒,第2次4秒,以此类推
    }
]);

这样即使遇到临时失败,重试的间隔也会逐渐拉长,不会短时间内发送大量请求。

3. 确认没有其他并发请求

确保当前没有其他脚本、AWS CLI命令或者其他服务在同时向同一个存储桶发送请求——这些都会累加请求速率,哪怕你的uploadDirectory是单并发的。

额外提示

有些S3兼容服务(比如DigitalOcean Spaces)有明确的请求速率限制(比如每秒最多几个请求),你可以参考对应服务的文档,把请求速率控制在限制以内。另外,开启debug模式可以帮助你查看请求的时间线,确认是否是连续请求导致的限流。

内容的提问来源于stack exchange,提问作者Marcelo Agimóvel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:02:22