微服务版本控制的最佳实践

5
我读了Susan Fowler的书《生产就绪型微服务》,在两个地方(至少到目前为止)我发现以下内容:
  • (第26页)“避免对微服务和端点进行版本控制”,
  • “对微服务进行版本控制很容易成为组织架构混乱的噩梦”(第27页),
  • 在微服务生态系统中,不鼓励对微服务进行版本控制(第58页)。
无论如何,在所有不同类型的项目中,我都使用了各种类型的版本控制方式:git tag、deb包版本控制、Python包版本控制、http API版本等等,并没有遇到过很大的问题来管理项目的版本。此外,在发生故障或客户报告错误时,我也知道要回滚到哪个版本。
您有什么想法,为什么在这本书中微服务版本控制会被如此谴责,并且针对这个话题,您有什么建议吗?
2个回答

1

您确定她没有在谈论将版本整合到服务的名称或端点的名称中吗? 使用版本化端点的服务名为OrderProcessing_2_4_1是一个非常糟糕的想法。使用版本化端点的服务名为OrderProcessing_2_4是稍微好一些,但仍然有问题。

如果您的微服务调用必须寻址带有版本号的端点,那么每次更改服务时都会面临维护(和生产)噩梦。每个其他服务和客户端都必须被检查以更改对您更新的服务的任何引用。

这与为您的API、代码或服务设置版本不同。如果您要真正获得许多微服务的好处,则需要这些版本。

您的编排功能必须能够找到与客户端版本要求匹配的服务的正确版本(客户端“输入新订单”应用程序的版本2.6.2需要至少版本为2.4.0的服务“OrderProcessing”才能支持NATO产品分类)。

你可能会在生产环境中同时拥有多个版本的服务(2.4.0 已被弃用但仍为某些客户提供服务,2.4.1 正在引入,3.0.0 版本正在测试最新的 UI 和功能)。如果你需要动态更新服务并且需要全天候运行,则尤其如此。编排功能是将服务和端点匹配的地方,当你引入一个新版本的服务时,你需要更新编排数据库以描述其他所需服务的版本(我的新版本 2.4.1 的 OrderProcessing 需要 ProductManager 的 2.2.0 或更高版本,因为那时加入了 NATO 产品分类到产品数据中)。

0

这本书的作者是正确的,更新API版本很困难,特别是如果它很受欢迎。这是因为你要么必须找到所有旧版本的用户并让他们升级,要么你必须同时在生产中支持两个版本的软件。

但是,在我看来,你仍然应该对API进行版本控制。只是永远不要更改API版本。你应该支持API版本的原因是因为你永远不知道何时需要更改它。所以添加版本,但应避免每次更改它。在许多情况下,更容易启动一个新的API或以不破坏当前版本合同的方式扩展现有API。

顺便说一句,在未来,你永远不知道什么时候会出现新技术或设计模式,使得一个API的两个版本可以轻松地存在于同一个软件实例中,并以非常优雅的方式在生产中运行。如果有类似的东西出现,那么你可能会看到更多的API版本更改。


据我所知,所有主要供应商(谷歌、Facebook、Twitter、亚马逊)都有非常受欢迎的API和API版本。我仍然不明白为什么这是反模式。如果她说“对于我们的组织来说不可行或无用”,我可以理解,但反模式完全不同。你们的微服务架构怎么样?你们有版本吗? - Razvan Tudorica
版本控制不是反范式,改变你的版本才是。我想她的看法是,如果改变版本是反范式,那么只需删除版本控制即可解决问题。很多东西都是主观看法。凭直觉行事,如果出现问题,再解决。我认为现在你已经收集了足够的建议并且对这个主题有了很好的阅读理解。 - Jose Martinez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接