Microservices 版本控制服务

Microservices 版本控制服务,microservices,azure-service-fabric,Microservices,Azure Service Fabric,我们正在尝试使用MS的ServiceFabric进行微服务 情景: 我们有一个运行version1的Service1,并准备升级到v2 其他三个服务依赖于Service1的接口。我们希望能够发布Service1的v2,但在升级并针对v2测试这三个服务之前,保持v1运行 在我找到的所有示例中,v2立即替换v1。这可以配置吗?是否有一种方法可以告诉服务发现机制我依赖于给定服务的特定版本?应用程序升级工作流将如您所述,用v2替换v1。但是,如果您希望v1和v2共存一段时间(为了允许您进行测试,逐渐将一

我们正在尝试使用MS的ServiceFabric进行微服务

情景: 我们有一个运行version1的Service1,并准备升级到v2

其他三个服务依赖于Service1的接口。我们希望能够发布Service1的v2,但在升级并针对v2测试这三个服务之前,保持v1运行


在我找到的所有示例中,v2立即替换v1。这可以配置吗?是否有一种方法可以告诉服务发现机制我依赖于给定服务的特定版本?

应用程序升级工作流将如您所述,用v2替换v1。但是,如果您希望v1和v2共存一段时间(为了允许您进行测试,逐渐将一些用户路由到新版本等),您可以通过稍微复杂一些的工作流来实现这一点:

  • 提供并创建版本为v2的新服务实例
  • 对该实例(v2)执行测试
  • 一旦您对测试感到满意,就将依赖服务指向新实例(v2)
  • 一旦v1实例不再使用,请将其删除
  • 这当然会给你带来额外的麻烦,因为你需要自己管理这个过程,处理你的依赖链,等等。这是一个折衷方案——如果您想要更多地控制升级/推出过程,您必须自己处理更多细节


    或者,您可以考虑建立一个“暂存”集群,在该集群中,您可以部署和测试服务的新版本,而不会影响生产服务,并且只有在阶段中对部署进行了验证后,才能将其推出到生产集群。我们的一些客户已经走上了这条道路,因为它以额外资源为代价使部署和验证工作流程更加简单。

    这似乎有点风险,因为它是手动的——我们每次升级时都必须给服务起一个新名称——而忘记这一点的风险太高了。编辑:哦,这会引起连锁反应——其他服务将依赖于三个更新的服务,等等……事实上,你需要的控制越多,依赖链越复杂,你就越头疼。我认为最简单(尽管最昂贵)的模型是拥有多个集群,这样在新部署得到充分验证之前,您的生产服务不会受到影响。正如我在答案中补充的那样,一些客户使用一个临时集群来验证他们在与生产环境非常相似的环境中的部署。大型团队通常也会使用额外的测试集群,向他们的登台过程添加多个级别(稳定性不断提高)。@Goblin我们针对这些情况所做的是在我们的服务url中注入版本名,如service/v1/blabla。服务/v2/blabla。在我们发布v2之后,我们正在计划service-v1的日落。在此之前,我们将继续保持这两项服务。我们正在监控service-v1的使用情况,并进行必要的提醒和关闭v1。我不确定您提供的是什么类型的服务,以及有多少不同的客户端正在使用您的服务,但如果您需要向后兼容和平滑过渡,这似乎是唯一的方法。@酷,这正是我们想要的:-)您是否在同一代码库中托管这两个版本?我们曾考虑过做不可变的服务,但就我在服务中所能想到的而言,这并不是一个真正的选项fabric@Goblin我对ServiceFabric一无所知。但是是的,我们在同一个代码库中托管这两个版本。