【问题标题】:Spring Boot + Tomcat - Microservices solutionSpring Boot + Tomcat - 微服务解决方案
【发布时间】:2015-09-14 19:57:48
【问题描述】:

我计划使用 Spring Boot 公开一些微服务(现阶段约为 20 个)。我将使用嵌入式 Tomcat 创建可执行的 fat jar。可执行 jar 将包装在 Docker 容器中并部署到 AWS。

在我的例子中,20 个 jar 将同时运行 20 个 tomcat 实例。我担心在生产服务器中运行这么多 tomcat 实例的开销。这是一个有效的担忧吗?

我想知道是否有人在生产中使用过类似的配置并可以分享他们的经验。

任何建议将不胜感激。

谢谢 JP

【问题讨论】:

  • 我猜它没有回答我原来的问题,对不起。我仍然不相信每个微服务中的 tomcat/servlet 容器和 spring jar 的开销是否会随着微服务的增长而导致任何问题。顺便说一句,我的工件大约是 ~15-20MB
  • 嗨@JPSingh,你得到答案了吗,我也在寻找同样的答案。
  • @JPSingh 你找到更好的方法了吗?

标签: spring-boot microservices


【解决方案1】:

我们目前使用 AWS 和 Spring Cloud / Spring Boot。我们的立场是需要更多资源的实例接收自己的 EC2 实例。可以使用 Docker 部署的服务部署到Amazon ECS

我们所有的部署都是使用嵌入式 Tomcat 的胖罐子。

不知道您所称的服务的大小使这个答案有点复杂。如果您担心 Tomcat 的开销,为什么要在 Docker 容器中运行这些服务?易于部署?

如果您确实将多个服务部署到同一个 Tomcat 实例,我不会将您的设置定义为基于微服务的配置。

【讨论】:

  • 为什么选择 Docker? - 我们正在转向微服务架构,每个微服务都可以独立部署/开发。我们也有 CI/CD 设置,可以加快部署管道。你是对的,在一个 tomcat 中使用多个服务不会让我们到达那里。所以这不是我们的选择。关于我的服务的大小,当前的 jar 大约是 20MB。在高层次上,服务公开了一个与遗留系统对话的 json api。微服务内部不涉及 db/jms 事务。
  • 我们迁移到 docker 的原因是云服务的经济性。我们可以将更多的 docker 容器部署到单个实例上,从而利用每个实例的更多资源。从你对罐子大小的描述来看,它和我们的差不多。本质上,一切都是作为 Docker 容器部署到 AWS ECS 集群的 Spring Boot/Tomcat jar。 DevOps/规划对我们来说是迄今为止最困难的部分。大约 600 个微服务。我们将其与 Spring Cloud OSS / Netflix OSS 结合使用。 Docker 的另一个好处是更容易在开发人员环境中进行测试。
  • @code 即使是一个简单的微服务也要占用 600 MB 到 1 GB 的 RAM,我们发现在单个 t2-large 实例上部署 7-8 个微服务也不是最优的。你认为 Docker 在这种情况下会帮助我们吗?如果是,那怎么办?最终,docker 也部署在 ec2 实例上,与普通的 Spring Boot 基础微服务相比,它们将进一步增加内存需求。我正在考虑以最佳方式利用我的 ec2 实例。
  • @Netverse Docker 并不是解决 Ram 要求的灵丹妙药。我们已经能够使用更少量的 Ram。 128MB 到 512MB。 Docker 的主要节省来自于更少的操作系统开销。
【解决方案2】:

您可以尝试将所有服务(webapps)部署到一个或多个 tomcat 实例中。您可能没有将 Tomcat 包含在 war 文件中。您可能会发现示例 maven/spring 配置 here

【讨论】:

    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2018-01-07
    • 2020-03-11
    • 2022-01-08
    • 2020-09-27
    • 2019-02-20
    相关资源
    最近更新 更多