Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 产品版本控制微服务_Architecture_Docker_Domain Driven Design_Soa_Microservices - Fatal编程技术网

Architecture 产品版本控制微服务

Architecture 产品版本控制微服务,architecture,docker,domain-driven-design,soa,microservices,Architecture,Docker,Domain Driven Design,Soa,Microservices,我研究了基于docker的微服务体系结构,我有3个微服务,它们共同创建了一个产品,例如“CRM系统” 现在我希望我的客户能够随时升级他的产品。 我有3个不同版本的微服务,客户端应该看到哪一个? 我想产品版本应该独立于微服务,因为复制一个微服务版本会比没有版本更麻烦 那么,有什么模式、想法来处理这种情况呢 我想到的唯一一件事是拥有另一个存储库,每当一个微服务生成生产就绪的包时,该存储库就会进行版本控制。然而,我现在有了一个版本,我的产品所有者(PO)都不知道这个版本。文献使用了一个5维模型: 版

我研究了基于docker的微服务体系结构,我有3个微服务,它们共同创建了一个产品,例如“CRM系统”

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

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


我想到的唯一一件事是拥有另一个存储库,每当一个微服务生成生产就绪的包时,该存储库就会进行版本控制。然而,我现在有了一个版本,我的产品所有者(PO)都不知道这个版本。

文献使用了一个5维模型:

  • 版本(想要更改)
  • 状态(生命周期:创建、测试、部署、退役)
  • 视图(源、部署、文档)
  • 层次结构(产品、微服务)
  • 变体(基本相似,描述差异,产品系列)
大多数系统只处理这些维度中的一小部分。要处理这五个问题,您必须描述(修复)您的开发过程

当只查看version plus层次结构时,正如您在这里分别对产品和微服务进行版本控制时所做的那样:一旦产品的用户注意到一些不同之处,产品版本应该立即更改。您可能希望通过使用主辅编号从microservice版本控制发出信号:辅不应影响产品版本,主应。 或者可以使用版本范围/语义版本控制

参考资料:

管理设计数据:CAD框架、配置管理和产品数据管理的五个维度。 范登哈默,P.勒波特,K。 飞利浦股份有限公司,埃因霍温

这篇论文发表在:IEEE会议录 出版日期:1996年1月 第84卷第1期 第(s)页:42-56 ISSN:0018-9219 引用参考文献:26 代码:IEEPAD INSPEC注册号:5175049 数字对象标识符:10.1109/5.476025 发布的当前版本:2002-08-06 首先,确保微服务严格遵循。不这样做迟早会导致不兼容问题

仅捕获该版本中的API更改,不要将其与微服务内部版本控制(例如,具有DB的服务的DB架构版本控制)混淆

产品版本控制 按照您的建议为产品介绍一个版本。以下SemVer在这里也有意义,但可能需要放松以满足营销需求(例如,允许进行主要版本增量,即使SemVer只需要少量版本增量)。在极端情况下,使用专用的“技术版本”和“营销版本”。然而,对于客户来说,这也更为复杂

还请注意,您需要定义SemVer版本在应用程序中的含义,因为整个应用程序没有“API”

依赖管理 现在,特定产品版本是特定版本的微服务列表。请注意,这本质上是依赖关系管理,其意义与
apt
npm
bower
等实现相同。很难说您的解决方案需要多复杂,但我建议您至少支持“最低要求版本”的概念。如果docker有一个内置机制,试着使用它(我对docker不太了解,所以我说不出来)

这样,您就可以指定
4.8.12
版本的产品需要
1.12.0
版本的服务A和
3.0.4
版本的服务B


然后,更新机制应遵循遵循SemVer的策略。这意味着安装特定产品版本会自动安装具有相同主版本的最新服务。在上面的示例中,这可以例如安装服务A的
1.12.2
,以及服务B的
3.3.0
。提供一种机制来保持满足依赖性要求的已安装服务可能是一个好主意,这样用户就不会对更新机制感到恼火。

你所说的
随时升级产品是什么意思?您指的是桌面应用程序或移动应用程序之类的应用程序,其中您不要求它们进行更新,这会在添加附加功能或改进API消息架构方面造成问题?是的,我指的是桌面应用程序,它具有升级系统模块的功能。它允许管理员(客户端)通过单击一个按钮升级他的系统。应用程序停止一段时间,后台任务完成它的工作,以满足请求。我认为OP的问题遗漏了一点。他在问“如果我有3个微服务,每个都有自己的版本,比如v1.0.0 v1.2.1 v1.3.0,那么当我从v1.0.0->v1.1.0开始时,我如何描述产品版本?是否应该为拥有这3个微服务的整个产品提供一个独立的版本?是否也应该使用SemVer?”