使用Java AWS开发工具包与NodeJS AWS开发工具包从lambda访问参数存储时的性能问题

问题描述

我正在尝试从lambda访问SSM参数存储。从基于Java AWS开发工具包的lambda获取参数与基于NodeJS AWS开发工具包的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;
  1. 这是预期的行为吗?为什么基于Java的lambda检索参数的时间比NodeJS多近10倍?
  2. 虽然不需要在NodeJS AWS开发工具包中打包lambda,但对于Java是强制性的,因为它在编译时是必需的,这使得jar约为8 MB,而zip for NodeJs约为1.4 MB
  3. 基于以上两点,是否可以得出结论,当需要访问参数存储时,基于NodeJS的lambda比基于Java的lambda好得多?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)