【问题标题】:Versioning cross micro service dependencies跨微服务依赖的版本控制
【发布时间】:2020-04-24 16:44:15
【问题描述】:

架构概述 考虑以下简化的微服务架构:

  • 服务 A - 门户
  • 服务 B - API

服务 A 依赖于服务 B。

问题陈述 如果我想在服务 A 中构建一个新的向后兼容功能,它需要对服务 B 进行更改,那么根据语义版本控制的定义,我必须为这两个服务创建一个新的次要版本。但是,服务 A 需要部署服务 B 的新次要版本。我怎样才能有效地管理这种依赖关系?我是否需要创建服务 A 的新主要版本来指示更改的依赖项?我想避免在尚未部署服务 B 的情况下部署服务 A...

基本上是这样;我应该如何对组件本身的非破坏性(即次要)更改进行版本更改,但如果版本不匹配会破坏整个应用程序?

【问题讨论】:

  • 由于这是一个非破坏性更改,因此您可以通过确保在将更改发送到服务 A 之前将更改部署到服务 B 来手动处理解决方案,这些更改需要 B 中的新端点/功能。但是,听起来您正在寻找一种更像包管理器那样自动解决这些依赖关系的方法 - 对吗?
  • @DavidT。这确实是正确的。我们有几个生产环境,每个环境都有自己独立的管道。因此,在将服务 A 运送到所有环境之前,无法手动部署服务 B。它与 helm 图表的关系比与包管理器的关系更密切。
  • 我就是这么想的。在过去的一年里,我一直在开发一个专门解决这个问题的部署工具(微服务的部署时依赖解析),它将于下周发布。该平台将根据每个部署作业的需要在相关服务之间提供和代理连接,该服务清单看起来很像任何其他包管理器的清单。如果您有兴趣尝试一下,我可以在接下来的几天内回复链接。
  • @DavidT。是的,请,我很感兴趣!
  • 抱歉耽搁了!本周刚刚发布了我们的测试版,我很乐意让您试用一下,看看它是否符合您的要求:Architect.io

标签: microservices


【解决方案1】:

您无需破坏现有的 API 合同。让我们调用您现有的 API(服务 B)myapi/v1/products。您根本不会更改现有 API 或此端点中的任何内容。您将创建名为 myapi/v2/products 的新版本并部署它。您可以选择在何处以及如何托管该端点。此端点具有您想要的所有最新更改。您的门户尚未受到影响。

现在您将部署门户并将 myapi/v1/ 用于需要向后兼容的功能,并将 myapi/v2/ 用于新功能,这样您就可以在不破坏功能的情况下管理 API 版本控制。

希望有帮助!

【讨论】:

  • 对于较小的更改,使用 key-sentinels 就地通常很有用(例如,存在一个新字段,这对于 DTO 结构来说更容易)。仍然需要定时推出。
猜你喜欢
  • 2015-09-03
  • 2017-01-21
  • 2021-01-05
  • 2023-03-16
  • 2021-02-06
  • 2016-01-17
  • 1970-01-01
  • 2020-07-14
  • 2020-05-21
相关资源
最近更新 更多