如何跟踪程序集的多个版本?
Posted
技术标签:
【中文标题】如何跟踪程序集的多个版本?【英文标题】:How to keep track of multiple versions of assemblies? 【发布时间】:2017-12-17 13:15:58 【问题描述】:我们正在将微服务部署到 Azure Service Fabric。
我们如何跟踪服务的多个版本?
我们将如何在生产中允许服务的多个版本:
-
向消费者发放令牌
该令牌将在标头中发送到微服务
网关将接收请求并重定向到与标头中的令牌对应的微服务版本
换句话说,多个消费者将能够访问一个端点:…./api/accounts(12343)
,但将根据他们的标头令牌被路由到不同版本的微服务。
我们是否为每个版本的微服务创建单独的 TFS 分支?我们是否只是创建一个 nuget 包存储库?
我们如何跟踪服务的多个版本?
我们为什么要跟踪多个版本?
-
也许我们可能想要恢复到旧版本。
-
也许我们需要在客户的特定版本中实施修复。
也许我们需要不同版本的服务,因为我们发现与不同服务存在紧密耦合。
【问题讨论】:
如何/应该在运行时对服务进行版本控制以及如何选择在源代码控制中对它们进行版本控制是完全正交的问题。与前者相比,后者几乎无趣。您现在如何跟踪软件的不同版本,为什么 Azure 服务在这方面会有任何不同? 这是一个全新的实现。我们正在从单体架构转换,在生产环境中只有 1 个版本的代码 是的,但即使是您的单体架构也已通过版本控制策略检查到源代码控制中,对吗?如果没有,请选择任何有关如何在 TFS 中跟踪版本的文章(可以通过标签完成,可以通过分支完成)并实现它。没有什么特定于微服务的。只要您能够检查软件的 N - 1 版本并进行构建,就可以了。 【参考方案1】:我认为尝试跟踪不同版本的微服务最终会变得非常困难并且容易出错。
我建议您修改方法并以不同的方式处理您的具体问题。可能通过 Web api 公开所有微服务,并对控制器进行版本控制。
在我的微服务实现中,我不允许微服务相互通信。相反,我使用服务总线队列和主题来完成跨服务通信。通过这种方式,您无需确保系统不会过度耦合的维护和规划开销,实际上,在我看来,通过做您正在做的事情,您正在创建一个整体。微服务应该被完全封装,并根据给定的输入发挥作用。电子邮件通知服务不应调用用户服务来获取额外的用户数据来制作自定义电子邮件。应该根据调用通知的任何要求给予它,或者它应该通过订阅服务总线队列/主题来存储该元数据。您会发现您在整个系统中存储了重复数据,但这可以实现解耦模式。
我认为您可以采取一些措施来缓解您的问题,即为微服务中的每个公共功能创建单元测试,并在部署到生产环境之前利用测试环境进行测试。如果您确实在生产中发现问题,您只需回滚服务或修复它。
以下是我为所有方法编写的测试类型:
示例函数:AddOrUpdateUser
测试:添加作品 测试:更新工作 测试:如果必填字段为空,则函数失败 测试:如果用户名短于 X,则函数失败 等等。
执行此操作需要时间,但根据我的经验,我在生产中遇到的错误非常少,而且我的问题很小。
确实,应该在每个应用程序中进行这样的测试,但是在单体应用中进行测试要困难得多。使用微服务可以轻松获得超高的功能可靠性。
【讨论】:
以上是关于如何跟踪程序集的多个版本?的主要内容,如果未能解决你的问题,请参考以下文章