一段时间后,适用于节点的AWS开发工具包变慢

时间:2019-07-18 09:45:11

标签: node.js typescript amazon-s3

我将S3用作数据湖,并在我的打字稿项目中创建了一个S3类,该类管理对我感兴趣的存储桶的访问。

到目前为止,我仅实现了一种方法来检查存储桶中是否存在密钥,并且在密钥正常运行时,我注意到它在运行几次后变得越来越慢。

这是微服务的一部分,该微服务不时保持运行状态,需要检查存储桶中是否存在密钥。该类的代码如下:

import { AWSError, S3 } from "aws-sdk";
import { getJsonConfig, DatalakeConfig } from "./config";

export class S3Client {
    private config: DatalakeConfig;
    private innerClient: S3;

    public constructor(config: string | DatalakeConfig) {
        if (typeof config === "string") {
            this.config = getJsonConfig("datalake.reader");
        } else {
            this.config = config;
        }
        this.innerClient = new S3({
            accessKeyId: this.config.accessKeyId,
            secretAccessKey: this.config.secretAccessKey
        });
    }

    private withPrefix(path: string): string {
        let result = this.config.bucketPath;
        if (!result.endsWith('/')) {
            result += "/";
        }
        if (path.includes(result)) {
            return path;
        }
        return result + path;
    }

    public async keyExists(key: string): Promise<boolean> {
        const params = {
            Bucket: this.config.bucketName,
            Key: this.withPrefix(key)
        };
        return new Promise<boolean>( (resolve, reject) => {
            this.innerClient.headObject(params, (err: AWSError) => {
                if (err) {
                    if (err.code === "NotFound") {
                        resolve(false);
                    } else {
                        reject(err);
                    }
                } else {
                    resolve(true);
                }
            });
        });
    }
}

如您所见,它具有一个innerClient,它是在实例化该类时创建的S3客户端。我现在正按如下方式使用它:

if (!exists) {
    reject(Error(`Key not found in the datalake:
    Bucket:     ${this.datalakeConfig.bucketName}
    BucketPath: ${this.datalakeConfig.bucketPath}
    Key:        ${key}`));
}

使用指数退避方法重试这段代码,直到尝试了给定的次数为止。在测量每次迭代中调用它所花费的时间时,我注意到一段时间后,它花费的时间要长得多。就像随着时间的流逝,请求和连接的速度变慢了。

我不确定在这之间是否应该处理任何事情,或者我有什么需要解决的问题。您在此实现中看到任何需要修改或改进的东西吗?

0 个答案:

没有答案