所有微服务中使用的通用自定义库
A common custom library used in all the Microservices
我们开发了一个新的 CoreFramework with Spring Boot (CoreFramework-1.0.0.jar) 并将其推送到 JFROG-Artifactory。 CoreFramework 执行我们正在开发的所有微服务 所需的所有通用功能。 所有这些微服务都通过 maven POM.xml 依赖于它。我在这里有一个疑问,将来如果我们的 CoreFramework 有任何变化,将强制所有微服务重新部署(当我们将这些微服务部署到开班)。 有人可以建议如何处理这种情况吗?
提前致谢。
拥有 碰巧 常见的依赖关系不是问题 - 您已经拥有对 spring 的依赖关系,您认为这很好 :)
关键点是“将强制所有微服务重新部署”——这是您要避免的。说起来容易做起来难,但您需要确保未来的更改向后兼容,以便服务能够选择加入升级并按照自己的时间表
正如 Arnon 已经提到的,最好的情况是您的微服务不需要一起部署。所以你的服务应该解耦到库的确切版本无关紧要并且有一些向后兼容性的程度。
也就是说,进行这种重新部署的一种可能性是通过管道或构建触发器。这意味着库构建将触发微服务的重建,然后将自动导致新的部署:
+-----------+ +------------+
+--->| Service A +---->| Service A |
| | Build | | Deployment |
+-----------+ | +-----------+ +------------+
| Library +----+
| Build +----+
+-----------+ | +-----------+ +------------+
| | Service B | | Service B |
+--->| Build +---->| Deployment |
+-----------+ +------------+
在 OpenShift 中,您可以使用 Build Triggers 实现类似的功能或使用管道(Jenkins、Tekton 等)。
我们开发了一个新的 CoreFramework with Spring Boot (CoreFramework-1.0.0.jar) 并将其推送到 JFROG-Artifactory。 CoreFramework 执行我们正在开发的所有微服务 所需的所有通用功能。 所有这些微服务都通过 maven POM.xml 依赖于它。我在这里有一个疑问,将来如果我们的 CoreFramework 有任何变化,将强制所有微服务重新部署(当我们将这些微服务部署到开班)。 有人可以建议如何处理这种情况吗?
提前致谢。
拥有 碰巧 常见的依赖关系不是问题 - 您已经拥有对 spring 的依赖关系,您认为这很好 :)
关键点是“将强制所有微服务重新部署”——这是您要避免的。说起来容易做起来难,但您需要确保未来的更改向后兼容,以便服务能够选择加入升级并按照自己的时间表
正如 Arnon 已经提到的,最好的情况是您的微服务不需要一起部署。所以你的服务应该解耦到库的确切版本无关紧要并且有一些向后兼容性的程度。
也就是说,进行这种重新部署的一种可能性是通过管道或构建触发器。这意味着库构建将触发微服务的重建,然后将自动导致新的部署:
+-----------+ +------------+
+--->| Service A +---->| Service A |
| | Build | | Deployment |
+-----------+ | +-----------+ +------------+
| Library +----+
| Build +----+
+-----------+ | +-----------+ +------------+
| | Service B | | Service B |
+--->| Build +---->| Deployment |
+-----------+ +------------+
在 OpenShift 中,您可以使用 Build Triggers 实现类似的功能或使用管道(Jenkins、Tekton 等)。