天蓝网站上的Spring启动jar性能问题

时间:2016-11-08 21:14:21

标签: spring-mvc spring-boot azure-web-sites

我有一个应用程序,作为一个弹簧靴脂肪罐。 我根据"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 &quot;%HOME%\site\wwwroot\my-web-project.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

应用程序在结构上是单片的,不是太大但是有一些映射并且有一些层要初始化,所以启动时间在本地大约12秒。 它在内存数据库中运行H2仅用于测试目的。

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

感兴趣的一些设置:

  • 标准S1实例(在撰写本文时花费约$ 40USD /月)。
  • Webapp配置:
    • Tomcat8(当胖胖jar运行嵌入式tomcat时,真的不重要)
    • JDK 8
    • 始终启用

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

以下是一些结果:

应用程序的启动时间:

  • Azure网站:~2分钟
  • VM:30 sek

冷呼叫:

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

  • Azure网站:31119 ms
  • VM:219 ms

随后的电话:

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

  • Azure网站:2685毫秒
  • VM:223 ms

我的问题是: 有人知道在天蓝色网站上运行弹簧靴脂肪罐是否可行? 由于有来自微软的官方文档,人们会认为它是,当然在技术上它是,但它在生产中是否可行?

关于AWS vs Azure与Google App Engine的辩论之后我真的没有......, 或写战争/罐子或如何托管它。

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

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

2 个答案:

答案 0 :(得分:1)

虽然这是一个老问题而且我的答案没有价值,因为我对Azure没有任何了解,但我想分享我的研究结果。我有几个Spring Boot微服务和一个相对较大的服务(我的本地机器上的170 MB胖罐在大约70秒内启动)。 Azure以几十秒(如果不是数百秒)开始小型微服务......我的意思是非常小的微服务(Spring Cloud等配置服务器的一个例子......那里没有任何花哨的东西)。如果它涉及到大的 - Azure启动它并在2分钟后......再次启动它......再次......再次启动它。因此它永远不会开始。

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

总结一下,在我(非常主观)的观点中,Azure不是Java应用程序的可行选择。

答案 1 :(得分:0)

关于运行Azure网站上托管的春季启动脂肪罐的问题,这是可行的,请参阅我对SO线程Deploying Springboot to Azure App Service的回答,并关注该部分的官方document春天的靴子。

希望它有所帮助。如有任何疑虑,请随时告诉我。