假设我有 25 个 Spring Boot 微服务,每个微服务都以 1GB JVM 开始生产。在任何给定时间,并非所有内存都在使用中,并且没有任何实例同时使用完整的 25GB 内存。实际上,它们中的许多将在 90% 的时间里处于空闲状态,但它们中的任何一个都可能在某些时候被调用并需要高达 1GB 的内存。
在我的开发环境中,我想一次运行所有这些,但只有 8GB 内存。我不需要出色的性能,但我需要它们全部同时运行才能使整个应用程序正常工作。我想尝试在具有 6GB 专用内存的单个 JVM 中运行所有应用程序。这在任何时候都应该足够了。
这似乎是一个常见问题,因为许多公司正在转向云/微服务。10 年前,我们将拥有一个带有单个 JVM 的单体应用程序(易于在开发环境中运行)。现在我们有几十个小型应用程序,它们可能不需要大量内存,但它们每个都运行在自己的 JVM 中,因此每个都有很大的开销。这实际上使开发变得更加复杂而不是简化。所以我试图为我们的开发人员找到一个解决方案,让他们可以运行所有东西,但不会杀死他们机器上的内存。
- 除了本地配置文件之外,Spring Boot 应用程序需要在不进行修改的情况下运行。否则,开发人员每次从 git 中提取代码时都必须进行大量更改
- 每个项目都需要能够为 tomcat 配置不同的端口(application-local.properties 设置)。
- 每个项目都需要自己的类路径条目(例如,一个可能使用 jar 的 1.0 版,另一个可能使用 2.0 版,并且没有单独的类路径,一个或另一个会破坏)
我一直在尝试关注这篇文章,但它不是我想要的 100%。我觉得一个合适的解决方案应该尊重 application.properties / application-local.properties 文件并使用项目内部设置的端口,而不是硬编码项目外部的任何配置。本质上,他的帖子是为每个微服务启动一个单独的线程,并为每个线程附加一个单独的类加载器。然后调用 SpringApplication.run 并传入通常用于启动微服务的类名。我认为这可能是忽略了自动配置属性。
任何帮助将不胜感激!