提问者:小点点

处理 AWS RDS 连接池(使用 POSTGRES 13)和节点 Lambda


我们在AWS中使用RDS实例,它是POSTGRES 13。我们有基于节点的Lambdas,它向数据库返回和发送数据。目前,他们在每笔交易中打开和关闭一个连接,我们希望通过实现连接池来优化这一点。

有一个专门为处理数据库连接而设计的AWS服务,称为AWS RDS代理,但它与POSTGRES 13不兼容。我们正在寻找替代方法,并非常感谢这方面的任何见解。

我们考虑将DB连接从Lambda处理程序中拉出,这样它就能保持状态(直到Lambda被移除),但这无法关闭它与DB的连接,我们担心会填满所有可用的连接。情况可能是这样,也可能不是。

非常感谢,

山 姆


共2个答案

匿名用户

这里有一些随机的想法可能会有所帮助。

    < li >有什么特殊原因需要使用PostgreSQL 13吗?如果您能回到10/11,那么您将能够使用RDS代理,然后您的问题将得到解决 < li >同样,如果您想使用RDS Aurora,则可以将其与RDS代理结合使用 < li >您可以使用PgBouncer(或另一个第三方代理——有很多——但是要让它与RDS一起工作会非常困难。大多数情况下,您需要启动ECS实例,在其上运行代理,然后连接到代理,这是故意含糊其辞的,因为每个代理的工作方式略有不同 < li >您可以增加允许的数据库连接数,但这通常不是一个好主意,因为这只会拖延时间 < li >您可以考虑水平或垂直扩展解决方案,但这些解决方案同样无法解决根本问题,只是让问题变得不那么明显,并在问题再次出现之前进行更多的并发访问 < li >您可以在数据库、社交网站或SQS前排队,并且只有一个连接。如果您只是向数据库中写入数据,并且不太关心实际需要多长时间完成,这种方式是很好的。但是,它引入了一种完全不同的体系结构,这种体系结构从一开始就破坏了使用RDS的许多优点 < li >如果您需要读取数据,那么您可以使用读取副本,但这只是水平缩放/分片的另一种形式 < li >同样,您可以放弃使用Lambdas,因为这些是首先导致问题的“愤怒的蜜蜂群”,但同样,这是一个重大的架构变化

根据我的经验,获得一个连池解决方案应该足以解决大多数用例,但是当你将两种不是100%兼容的技术组合在一起时,仍然有限制。

匿名用户

RDS 代理现在支持 Postgres 13

https://aws.amazon.com/about-aws/whats-new/2022/04/amazon-rds-proxy-supports-postgresql-major-version-13/