azure 网站上的 Spring Boot jar 性能问题

ale*_*efr 5 spring-mvc spring-boot azure-web-app-service

我有一个构建为 spring boot fat jar 的应用程序。我根据“官方”文档将它托管在 azure 网站中,web.config 也类似:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
        </handlers>
        <httpPlatform processPath="%JAVA_HOME%\bin\java.exe" arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\my-web-project.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

该应用程序在结构上是整体的,不是太大,但做了一些映射并有一些层要初始化,因此本地启动时间约为 12 秒。它在内存数据库中运行 H2 仅用于测试目的。

实际部署并让它在 azure 网站上运行从来都不是真正的问题,但存在一些真正的性能问题,至少在我的设置中是这样。

一些感兴趣的设置:

  • 标准 S1 实例(在撰写本文时,成本约为 40 美元/月)。
  • Webapp 配置为:
    • Tomcat8(应该无关紧要,因为胖罐子运行嵌入式 tomcat)
    • JDK 8
    • 始终开启

为了能够将这些数字与我在具有相似(但不相同)规格和价格范围的 Azure VM 上运行应用程序的内容进行比较,并在该虚拟机上运行应用程序。

以下是部分结果:

应用程序启动时间:

  • Azure 网站:约 2 分钟
  • 虚拟机:30 秒

冷呼叫:

部署/启动应用程序并让它在第二天打电话。

  • Azure 网站:31119 毫秒
  • 虚拟机:219 毫秒

随后调用:

在冷呼叫之后直接呼叫,但到另一个端点。

  • Azure 网站:2685 毫秒
  • 虚拟机:223 毫秒

我的问题是: 有谁知道在 azure 网站上运行 spring boot fat jars 是否可行?由于有来自 Microsoft 的官方文档,人们会认为它是,当然在技术上是这样,但它在生产中是否可行?

我并不是真的在讨论 AWS、Azure 和 Google App Engine 之后......,或者编写战争/罐子或如何托管它。

我有理由想要这样。如果不可能,我有其他选择,但想先探索这个想法,看看其他人是否有更好的经验?

编辑:只是为了添加信息。所有调用的数据库都是空的。所以这不应该增加任何开销来说话。没有数据实际上只获取空列表。

Pio*_*pes 2

虽然这是一个老问题,而且我的回答也没什么价值,因为我对Azure一无所知,但我想分享我的研究成果。我有几个 Spring Boot 微服务和一个相对较大的服务(170 MB fat jar,在我的本地计算机上启动大约 70 秒)。Azure 在数十(如果不是数百)秒内启动小型微服务...我的意思是像非常小的微服务(来自 Spring Cloud 等的配置服务器的示例...那里没有什么花哨的事情)。如果涉及到大问题 - Azure 会启动它,并在 2 分钟后......再次启动......然后再一次......再一次。结果它永远无法启动。

这一切都在 B3 应用服务计划中。这么大的计划。

总结一下,在我(非常主观的)看来,Azure 对于 Java 应用程序来说不是一个可行的选择。