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

如何缩短Amazon S3响应时间?问题排查及解决记录

获取S3存储桶最新文件响应过慢问题排查与解决

问题描述

我有一个Java方法,通过列出Amazon S3存储桶中的所有对象并按名称(所有文件名均包含时间戳)排序来获取最新保存的文件。问题在于响应时长可达13秒甚至20秒,具体取决于存储桶中的对象数量。

我猜测问题出在调用路径上:客户端→Cloudflare→负载均衡器→Ingress控制器→我的服务容器→Ingress控制器→负载均衡器→Cloudflare→客户端,因为在本地调用该方法时,平均响应时长仅为1.5毫秒。

有没有办法缩短响应时间?

相关代码

服务方法

public URL getLastSavedFile(Integer vehicleId) {
    try {
        S3ObjectSummary s3ObjectSummary = repository.downloadLastFile(String.valueOf(vehicleId));
        GeneratePresignedUrlRequest request = getPresignedUrl(s3ObjectSummary);
        log.info("Returned URL of last file from S3 storage, for vehicle - {}", vehicleId);
        return s3Client.generatePresignedUrl(request);
    } catch (IndexOutOfBoundsException e) {
        log.info("Failed to get last snapshot, the following - {} doesn't exist in storage", vehicleId);
        throw new RuntimeException(e);
    }
}

仓库代码

public S3ObjectSummary downloadLastFile(String vehicleId) {
    ObjectListing listing = s3client.listObjects( env.getProperty("INIT_S3_BUCKET"), vehicleId );
    List<S3ObjectSummary> objects = listing.getObjectSummaries();
    while (listing.isTruncated()) {
        listing = s3client.listNextBatchOfObjects (listing);
        objects.addAll (listing.getObjectSummaries());
    }
    objects.sort((o1, o2) -> o2.getKey().compareTo(o1.getKey()));
    return objects.get(0); //sorted list with most recent timestamp in the beginning
}

问题解决

已解决!经排查,问题根源在于Maven依赖,原本使用的是aws-java-sdk 1.12.382旧版本,将其替换为aws-java-sdk-s3 1.12.415版本后,问题得到解决,现在响应时长为1-2秒。


内容的提问来源于stack exchange,提问作者VegetaSan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:08