使用 lambda 设置 Postgresql

问题描述 投票:0回答:1

我正在尝试将 lambda 与 postgresql 一起使用,并使用 hiberntate 进行连接和 orm。

我想了解这一点, 每当调用该 lambda 函数时,每次都会启动新的 lambda 容器(如果不是这种情况,则为 LMK),hibernate 会一次又一次地设置其配置(可能会占用大量开销)吗?

我还做了一个小实验来理解这一点,其中 lambda 只是连接到 rds postgres db 并使用用户 id 进行查询,我按顺序执行了 1000 个 lambda 调用(等待 lambda 完成,同时在代码中添加时间戳以获取日志)

public String handleRequest(DataSourceInput input, Context context) {
        
        long startTime = System.nanoTime();
        if(input == null || CommonUtil.isInputNull(input.sql) || CommonUtil.isInputNull(input.operation)) return "Input empty!";
        List<User> users = DataSourceProperties.hibernateOrm(input.sql,input.operation); // obtaining session and querying using userID
        long endTime = System.nanoTime();
        long timeTaken = (endTime-startTime)/1000000;
        long timestamp = System.currentTimeMillis();
        logger.info("Postgres Test Query|||timeTaken:{} ms|||query:{}|||startTime:{}",timeTaken,input.sql,timestamp);
        return users.toString();
    }

注意: 这里提供的时间是上面提供的代码的“timeTaken”,而不是 lambda 执行时间。

现在,当我查询日志时,似乎数据平均为 5ms 来执行整个过程,但有时需要大约 24 秒才能运行,通过它我得出结论,不是每次创建新容器时,而是当它创建时创建后,hibernate 需要大量开销来启动该功能

我的想法对吗?还是我缺少什么?

postgresql hibernate aws-lambda amazon-rds cold-start
1个回答
0
投票

您所看到的是 AWS Lambda 冷启动(创建并初始化整个 Lambda 容器以便为请求提供服务)与热启动(再次使用先前初始化的容器来处理另一个请求)之间的区别。 此 AWS 博客文章中描述了此行为。

如果冷启动太慢,您可以查看Lamba 预置并发,以始终保持一定数量的函数实例处于热状态。当然,这意味着您要为这些正在运行的实例支付更多费用,这违背了无服务器计算的好处之一。


一般来说,我不会推荐将 Hibernate 用于像 AWS Lambda 这样的无服务器临时环境。

© www.soinside.com 2019 - 2024. All rights reserved.