Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/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_Versioning_Soa_Microservices - Fatal编程技术网

Architecture 微服务版本控制

Architecture 微服务版本控制,architecture,versioning,soa,microservices,Architecture,Versioning,Soa,Microservices,对于基于微服务的体系结构中的版本控制,在运行时支持同一服务的多版本部署方面,以及消费者如何能够使用不同的版本,最佳实践是什么? 1) 如果我们使用基于路由的版本控制作为上述方法之一 那么我想我们会有以下缺点 内部服务必须通过反向代理才能使用 使用者必须始终了解所需的版本控制 向消费者公开版本信息是最佳做法吗 在任何情况下,正如我所感觉的那样,以下情况始终适用: 对于主要版本更改,必须更改使用者 对于较小的版本更改(向后兼容),只有需要添加功能的使用者需要更改 对于补丁版本更改,它是可选的,可能会

对于基于微服务的体系结构中的版本控制,在运行时支持同一服务的多版本部署方面,以及消费者如何能够使用不同的版本,最佳实践是什么? 1) 如果我们使用基于路由的版本控制作为上述方法之一 那么我想我们会有以下缺点

  • 内部服务必须通过反向代理才能使用
  • 使用者必须始终了解所需的版本控制
  • 向消费者公开版本信息是最佳做法吗

    在任何情况下,正如我所感觉的那样,以下情况始终适用:

  • 对于主要版本更改,必须更改使用者
  • 对于较小的版本更改(向后兼容),只有需要添加功能的使用者需要更改
  • 对于补丁版本更改,它是可选的,可能会无缝地供任何消费者使用
  • 什么样的微服务版本控制策略可以帮助我们实现上述功能


    注意-如果需要将此问题分成多个问题,请随时告诉我。

    没有最佳实践。这将取决于在您的特定情况下版本控制应该如何工作

    Shawn Wildermuth在一篇文章中讨论了api版本控制。不确定microservice实现的细节,但是如果您使用的是restapi,您可以尝试对实际负载进行版本控制

    您也可以使用Accept标头来执行此操作。接受允许您 根据您所使用的API,使用版本类型对Accept标头进行注释 我想看看。您也可以使用内容类型来实现这一点。 供应商的应用程序/vnd指定返回文件的版本 数据,这样当应用程序发送它时,它知道是什么 有效载荷的版本。这是一项重要的技术 版本控制,因为您必须同时对API和实际URI进行版本控制 调用,以及返回的数据的形状

    如果您发现一种机制在您的环境中以及在您的客户和用户中运行良好,请继续使用它

    在基于微服务的体系结构中,适应版本控制的最佳实践是什么

    我在microservice项目中使用的一种策略是通过路由进行版本转换

    我们使用JSON RPC 2.0,因此它与REST略有不同,但可以应用

    我们只使用主版本控制,并尝试同时使用旧版本和新版本,以便让消费者的时间得到更新

    需要处理的事情

    • 避免在生产环境中使用两个以上的服务版本(如果您有一些模型更新,则很难管理)

    • 找到一种方法,告诉消费者他们使用的版本已被弃用

    我知道有些微服务架构没有版本控制,但这意味着消费者和生产者之间有很强的耦合,所以我可能不推荐这种方法

    回答第二个问题

    消费者将如何使用不同的版本

    这听起来不可能,因为消费者一次只能使用一个版本

    如果您想让它知道该版本在运行时可以使用它,那么您可以在功能翻转和服务发现之间穿行


    如果存在路由x,您的消费者将定期询问服务发现。如果为true,则使用该功能,否则继续使用当前版本。它可以工作,但管理起来有点棘手。

    你可以混合搭配不同的担架

    对于主要更改,您可以使用基于路由的版本控制


    另一方面,您可以使用基于适配器的版本控制,我认为可以肯定地说,到目前为止,这还不是一个已解决的问题。在微服务体系结构中,每个服务都应该是松散耦合的。如果当你改变一个制作人时,你必须寻找消费者来改变他们,那么这表明你有一个设计缺陷。 链接中介绍的基于路由的版本控制似乎不仅仅有“几个缺点”

    您应该对整个服务进行版本设置还是只对api进行版本设置?

    如果你对整个服务进行版本化,你将不可避免地打开相当多的蠕虫。想象一下,您实现了服务a的第一个版本(v1)。现在想象一下,由于业务的原因,一段时间后,必须实现一个新版本(v2)。如果在该服务的v2上发现错误,会发生什么情况?团队应该检查v1上是否也存在相同的bug。如果是这样的话,v1也应该被修正和重新部署。即使只是复制和粘贴,两个版本都需要重新测试和重新部署。如果版本之间存在重构,并且修复v1的方式与修复v2的方式不同,该怎么办?如果不是2个版本,而是5个或10个版本呢?比我有趣的人应该为这个制作一个“迅速扩展”的模因

    只需初步了解这个选项会带来多大的麻烦,我们基本上已经可以通过对api进行版本控制来做出决定。但基本上,如果您在代码级别上对服务进行版本设置:

  • 团队只需支持一个版本的服务(错误只需纠正一次)
  • 团队不必了解大量不同且可能非常不同的服务版本,从而减少认知消耗
  • 减少资源消耗
  • 保证版本之间的所有内容都是一致的(如果不是保证人,至少可能性要大得多)
  • 客户端如何传达他们将使用的api版本?

    对于这个答案,我将只参考RESTAPI,因为这是我足够了解的内容。基本上有4种api版本控制方法(我可以想到):

  • URI的版本控制:“
  • Accept标头中的版本
  • C语言版本