首页 > 解决方案 > Can AWS Lambda be used as the backend for getstream.io?

问题描述

I didn't find any posts related to this topic. It seems natural to use Lambda as a getstream backend, but I'm not sure if it heavily depends on persistent connections or other architectural choices that would rule it out. Is it a sensible approach? Has anyone made it work? Any advice?

标签: aws-lambdagetstream-io

解决方案


虽然您只能在 Lambda 中构建整个网站,但您必须考虑以下几点:

  • API 网关后面的 Lambda 有 30 秒的超时限制和 6MB 的有效负载大小限制(接收和发送)。虽然在大多数情况下这很好,但如果你有一些非常大的操作或者你需要发送一些非常大的数据(比如高分辨率图像),你不能用这种方法来做,但你需要考虑别的东西(例如,您可以将 SNS 发送到另一个具有更高超时时间的 Lambda 函数,该函数可以异步执行所有这些操作,然后在完成后将结果发送给客户端,假设客户端能够接收事件)
  • Lambda 有冷启动,这会在一段时间内客户端第一次调用 API 时减慢它们的速度。冷启动时间取决于您使用 Lambda 的语言,因此您也可以考虑这一点。如果您在 Lambda 中使用 C# 或 Java,那么这可能不是最佳选择。从这个角度来看,Node.JS 和 Python 似乎是最好的选择,Golang 正在崛起。你可以在这里找到更多关于它的信息。顺便说一句,您现在可以Provisioned Throughput为您的 Lambda 指定一个,它旨在解决冷启动问题,但我还没有使用它,所以我不知道是否有任何区别(但我确定有)
  • 如果操作正确,您最终将管理数百个 Lambda 函数,而使用 ECS 下的标准 Docker 容器,您将管理具有多个端点的少数 API。这一点不应被低估,因为一方面它会使将来的更改更容易,因为 lambda 会很小,你很容易找到错误并修复它,但另一方面你必须跨越这些函数,如果您不确切知道哪个 lambda 负责可能是一个漫长的过程
  • 据我所知,Lambda 无法处理会话。因为一段时间后 Lambda 容器被删除,您无法在 Lambda 本身内存储任何会话。您总是需要一个结构来存储会话,以便可以在多个 Lambda 调用之间共享它,例如 DynamoDB 表中的一些记录或其他东西,但这意味着您必须为此编写代码,而在经典API(如 .NET Core 之一)所有这些都由语言本身处理,您只需要从会话中存储或检索项目(大多数情况下)

是的!完全用 Lambda 编写的支持是可能的。我工作的公司做到了,我必须说在速度和开发时间方面都要好得多。但是这些好处会在后面出现,因为您需要面对我上面列出的所有原因,而且并不像看起来那么容易


推荐阅读