gpt4 book ai didi

amazon-web-services - 我们如何将 JDBC 连接池与 AWS Lambda 结合使用?

转载 作者:行者123 更新时间:2023-12-02 10:17:57 24 4
gpt4 key购买 nike

我们可以将 JDBC 连接池与 AWS Lambda 一起使用吗? AS AWS lambda 函数在特定事件上被调用,因此即使在完成其中一个调用后,其生命周期仍然存在?

最佳答案

没有。从技术上讲,您可以在处理程序函数之外创建一个连接池,但由于每次调用只能使用任何一个连接,因此您要做的就是绑定(bind)数据库连接并分配一个只能使用 1 个连接的池。 .

将 Lambda 函数上传到 AWS 后,第一次调用时,AWS 将创建一个容器并运行设置代码(在处理程序函数外部创建池的代码 - 假设有 N 个连接),然后再调用处理程序代码.

当下一个请求到达时,AWS 可能会再次重新使用该容器(也可能不会。通常会这样做,但这取决于 AWS,不受您的控制)。

假设它重用容器,您的处理函数将被调用(设置代码将不会再次运行),并且您的函数将使用池中与数据库的 N 个连接之一(持有在容器级别)。这很可能是池中的第一个连接,编号为 1,因为它保证不会被使用,因为两个函数不可能在同一个容器中同时运行。请继续阅读以获取解释。

如果 AWS 不重用该容器,它将创建一个新容器,并且您的代码将分配另一个包含 N 个连接的池。根据容器的周转情况,您可能会完全耗尽数据库池。

如果两个请求同时到达,AWS 无法同时调用同一处理程序。如果这是可能的,那么在容器范围级别定义的变量就会出现共享状态问题。相反,AWS 将使用两个单独的容器,每个容器都会分配一个包含 N 个连接的池,即与数据库的 2N 个连接。

单个调用函数永远不需要多个连接(当然,除非您需要与同一上下文中的两个独立数据库进行通信)。

连接池唯一有用的时候是它位于容器范围之上的一级,即由 AWS 环境本身传递给容器。这是不可能的。

您希望的最好情况是每个容器有一个连接。即使这样,您也必须管理这个单个连接,以确保数据库服务器没有断开连接或重新启动。如果确实如此,容器的连接将终止,并且处理程序将永远无法再次连接(直到容器终止),除非您在函数中编写一些代码来检查已断开的连接。在繁忙的服务器上,容器可能需要很长时间才能终止。

另请记住,如果您的处理程序函数失败,例如事务进行到一半或锁定了表,则下一个请求调用将从容器获取脏连接状态。第一次调用可能已打开一个事务并终止。第二次调用可能会提交并包括失败之前的所有先前查询。

我建议根本不要在处理程序函数之外管理状态,除非您有特定的优化需求。如果这样做,则使用单个连接,而不是池。

关于amazon-web-services - 我们如何将 JDBC 连接池与 AWS Lambda 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37415469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com