弹簧与无服务器计算兼容



我已经在此处看过这篇文章:https://dzone.com/articles/making-spring-boot-application-run-serverless-with-提供了一个示例在无服务器方案中的春季,但我相信这仍然涉及创建春季上下文,每次请求时要做的一件昂贵的事情。我想知道是否春季,但传统的Web应用程序框架甚至与无情的模型,因为它们都倾向于假设服务器仅在启动时才初始化,然后再直到服务器重新启动之前,而不是立即准备好处理请求,而不需要初始化弹簧上下文。因此,这些框架往往会在启动阶段进行分配,这不是很好,我相信当您没有服务器时,您实际上需要每次启动您的启动lambda in Aws。

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

春季确实可以适用于无服务器模型,但是您建议,IMHO并不适用于所有用例。

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

但是,在Cold AWS lambda功能中基于JVM的函数处理程序实现的长期启动时间的情况下,您可能会考虑此选项。一个例子是作为运动流的消费者。冷启动仍然像以前的情况一样糟糕,但是如果您有稳定的事件流,则冷启动只会每片一次。另一个区别是,使用运动型时,您已经选择了异步应用流。换句话说,事件生产者可以在事件被放置在流中,而无需等待事件的处理。

有一些春季子项目试图处理这种情况,例如春季云功能:https://spring.io/blog/2017/07/07/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)在春季I/O会议上进行的演讲,他提出了一些解决方案,使春季启动更适合Serveless Computing:

  • Spring Boot mini应用程序:它们是SB应用程序,但上下文减少:https://github.com/dsyer/spring-boot-thin-launcher
  • Spring Boot Thin Launcher:https://github.com/dsyer/spring-boot-thin-launcher
  • 关于启动多个配置需要多长时间的一些基准:https://github.com/dsyer/spring-boot-startup-bench

最新更新