3

我在这里看到了这篇文章:https ://dzone.com/articles/making-spring-boot-application-run-serverless-with其中给出了如何在无服务器场景中使用 Spring 的示例,但我相信这仍然涉及创建 Spring 上下文,每次请求进入时都要进行昂贵的事情。我想知道 Spring 是否也是传统的 web应用程序框架甚至与无服务器模型真正兼容,因为它们都倾向于假设服务器只会在启动时初始化,然后直到服务器重新启动才再次初始化,而不是立即准备好处理请求并且不需要例如初始化一个 Spring 上下文。因此,这些框架往往会在启动阶段做很多事情,我相信当你没有服务器时,这并不好,而且你每次调用时都需要启动AWS 中的 lambda。

所以我的问题是这些传统的 Web 框架,例如 Spring,它们在启动时执行分配计算仍然适用于无服务器模型,例如:AWS lambda。

4

2 回答 2

2

有一些 Spring 子项目尝试处理这种情况,例如 Spring Cloud Function: https ://spring.io/blog/2017/07/05/introducing-spring-cloud-function

The deployment profiles even extend into the realm of Serverless (a.k.a. Functions-as-a-Service) providers, such as AWS Lambda and Apache OpenWhisk (as well as Azure Functions and Google Cloud Functions once they provide support for Java)

但是,仍然需要上下文初始化,所以我想应该由开发人员将其尽可能小以保证快速启动。

编辑:今天,我参加了Dave Syer在 Spring I/O 会议上的演讲,他提出了一些解决方案,使 Spring Boot 更适合无服务计算:

于 2017-12-14T02:41:44.497 回答
2

Spring 确实可以适用于无服务器模型,但正如您所建议的,恕我直言,它并不适合所有用例。

由于您提到的原因(“冷” Lambda 的启动时间相对较长),我建议在实施部署到 API 网关后面的 AWS Lambda 函数的 Web 应用程序时不要使用 Spring,因为响应时间会受到影响。

但是,在某些情况下,冷 AWS Lambda 函数中基于 JVM 的函数处理程序实现的长时间启动时间不那么令人头疼,您可以考虑使用此选项。一个示例是作为 Kinesis 流的消费者。冷启动仍然会像前一种情况一样糟糕,但是如果您有稳定的事件流,那么每个分片只会发生一次冷启动。另一个区别是,在使用 Kinesis 时,您已经选择了异步应用程序流。换言之,事件生产者可以在事件被放入流后立即继续其工作,而无需等待事件被处理。

于 2017-12-17T20:41:27.123 回答