微服务版本控制

2024-04-13

就在运行时支持同一服务的多个版本化部署以及消费者如何使用不同版本而言,适应基于微服务的架构中的版本控制的最佳实践是什么? 1)如果我们使用基于路由的版本控制作为提到的方法之一here http://niels.nu/blog/2016/microservice-versioning.html那么我想我们会有以下缺点

  1. 内部服务必须通过反向代理进行消费。
  2. 消费者始终必须了解所需的版本控制。

将版本信息公开给消费者是最佳实践吗?

无论如何,我认为以下几点始终适用:

  1. 对于主要版本更改,必须更改消费者。
  2. 对于次要版本更改(向后兼容),只有需要添加功能的消费者才需要更改。
  3. 对于补丁版本更改,它是可选的,并且任何消费者都可以无缝地使用它。

什么样的微服务版本控制策略可以帮助我们实现上述目标?

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


我认为可以肯定地说,到目前为止这还不是一个已解决的问题。在微服务架构中,每个服务应该是松散耦合的。如果当你更换生产者时,你必须寻找消费者来改变他们,那么这表明你有设计缺陷。 链接中提供的基于路由的版本控制似乎不仅仅有“一些缺点”。

您应该对整个服务进行版本控制还是仅对 API 进行版本控制?

如果你对整个服务进行版本控制,你总是会遇到很多蠕虫。想象一下,您实现了服务 A 的第一个版本(v1)。现在想象一下,一段时间后,由于业务原因,必须实现新版本(v2)。如果在该服务的 v2 上发现错误会怎样?团队应该检查 v1 上是否也存在相同的错误。如果是这样,v1 也应该被更正并重新部署。即使只是复制粘贴,两个版本都需要重新测试和重新部署。如果版本之间存在重构并且修复 v1 的方式与修复 v2 的方式不同怎么办?如果不是 2 个版本,而是 5 个或 10 个版本怎么办?比我更有趣的人应该为此制作一个“迅速升级”的模因。

只需简单了解一下这个选项可能会带来多少麻烦,我们基本上就可以通过仅对 api 进行版本控制来做出决定。但基本上,如果您在代码级别对服务进行版本控制:

  1. 团队只需支持一个版本的服务(错误只需纠正一次)
  2. 团队无需理解大量不同且可能截然不同的服务版本,从而减少认知消耗
  3. 资源消耗少
  4. 保证版本之间的一切都是一致的(如果不能保证,至少更有可能)

客户端如何传达他们将使用哪个版本的 api?

对于这个答案,我将仅参考 REST api,因为这是我所知道的足够多的内容。基本上有 4 种对 api 进行版本控制的方法(我能想到的):

  1. 对 URI 进行版本控制:“http://主机/serviceA/v3/随便 http://host/serviceA/v3/whatever"
  2. Accept 标头中的版本
  3. 自定义标头中的版本
  4. 版本作为参数

This tutorial http://www.springboottutorial.com/spring-boot-versioning-for-rest-services会比我更好地解释其中每一个及其缺点,但基本上任何一个都应该做得很好 =)

我如何(该死)在相同的代码中维持无数的服务版本? (你疯了???)

您的服务本身只是其中之一。您应该做的是应用适配器设计模式,以便存在与服务的业务层交互的不同版本的细节。这样,您就只拥有某些对象的某些版本,并且它对服务核心是透明的。这也是同样的结论article http://niels.nu/blog/2016/microservice-versioning.html问题中提到,它甚至有一个很好的例子来展示它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务版本控制 的相关文章

  • Spring MVC - 从另一个休息服务内部调用休息服务

    目前 我在从一个 REST 服务内部调用另一个 REST 服务时遇到了一个非常奇怪的问题 我真的可以帮忙找出我做错了什么 首先 了解一些背景 我有一个 Web 应用程序 它调用 REST 服务来创建用户帐户 为了便于说明 端点是 local
  • 微服务版本控制

    就在运行时支持同一服务的多个版本化部署以及消费者如何使用不同版本而言 适应基于微服务的架构中的版本控制的最佳实践是什么 1 如果我们使用基于路由的版本控制作为提到的方法之一here http niels nu blog 2016 micro
  • 什么算作失败?

    假设我有一个伪 C 程序 For i 0 to 10 x a 2 x 5 next 30 FLOPS 的 FLOP 数量是 1 x 1 x 5 1 2 x 5 10 loop 吗 我很难理解什么是失败 请注意 指示我从何处获取 操作 计数
  • 在事务结束时发送事件

    我有一个服务对象的接口 如下所示 为简洁起见进行了简化 public interface ItemService public Item getItemById String itemId int version public void c
  • 哪种语言(在 JVM 上运行)最适合创建 DSL?

    我们需要创建复杂的固定长度和可变长度字符串 这些字符串可能代表客户资料 订单等 你们建议使用哪种基于 JVM 的编程语言 想法是让最终用户使用此 DSL 创建字符串 所以我正在寻找验证 代码完成等 Groovy http docs code
  • 有人有使用私有 Launchpad 实例的经验吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人已经在自己的服务器上安装并运行启动板了吗 我想要建议 因为我在网上找不到任何建议 此外 官方团队还对拥有自己的启动板发表了可怕的言论 他们还
  • Spring Boot - 微服务之间如何通信?

    我目前正在开发一个 Spring Boot 微服务项目 我创建了服务 每个服务都单独运行 这样 我需要一些服务来与其他服务进行通信 我怎样才能做到这一点 我看到一些关于此的博客使用 Netflix Eureka 云服务器来实现这一点 有什么
  • 呈现模型与被动视图

    我想知道上述两种模式之间的区别 当您考虑到您需要在表示模型模式中同步代码并且该代码位于表示模型本身中时 那么我认为这些模式非常相似 两者都将事件委托给演示模型 演示者 演示模型和演示者命令域模型 并且也观察域模型 当发生更改时 它们都与视图
  • Web 服务版本控制策略的优缺点

    更新20100224 我真的不需要某些供应商网站上的一些蹩脚定义 我正在寻找的是实际实施以及实际实施这些东西的人们在日常 IT 业务周期中面临的挑战 更多内容如下 尚未制定 采用任何退休策略 显然需要制定一项策略 我对您如何制定该战略并将其
  • 在 C# 汇编版本中使用前导零是否合适?

    我正在为我的 dot net dll 设置程序集版本 汇编版本具有以下格式 主要版本 次要版本 内部版本号 修订版 我将 Verison 设置如下 200 1 1 0 现在我的问题是我是否需要在次要版本 内部版本号和修订号中保留前导零 20
  • nuget 规范依赖项,获取最新版本吗?

    In the nuspec 版本控制文档 http docs nuget org docs reference versioning I see 1 0 1 0 x 1 0 x 1 0 1 0 x lt 1 0 1 0 x 1 0 1 0
  • 在 Codeigniter 中使用/嵌入 Ember js

    我即将开始开发一个 Web 应用程序 使用 Ember js 作为前端技术 使用 Codeigniter 作为后端 我遇到的问题是如何在 codeigniter 中嵌入或使用 ember js 可以通过 Web 服务从 codeignite
  • 如何使用json传递opentracing数据

    我的 API 网关启动一个跟踪器和一个用于验证电子邮件的范围 然后它传递给user service用于验证 我想通过这个span详情至user service作为 json 对象并启动另一个span as a tracer start sp
  • 就MVC模式而言,Struts 2中使用的Action是什么?

    在Struts2中 控制器将请求分派给Action Action将其传递给后端逻辑 这可以看作是一个非常大的过程 model 处理请求 JSP代表视图 Struts2中如何定义Action 肯定是not一个看法 是控制器还是模型 Strut
  • 断路器和隔板式有什么区别?

    在微服务开发过程中 我们可以在Spring Boot中同时使用两者吗 这些都是从根本上不同的图案 The 断路器模式在消费者上实现 以避免压垮可能难以处理呼叫的服务 可以找到 Spring 中的示例实现here http www vinsg
  • List、IList、IEnumerable、IQueryable、ICollection,哪个返回类型最灵活?

    我之前已经在这里看到过这个问题 但我不满意我理解的完整后果 问题是使用 linq to sql 返回的数据层应该使用什么返回类型以获得最大的灵活性和查询能力 这是我读过 发现的 IEnumerable 是有限的 只允许向前读操作 IEnum
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • org.springframework.security.oauth2.common.exceptions.InvalidGrantException:凭据错误

    我正在开发Spring Boot 授权服务器 OAuth 资源服务器 在这个例子中 我可以通过邮递员轻松查询spring microservices oauth 服务器并获取受保护的数据 我创建了客户端来访问邮递员正在执行的数据 但我遇到了
  • 使用 LINQ to SQL 的 .NET 架构的最佳设计实践(DAL 必要吗?我们真的可以使用 POCO吗?要采用的设计模式吗?)

    我避免在 net arch n 层架构上编写看起来像是另一个线程的内容 但请耐心等待 希望我和其他人一样 在选择用于企业应用程序的架构时 考虑到当今的趋势和新兴技术 仍然没有 100 满意或不清楚应采取的最佳方法 我想我正在寻求大众社区对方
  • 定时任务应该放在哪一层?

    我正在尝试使用分层架构来实现 DDD 应用程序 我有 基础设施层 实现应用程序的技术特定部分的层 领域层 包含领域模型的层 应用层 包含与领域模型交互的干扰的层 接口层 从外部接收事件的层 经典的 3 层 基础设施 架构非常清晰 但我的应用

随机推荐

  • ADT eclipse xml 布局文本编辑器 - 在文件关闭并重新打开之前经常损坏[重复]

    这个问题在这里已经有答案了 可能的重复 移动和消失的代码行 Eclipse 的 XML 编辑器出现问题 https stackoverflow com questions 10030727 moving and vanishing line
  • 使用 big.matrix 对象计算欧几里德距离矩阵

    我有一个类对象big matrix in R有尺寸778844 x 2 这些值都是整数 公里 我的目标是使用以下公式计算欧几里德距离矩阵big matrix并因此得到一个类的对象big matrix 我想知道是否有最佳方法可以做到这一点 我
  • Scrum 燃尽模式 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我所在的团队由 10 人组成 负责处理大型遗留代码库 但产品负责人不太理想 我们的积压工作状况非常糟糕 大型史诗经常破坏我们的冲刺 该团队
  • 如何在 Android 上以编程方式设置进度条的样式

    我在 style xml 中有 ProgressBar 样式 当我创建布局时 放置 ProgressBar 并设置样式 例如 style style ProgressBarStyle 将布局设置为对话框 一切都很好 其他方式以编程方式创建对
  • 安装 PCRE 时出错

    我正在尝试在我的 Ubuntu 11 10 服务器上安装 PCRE 当我运行 make 命令时 我得到一个非常长的输出 它总是以这个错误结束 libtool link cd libs rm f libpcreposix la ln s li
  • Join 中的用例声明

    大家好 我想使用此查询在连接中使用 case 语句 但出现错误 Select CONVERT VARCHAR 10 SII SIDATE 103 DATE SII SALEID SII ItemName SI TenancyID FROM
  • 在 Mongoose 中使用 AND 组合两个 OR 查询

    我想在 Mongoose 中使用 AND 组合两个 OR 查询 就像这个 SQL 语句一样 SELECT FROM WHERE a 1 OR b 1 AND c 1 OR d 1 我在 NodeJS 模块中尝试了此操作 该模块仅从主应用程序
  • 在 SQL 中比较图像

    与数据库中的图像进行比较的最佳方法是什么 我尝试比较它们 Image 是 Image 类型 Select from Photos where Photo Image 但收到错误 数据类型图像和图像在等于运算符中不兼容 由于图像数据类型是二进
  • 在 Twitter Fabric 中使用自定义登录按钮?

    我一直在尝试使用普通按钮来使用 twitter sdk 执行身份验证过程 但它似乎不起作用 有人尝试过类似的事情吗 我已经正确设置了 API 密钥等 登录过程正确执行 但回调部分似乎没有被调用 我的日志都没有被执行 成功或失败部分都没有 T
  • 具有多个逗号分隔值的返回语句[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 语法 逗号是什么意思 https stackoverflow com questions 3561043 javascript syntax what comma means 这
  • 使用jsPDF在服务器端保存pdf

    我有一个应用程序 可以生成一个 HTML 页面 其中包含用户可以编辑的数据 最后我用 jsPDF 生成了一个 pdf 文件 有什么方法可以将生成的 pdf 保存在服务器端数据库中吗 我正在使用 PrimeFaces 提前致谢 为其他用户更新
  • 如何强制 Typescript 中的所有变量都声明类型

    据我所知 当你在Typescript中声明变量时 你可以选择是否为变量指定类型 如果未指定类型 则使用默认的 any 类型 有没有办法强制所有变量都声明类型 即使它可能是 任何 例如 当未指定类型时 我希望出现编译器错误 这样一来 程序员将
  • 如何使 Django slugify 与 Unicode 字符串正常工作?

    我能做什么来预防slugify过滤器去除非 ASCII 字母数字字符 我使用的是 Django 1 0 2 编程网 http cnprog com有问题的网址中有中文字符 所以我查看了他们的代码 他们没有使用slugify在模板中 相反 他
  • Ace 代码编辑器动态设置语言 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试通过下拉菜单来选择语言来实现 Ace 代码编辑器 我的下拉菜单有一个模式 ID 我已经让编辑器正常工作 但我无法像我希望
  • JNI 和 Java:ant 调用 make 还是 make 调用 ant?

    我即将第一次进入 JNI Java 本机接口 的世界 以提供从平台特定的 C C 代码到 Java 的文件系统更改通知 除非有人推荐一些我错过的出色的图书馆来做这件事 作为 JNI 的新手 我已经设法找到了很多关于 JNI 接口方面和库生成
  • 避免从存储过程返回结果集

    假设我有一些返回结果集的存储过程 并且我无法更改它 create procedure test procedure as begin select 1 end 我知道我可以将结果集插入表中 因此它将对调用代码隐藏 declare t tab
  • Worklight 在线 + 离线身份验证

    我正在尝试通过 Worklight 实现以下目标 我的应用程序有两组功能 仅当应用程序连接到服务器并且用户经过身份验证时才能访问一组功能 另一组功能可以离线访问 但它们需要来自加密 JSONStore 的数据 我在客户端设备上有一个 JSO
  • 距离矩阵的并行构造

    我对大量多维向量进行层次凝聚聚类 我注意到最大的瓶颈是距离矩阵的构造 此任务的简单实现如下 此处使用 Python v an array N d where rows are the observations and columns the
  • 运行 Jest 时 NextJS 中未定义环境变量

    我设置了一个简单的 NextJS 项目 但在让 Jest 识别我的环境变量时遇到问题 我已按照以下说明进行操作https nextjs org docs basic features environment variables test e
  • 微服务版本控制

    就在运行时支持同一服务的多个版本化部署以及消费者如何使用不同版本而言 适应基于微服务的架构中的版本控制的最佳实践是什么 1 如果我们使用基于路由的版本控制作为提到的方法之一here http niels nu blog 2016 micro