在我的应用程序中,我使用AWS S3上传和存储文件。每当文件上传到S3时,都会创建一个触发特定lambda函数λ
的事件。然后,我的lambda函数λ
应该对我正在运行的AWS Aurora实例执行SQL INSERT(带有S3事件的事件数据)。我希望λ
每秒调用大约10到50次。
总结:S3 EVENT → TRIGGERS λ → AURORA INSERT
我发现各种帖子声称从lambda函数访问Aurora(或一般的RDS)可能会因缺少连接池和AWS Lambda的无状态容器架构(例如AWS Lambda RDS Connection Pooling)而导致问题。
我的λ
可以用任何语言编写,所以问题是,使用什么语言/框架来解决AWS Lambda连接池问题或换句话说,是否可以执行10 - 每秒50次插入Aurora与Aurora MySQL兼容的db.t2.small实例?或者有什么替代方法可以使用除Lambda之外的其他服务(例如SNS)对Aurora执行INSERTS,而无需编写和运行我自己的EC2实例?
更新2017-12-10 :AWS最近宣布Serverless AWS Aurora作为预览,对于无服务器架构看起来很有希望。
答案 0 :(得分:2)
连接池问题不是特定于语言的。它是由您在代码中用于连接和断开数据库的方法引起的。
基本上,避免它的最佳方法是在 lambda调用期间将和与数据库断开连接。从性能角度来看,这不是最优的,但这是最容易出错的。
有可能重用数据库连接(出于性能原因),但这可能会也可能不会出现连接问题,具体取决于数据库配置为处理空闲连接的方式。这需要一些反复试验和一些数据库配置调整。最重要的是,对开发起作用的调整可能不适用于生产(因为生产流量不同)。
现在,问题:
是否可以使用Aurora MySQL兼容的db.t2.small实例每秒对Aurora执行10-20次插入?
我不明白为什么不。每秒50次插入不是很高。
在没有编写和运行我自己的EC2实例的情况下,是否有其他服务可以使用除Lambda之外的其他服务(例如SNS)执行INSERTS?
我认为没有。 SQL INSERT使用模式,因此在插入数据时必须知道该模式,这意味着您必须使用Lambda自己编写代码。