3

我对如何使用 Spring Boot 制作的多个微服务感到困惑。

当我阅读有关Karaf的信息时,他们总是使用 Blueprint 而不是 Spring,我不认为它可以与 Spring boot 一起使用。

然后我找到了 Fabric8,但我找不到任何使用 Spring Boot 制作的微服务示例。

我所需要的只是能够像 Karaf 那样在运行时进行热部署和配置,但需要使用多个 Spring 引导服务。

可能吗?

谁能给我文档或项目样本?

谢谢

4

2 回答 2

9

这是一个演示视频,展示了如何Fabric8 微服务平台中创建 Spring Boot 微服务,并创建完整的持续部署管道来执行以下操作:

  • 打包代码,创建docker镜像和kubernetes manifest
  • 执行系统/集成测试
  • 使用滚动更新部署到登台环境
  • 等待(可选)人工批准
  • 通过滚动更新部署到生产环境

git 存储库中的任何代码或配置更改都会自动启动滚动更新——这是一种热部署形式。例如,如果您在生产中运行 3 个容器;新容器会根据滚动升级策略使用新代码和/或配置启动。通常会启动新容器;当它们准备好时,旧的被取下来,一次说 1 个(或者如果你愿意,你可以一次全部做完)。滚动升级包含在任何服务负载均衡中;所以新容器只有在它们准备好时才会被调用。

鉴于您使用 OSGi,您可能希望容器继续运行并在运行中进行变异。首先,向不可变基础架构(例如 docker 映像)的整体迁移意味着软件变得更简单、更容易推理。您只需制作一个新图像并将其旋转起来,而不是即时滚动新的捆绑包/代码/配置。

动态变异导致多线程代码不得不动态停止和重新启动服务,这可能导致各种复杂的难以重现的错误和资源泄漏,因为您有大量复杂的对象依赖关系图来动态启动/停止服务。在 Fuse 团队中,我们已经浪费了很多年的时间来修复重启逻辑中的错误,而且我确信在动态重启 OSGi 服务时仍然隐藏着无数错误。

所以我的偏好确实是使用持续部署管道来推出所有更改;无论是代码还是配置。当然,在您进行更改和进程使用新代码/配置处理新请求的时刻之间会增加一些延迟 - 但您拥有更高的质量和可靠性。再加上回滚也很简单。您还可以轻松地进行更改的滚动升级;因此,如果更改破坏了一小部分用户/流量而不是大爆炸,您将获得快速反馈。

话虽如此; 如果您仍然真的真的希望生产 JVM 即时重新加载代码和/或配置,而无需先以大爆炸的方式对其进行测试,而不会轻易回滚;还有一些可用的选项。它们在配置微服务文档中进行了描述。

本质上,它归结为在 Kubernetes 中使用 ConfigMapgit 存储库卷;在这两种情况下,配置都以卷(文件)的形式公开——Java 代码可以监视文件并即时重新加载。您可以通过 OSGi Config Admin 或Spring Boot来执行此操作——无论您选择哪种开发框架。

请记住,热重载延迟带来的好处与质量下降、错误增加和远离不可变基础设施和持续交付的运营问题之间的权衡

于 2016-06-24T07:55:03.343 回答
3

您无法使用 Spring Boot 进行热部署。我们目前正在开发 karaf boot,旨在在 OSGi 中提供类似 Spring Boot 的体验。

上周,我还在巴塞罗那的一次会议 (JBCNCONF) 上发表了一个演讲,涵盖了这个主题:OSGi 中的精益微服务

所以我认为 OSGi 中的微服务已经可行,但我们还没有像 Spring Boot 提供的那样方便。

于 2016-06-23T15:59:22.770 回答