产品版本控制微服务

Product Versioning Microservices

我研究基于 docker 的微服务架构,我有 3 个微服务,它们共同创建了一个产品,例如 "CRM system"。

现在我希望我的客户能够随时升级他的产品。 我有 3 个不同版本的微服务,客户应该看到哪一个? 我想产品版本应该独立于微服务,因为复制其中一个微服务版本会让我遇到比根本没有版本更多的麻烦。

那么有没有什么模式,想法来处理这种情况?

我唯一想到的是拥有另一个存储库,每当其中一个微服务生成生产就绪包时,该存储库就会进行版本控制。但是,我现在有一个版本,none 的产品负责人 (PO) 会知道。

文献为此使用了 5 维模型:

  • 版本(想换)
  • 状态(生命周期:创建、测试、部署、停用)
  • 查看(源、部署、文​​档)
  • 层次结构(产品、微服务)
  • 变体(大致相似,描述差异,产品系列)

大多数系统只处理其中的几个维度。要处理所有这五个问题,您必须描述(修复)您的开发过程。

当仅查看版本和层次结构时,就像您在此处对产品和微服务分别进行版本化所做的那样:只要产品用户注意到不同之处,产品版本就应该更改。您可能希望通过使用主要-次要编号从微服务版本控制中发出信号:次要不应影响产品版本,主要应该。 或者您可以使用版本 ranges/semantic 版本控制。

参考文献:

管理设计数据:CAD框架、配置管理、产品数据管理五个维度。 van den Hamer、P. Lepoeter、K. 飞利浦水库,埃因霍温;

本文发表于:IEEE 会刊 出版日期:1996 年 1 月 卷:84,期:1 页数:42-56 ISSN:0018-9219 引用的参考文献:26 密码:IEEPAD INSPEC 登录号:5175049 数字对象标识符:10.1109/5.476025 当前版本发布时间:2002-08-06

微服务版本控制

首先确保微服务严格遵守Semantic Versioning (SemVer)。不这样做迟早会导致不兼容问题。

仅捕获该版本中的 API 更改,不要将其与微服务内部版本控制(例如,具有数据库的服务的数据库模式版本控制)混淆。

产品版本控制

按照您的建议为产品引入一个版本。遵循 SemVer 在这里也很有意义,但可能需要放松以满足营销需求(例如,允许进行主要版本增量,即使 SemVer 只需要次要版本增量)。在极端情况下,使用专用的 "technical versions" 和 "marketing versions"。然而,这对客户来说也更复杂。

另请注意,您需要定义 SemVer 版本对您的应用程序的含义,因为整个应用程序没有 "API".

依赖管理

现在一个特定的产品版本是一个特定版本的微服务列表。请注意,这本质上是依赖管理,与 aptnpmbower 等实现的意义相同。很难说您的解决方案需要多复杂,但我建议至少支持 "minimum required versions" 的概念。如果 docker 有内置机制,请尝试使用那个(我对 docker 不是很了解,所以我说不出来)。

有了这个,你就是能够指定版本 4.8.12 的产品需要版本 1.12.0 的服务 A 和 3.0.4 的服务 B。

更新机制应该遵循遵循 SemVer 的策略。这意味着安装特定产品版本会自动安装具有相同主要版本 的最新服务。在上面的示例中,这可能是install 1.12.2 of service A and 3.3.0 of service B. 提供一种机制来保留满足依赖要求的已安装服务可能是个好主意,这样用户就不会因为更新机制而烦恼.