使用java aws sdk与nodejs aws sdk从lambda访问参数存储时的性能问题

envsm3lx  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(253)

我正在尝试从lambda访问ssm参数存储。我注意到,当参数是从基于javaawsdk的lambda获取时,与基于nodejsawsdk的lambda获取时,在性能上有很大的不同。
对于基于java的lambda-检索第一个参数大约需要5-10秒
对于基于nodejs的lambda-检索第一个参数大约需要0.5-1秒
基于java的lambda获取参数的示例代码:

import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagement;
import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClientBuilder;
import com.amazonaws.services.simplesystemsmanagement.model.GetParameterRequest;
import com.amazonaws.services.simplesystemsmanagement.model.GetParameterResult;

public class SSMClientUtil {

    private static AWSSimpleSystemsManagement ssm = AWSSimpleSystemsManagementClientBuilder.defaultClient();

    public static String getParameter(final String parameterName) {
        final long startTime = System.currentTimeMillis();
        final GetParameterRequest request = new GetParameterRequest();
        request.setName(parameterName);
        request.setWithDecryption(true);
        final GetParameterResult parameterResult = ssm.getParameter(request);
        System.out.println("GetParameterResult for parameter: " + parameterName + " Time : " + (System.currentTimeMillis() - startTime) + " -> " + parameterResult);
        return parameterResult.getParameter().getValue();
    }

}

基于nodejs的lambda获取参数的示例代码:

const AWS_SDK = require("aws-sdk");
ssmClient = new AWS_SDK.SSM();
var parameterPromise =  await ssmClient.getParameter(params).promise();
console.log('parameterPromise: ' + JSON.stringify(parameterPromise));
return parameterPromise.Parameter.Value;

是预期行为吗?为什么基于java的lambda检索参数的时间几乎是nodejs的10倍?
虽然在nodejs aws sdk中打包lambda不是必需的,但是对于java来说它是必需的,因为编译时需要它,这使得jar大约为8mb,而nodejs的zip大约为1.4mb
基于以上两点,当需要访问参数存储时,基于nodejs的lambda是否比基于java的lambda好得多?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题