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

标签 spring-mvc spring-boot azure-web-app-service

我有一个构建为 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 &quot;%HOME%\site\wwwroot\my-web-project.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

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

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

一些感兴趣的设置:
  • 标准 S1 实例(在撰写本文时,成本约为 40 美元/月)。
  • Webapp 配置为:
  • Tomcat8(应该无关紧要,因为 fat jar 子运行嵌入式 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 之后......,
    或编写 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/

    相关文章:

    azure-web-app-service - 带有属性 "hasgroups=true"而不是组属性对象的 Azure JWT

    azure-web-app-service - 在交换期间防止登台站点重新启动

    java - BindingResult 和 bean 名称 'student' 的普通目标对象都不能作为请求属性 - Spring MVC

    java - Spring Rest Service根据逻辑返回不同的媒体类型

    java - 将 Spring 上下文注入(inject)非 Spring 类

    java - 如何在任何在线服务器上部署 Spring 框架后端和 Angular 2 前端应用程序?

    java - 为 Apache Camel 配置数据源

    java - 如何从 spring-boot 执行 postgres sql block

    spring-boot - 无法通过 bootJar 任务创建可执行的 spring boot jar

    reactjs - 如何从 React Web 应用程序将文件上传到 azure blob?