Continuous integration 定期发布的微服务体系结构版本控制

Continuous integration 定期发布的微服务体系结构版本控制,continuous-integration,microservices,release,versioning,continuous-delivery,Continuous Integration,Microservices,Release,Versioning,Continuous Delivery,我正试图了解在基于微服务的体系结构中,通过定期发布来管理版本控制的最佳实践 目前,我们的系统被分解为多个不同的存储库: 前端 后端 数据库 API网关 码头工人 这些组件中的每一个都必须独立开发、制造、测试、集装箱化和部署。但是发布周期是同步的和周期性的。Docker compose env项目包含用于启动所有兼容服务版本以进行开发和集成测试的环境定义 当前版本控制策略如下所示: 每个提交到master分支都使用语义版本进行标记,并推送到docker注册表(语义标记用于跟踪开发周期中的依赖关

我正试图了解在基于微服务的体系结构中,通过定期发布来管理版本控制的最佳实践

目前,我们的系统被分解为多个不同的存储库:

  • 前端
  • 后端
  • 数据库
  • API网关
  • 码头工人
这些组件中的每一个都必须独立开发、制造、测试、集装箱化和部署。但是发布周期是同步的和周期性的。Docker compose env项目包含用于启动所有兼容服务版本以进行开发和集成测试的环境定义

当前版本控制策略如下所示:

  • 每个提交到
    master
    分支都使用语义版本进行标记,并推送到docker注册表(语义标记用于跟踪开发周期中的依赖关系)
  • 每个merge commit to persistent
    release
    分支都用一个release标记进行标记,并推送到docker注册表(release标记用于将项目版本同步到一起,以便每季度发布一次)
  • master
    是主干,定期发布构建由PR从
    master
    release
    发起

    我怀疑这是否是在定期发布的基础上使用基于微服务的体系结构管理版本的最佳方法。任何反馈或提示都将不胜感激

    这些组件中的每一个都必须独立开发、制造、测试、集装箱化和部署。但是发布周期是同步的和周期性的

    这里有一个矛盾。微服务主要解决组织问题-主要的一点是团队应该能够尽可能独立地工作

    团队之间的同步是使他们变慢的原因。这可能以不同的方式发生,例如等待在共享测试环境中部署另一个版本,或者使用相同的共享数据库模式,或者同时发布

    我怀疑这是否是在定期发布的基础上使用基于微服务的体系结构管理版本的最佳方法

    尽量避免“同步发布”,而是确保不破坏服务之间的任何契约(例如,不破坏API更改)。尝试更频繁地发布,您希望以小批量工作来降低部署和更改的风险。尽量不要堆积如山的变化,部署持续不断的交付

    这些组件中的每一个都必须独立开发、制造、测试、集装箱化和部署。但是发布周期是同步的和周期性的

    这里有一个矛盾。微服务主要解决组织问题-主要的一点是团队应该能够尽可能独立地工作

    团队之间的同步是使他们变慢的原因。这可能以不同的方式发生,例如等待在共享测试环境中部署另一个版本,或者使用相同的共享数据库模式,或者同时发布

    我怀疑这是否是在定期发布的基础上使用基于微服务的体系结构管理版本的最佳方法


    尽量避免“同步发布”,而是确保不破坏服务之间的任何契约(例如,不破坏API更改)。尝试更频繁地发布,您希望以小批量工作来降低部署和更改的风险。尽量不要堆积如山的更改,持续部署-持续交付。

    发布周期是同步的

    我认为,您需要同时对所有服务进行同步发布,这一事实可能表明,您的服务之间的耦合比它应该的更高,并且您管理它的方式可能会得到改进

    问题是,您如何设计您的开发团队在不同的微服务上工作,以便在他们引入更改时不会破坏彼此的微服务

    版本控制和管理更改

    有两个方面对这项工作很重要,它们是:

  • 版本控制以及如何实现和使用版本控制
  • 团队沟通。引入突破性变更时团队之间的沟通
  • 这是什么意思?

    首先介绍版本控制。您的微服务正在相互通信。 不管使用Rest(或SOAP或gRPC或其他)或消息传递(队列)的通信是同步还是异步的,它们都需要依赖于一些契约。这些契约将是一些API契约(就Java/C类/接口而言)。它们需要稳定,因为它们可以被其他微服务使用

    建议:我建议独立于合同的版本控制来进行微服务的版本控制。 例如:

    • 微服务订单微服务可以是最新版本v1.0.0,合同订单微服务合同也可以是v1.0.0版本
    • 微服务客户微服务可能是最新版本v3.0.0,但合同客户微服务合同可能是v2.2.1
    • 微服务产品微服务可能是最新的v3.0.0版本,合同产品微服务合同可能是v4.0.0版本
    正如您可以从上面的示例中看到的,微服务的版本及其相应的公开契约可以相同,但也可以不同。原因很简单,您可以在不更改契约的情况下对微服务进行更改(一些内部业务逻辑更改)。您还可以在不更改微服务逻辑的情况下更改合同。通常,它们两个的变化同时发生。您将更新一些api业务逻辑,并为其调整公开的契约。但有时微观上会发生重大变化-