【问题标题】:SemVer and MicroservicesSemVer 和微服务
【发布时间】:2017-09-07 02:20:26
【问题描述】:

在微服务产品中应用 SemVer 是否有任何最佳实践/模式?每个微服务是否应该有 SemVer,整个产品是否应该有 SemVer?

示例 - 我有一个名为 SuperDatabase 的产品,其中包含 3 个名为 SuperDatabaseCoreSuperDatabaseReportsSuperDatabaseSearch 的微服务。

初始版本: SuperDatabase v1.0.0 SuperDatabaseCore v1.0.0 SuperDatabaseReports v1.0.0 SuperDatabaseSearch v1.0.0

报告的小幅更新: SuperDatabaseReport v1.1.0

产品现在应该是SuperDatabase v1.1.0吗?

如果以后有一个搜索补丁怎么办: SuperDatabaseSearch v1.0.1

是否应该再次更改产品版本?产品版本是否应该完全独立于微服务?它应该使用 SemVer 吗?还是不应该有任何版本控制?

【问题讨论】:

  • 如果你有三个服务共享同一个数据库,那么你就没有理解微服务背后的想法。大小不是重点
  • SuperDatabase 是此处用于示例的组成应用程序的名称。随意将其替换为ApplicationName-ServiceName

标签: architecture microservices semantic-versioning


【解决方案1】:

我知道这是一个迟到的回应,但我想我会分享它。

我们有许多微服务,每个都有自己的 semver。我们使用 docker 容器来部署甚至发布到客户端(我们发布 docker 镜像)。 docker 有一个清单来指定包含哪些微服务的版本……这是一项人工工作,因为我们需要选择兼容的版本。我们的 devops 计划使用kubernetes,我认为它有很好的依赖管理。

产品的版本(营销版)完全不同。开发不关心营销版本......他们根据整体的主要/次要变化来提升他们的版本。这实际上是我们发布的 docker 镜像的版本。

回到微服务,我们正在使用自动版本控制...因此开发人员必须通过指定更改的类型并根据构建过程提高版本(无论是它是次要的,主要的或补丁)。一旦更改合并到主分支中,该分支会自动标记为该版本。所以基本上我们是连续发布的。

在共享库方面,我们也在关注 semver。我们正在利用 maven 范围版本来获取最新的兼容版本,如果有主要版本,则需要开发人员参与升级相关应用程序。

我也找到了这两篇文章:

using a core to plug microsevices inhaving multiple concurrent instances

=== 更新

这是对我的回答的更新。由于我们的开发中正在进行大量更改,因此开发人员很难提供更改的类型(向后兼容的错误修复、BC 增强或非向后兼容的更改)。想象一下,每个存储库(微服务)每天最多合并 10 次,我们最终可能会得到像 125.5455.0 这样的版本。所以我们决定以这种方式放弃微服务的版本控制,并使用git commit id作为版本。它是独一无二的,它是自动的。我知道这看起来有点奇怪,但我无法告诉您这种方法在 CI/CD 自动化和发布过程中对我们有多大帮助。

我们创建一个如下所示的版本清单:

microservice-one:
  imageTag: "49e6f0f164324a314a475f483fcd9bd98e0e08ab"
microservice-two:
 imageTag: "57e272c44eb9dd6302617a3b5fe0baf82fa61617"
microservice-three:
 imageTag: "004dea68c4d4121d77cc4742f6b5702d7307d510"

但是我们交付给客户的版本就像v1.2.0,并且这个版本链接到上面的版本清单,这有助于我们找到我们交付的实际提交。我们用这个提交 id 标记所有 docker 镜像。

【讨论】:

  • 谢谢 - 这就是我一直在寻找的......基本上是服务版本控制与营销版本与营销版本。
【解决方案2】:

您应该独立地对服务进行版本控制,微服务架构的好处之一是您可以更新和部署系统的一小部分,而无需对其他组件造成任何停机(理论上)。如果在对组件 C 进行更新时对组件 A 和 B 进行了版本化,那么当只有一个组件发生更改时,您最终将不得不部署所有组件。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 2018-03-16
    • 2015-08-17
    • 2017-05-08
    • 2015-07-13
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多