【发布时间】:2023-03-16 14:57:01
【问题描述】:
我正在使用微服务构建一个云原生应用程序。最终,我已经到了必须为我的微服务实施正确版本控制的地步。在我看过的大多数地方,现在每个人都在谈论语义版本控制(一般来说,不仅仅是微服务)。
微服务架构的一个原则是永远不要交付破坏性变更集。另一方面,语义版本控制表示,当交付非向后兼容(读作“破坏”)变更集时,应该增加主版本号。这些如何兼容?
在我看来,语义版本控制可能对于微服务架构来说太过分了。如果所有公共 API 都进行了版本控制(例如 /api/v3/getSomething),那么我真的需要完整的语义版本控制吗?我正在考虑一个方案,我使用单个数字来标识当前可用的 API 版本(v1、v2、v3 等)以及标识生成构建的持续集成管道的构建号(或者可能是日期/时间戳) .请注意,在使用该服务的每个人都开始使用 v3 之前,v3 仍将支持 v2 API 调用,因此从某种意义上说,v3 是“目标版本”。所以我的微服务 foo 看起来像“foo-v3-20160503142209.jar”
这有什么明显的缺陷吗?在我看来,如果我强制从不交付破坏性变更集(如果它发生变化,它是一个新的 API 版本),客户端将保证 API 是兼容的。客户可以通过使用最新的内部版本号/时间戳来确定所有最新的错误修复。
【问题讨论】:
标签: cloud versioning microservices semantic-versioning continuous-delivery