我有一个构建为 spring boot fat jar 的应用程序。
我根据 "official" documentation 在 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 "%HOME%\site\wwwroot\my-web-project.jar"">
</httpPlatform>
</system.webServer>
</configuration>
该应用程序在结构上是整体式的,不是太大,但做了一些映射并有一些层要初始化,因此本地启动时间约为 12 秒。
它在内存数据库中运行 H2 仅用于测试目的。
实际部署并让它在 azure 网站上运行从来都不是真正的问题,但存在一些真正的性能问题,至少在我的设置中是这样。
一些感兴趣的设置:
为了能够将这些数字与我在具有相似(但不相同)规范和价格范围的 Azure VM 上运行应用程序的内容进行比较,并在该虚拟机上运行应用程序。
以下是部分结果:
应用程序启动时间:
冷调用:
部署/启动应用程序并让它在第二天打电话。
随后调用:
在冷调用之后直接调用,但到另一个端点。
我的问题是:
有谁知道在 azure 网站上运行 spring boot fat jars 是否可行?
由于有来自 Microsoft 的官方文档,人们会认为它是,当然在技术上是这样,但它在生产中是否可行?
我并不是真的在辩论 AWS、Azure 和 Google App Engine 之后......,
或编写 war / jar 或如何托管它。
我有理由想要这样。如果不可能,我有其他选择,但想先探索这个想法,看看其他人是否有更好的经验?
编辑:只是为了添加信息。所有调用的数据库都是空的。所以这不应该增加任何开销来说话。没有数据实际上只获取空列表。
最佳答案
虽然这是一个老问题,我的回答也没有什么值(value),因为我对 Azure 一无所知,但我想分享我的研究成果。我有几个 Spring Boot 微服务和一个相对较大的服务(170 MB fat jar ,在我的本地机器上启动大约 70 秒)。 Azure 在几十(如果不是几百)秒内启动小型微服务......我的意思是像真正的小型微服务(Spring Cloud 等配置服务器的一个例子......那里没有什么花哨的东西)。如果涉及到大的 - Azure 启动它,然后在 2 分钟后......再次启动......一次又一次......一次又一次。结果它永远不会开始。
这一切都在 B3 应用程序服务计划中。所以相当大的计划。
总结一下,在我(强烈主观)看来 - Azure 不是 Java 应用程序的可行选择。
关于spring-mvc - azure 网站上的 Spring Boot jar 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40496521/