我对如何使用弹簧启动的多个微服务感到困惑。
当我读到Karaf时,他们总是使用Blueprint而不是Spring,我不会觉得可以在Spring启动时使用它。
然后我找到Fabric8但是我找不到任何用Spring启动的微服务的例子。
我所需要的只是能够在运行时进行热部署和配置,就像Karaf那样,但是有多个Spring启动服务。
有可能吗?
有人可以给我文档或项目样本吗?
谢谢
答案 0 :(得分:9)
以下是demo video showing how to create a Spring Boot microservice中的Fabric8 Microservices Platform,并且创建了完整的Continuous Deployment pipeline来执行以下操作:
git存储库中的任何代码或配置更改都会自动启动滚动更新 - 这是一种热部署。例如如果你在生产中运行3个容器;新容器根据滚动升级策略使用新代码和/或配置进行调整。通常新的容器开始;当他们准备好时,旧的被取下来,一次说1个(如果你愿意,你可以一次性完成)。滚动升级包含在任何服务负载平衡中;所以新容器只有在准备好时才会被调用。
鉴于您使用OSGi,您可能希望容器继续运行并且只是动态变异。首先,整个移动到不可变基础设施(例如码头图像)意味着软件变得更简单,更容易推理。而不是动态地输入/输出新的捆绑/代码/配置,您只需创建一个新的图像并将其旋转。
动态变异导致多线程代码必须动态停止和重新启动服务,这会导致各种复杂的难以重现错误和资源泄漏,因为您有大型复杂的对象依赖关系图表的服务启动/停止苍蝇在Fuse团队中,我们浪费了很多年来修复 restart 逻辑中的错误,我确信在动态重启OSGi服务时仍然存在大量的漏洞。
所以我的偏好是使用Continuous Deployment pipeline推出所有更改;无论是代码还是配置。当然,在您进行更改的时间与进程使用新代码/配置处理新请求的时刻之间会增加一些延迟 - 但您可以获得更高的质量和可靠性。此外,它还可以轻松回滚。您还可以轻松地对更改进行滚动升级;因此,如果更改会破坏您的一小部分用户/流量,而不是大爆炸,那么您可以获得快速反馈。
有人说;如果你真的真的希望生产JVM能够动态地重新加载代码和/或配置,而不是在没有简单回滚的大爆炸方法中首先进行测试;还有一些选择。它们在configuration microservices documentation中描述。
基本上归结为使用ConfigMap in Kubernetes或git repository volume;在这两种情况下,配置都作为卷(文件)公开 - 然后Java代码可以监视文件并在运行时重新加载。您可以通过OSGi配置管理员或Spring Boot - 您选择的任何开发框架来实现此目的。
请记住,从热重新加载的延迟带来的好处与降低质量,增加的错误以及远离不可变基础架构和持续交付的操作问题之间的权衡
答案 1 :(得分:3)
使用spring boot无法实现热部署。我们目前正致力于karaf boot,旨在提供类似OSGi体验的弹簧启动。
我上周在巴塞罗那(JBCNCONF)的一次会议上也做了一个演讲,内容涉及这个话题:Lean microservices in OSGi。
所以我认为OSGi中的微服务已经可行但我们还没有弹簧启动提供的同样方便。