与多个无服务器功能共享数据库是好习惯吗?

Is sharing database with multiple serverless functions good practice?

与多个无服务器函数共享数据库是好的做法吗?

就像在 CRUD 应用程序中一样,通常创建、更新、删除和读取是共享同一数据库的不同操作。如果我们将这个想法迁移到无服务器上,那仍然是理想的吗?所有这些操作都访问同一个数据库。

我的犹豫来自于在不同微服务之间共享数据库的想法。因为这会增加耦合并使事情变得更加脆弱。

这个问题的答案取决于数据库和操作的情况。

这些顾虑可以归结为数据库的以下特点:

  • 它能处理并发吗?这是可以阻止无服务器功能网络在数据库上运行的首要原因。例如,S3 存储桶无法处理并发,因此需要实施 firehose 或 SQS 等变通办法,以便多个 lambda 表达式同时运行。另一方面,DynamoDB 可以毫无问题地处理并发。
  • 它是事务性还是分析性数据库?这将限制读取与写入的速度,如果它们太慢,您的 lambda 将以指数方式变慢。这意味着,例如,如果写入速度很慢,那么它们应该大批量完成,而不是从多个实例中以小增量完成。
  • 它对工作频率的限制是什么?等式的两边都可能存在限制。如果 Lambda 都存在于同一区域,则默认情况下它们的最大并发数为 1000。数据库通常也对可以同时发生的操作数量有限制。

在大多数情况下,前两个项目符号是最重要的,因为除了少数极少数情况外,通常不会达到限制。