假设我有这样的代码。AWS的并发行为Lambda
public class MyHandler {
private Foo foo;
public void handler(InputStream request, OutputStream response, Context context) {
...
}
}
富富负责创建池数据库连接的服务。
我想了解它如何与AWS Lambda一起工作。如果我理解正确,foo会在多个调用中共享。第一个需要更多的时间,因为它必须加载到容器中,随后的将更快,因为foo已经初始化。直到我的处理程序在闲置一段时间后才被踢出去,情况就会如此。
因此,对于顺序调用,它是否会使用同一个对象,它是否可以访问早期函数调用中创建的/ tmp?
平行调用怎么样?它是否会复制整个容器,因为根据文档,每个lambda函数应该在它自己的容器,它自己的资源和它自己的/ tmp中执行?
如果处理程序将在闲置后被踢出,Java中是否有一个回调函数可以调用以关闭所有打开的池连接?
因此,在并行调用的情况下,当容器发生重复时,通常会有创建数据库连接的开销?那意味着,为AWS Lambda创建池式连接没有用处? – Prabhat
如果没有足够的容器已经启动的并行执行的情况下,是的,会创建一个新的容器创建数据库连接的开销。如果您在一段时间内继续使用并行调用,那么这些容器将被重用,这意味着在处理程序之外创建数据库连接有很好的理由。但是,如果您在Lambda函数内部使用连接池,我认为您只希望该池的大小为1. –
谢谢。这清除了事情。基本上,它就像创建与数据库的直接连接而不是混合数据库。如果我的理解正确,则不能保证第二次调用将通过在并行环境中首次调用来访问存储在'/ tmp'中的数据,即使这两次调用是连续的。 想知道'/ tmp'的真实用例 – Prabhat