我们正在将微服务部署到天蓝色的服务架构。

我们如何跟踪服务的多个版本?

我们如何在生产中允许多个版本的服务:


消费者被发行令牌
该令牌将被发送到标头中的微服务
网关将接收请求,并重定向到与标头中的令牌相对应的微服务版本


换句话说,多个使用者将能够命中一个端点:…./api/accounts(12343),但将根据其标头令牌被路由到微服务的不同版本。

我们是否为每个微服务版本创建单独的TFS分支?我们是否只是创建一个nuget软件包存储库?

我们如何跟踪服务的多个版本?

为什么我们要跟踪多个版本?


也许我们可能想恢复到旧版本。


也许我们需要针对特定​​版本的客户端实施修复程序。
也许我们需要一个不同版本的服务,因为我们发现与另一个服务紧密耦合。

最佳答案

我认为,试图跟踪微服务的不同版本最终会变得非常困难且容易出错。

我建议您修改方法,并以不同的方式处理您的特定问题。可能通过Web API公开所有微服务,并对控制器进行版本控制。

在我的微服务实现中,我不允许微服务相互通信。相反,我使用服务总线队列和主题来完成跨服务通信。这样,您就没有维护和计划上的开销来确保您的系统不会太耦合,实际上,按照我的想法做,就是在创建整体。一个微服务应该被完全封装,并在其输入下起作用。电子邮件通知服务不应调用用户服务来获取其他用户数据以制作自定义电子邮件。应该或者根据请求调用通知的方式来提供它,或者应该通过订阅服务总线队列/主题来存储该元数据。您会发现您正在整个系统中存储重复数据,但这可以实现分离的模式。

我认为您可以采取的缓解问题的措施是为微服务中的每个公共功能创建单元测试,并在部署到生产之前利用测试环境进行测试。如果确实在生产中发现问题,则只需回滚服务或对其进行修复。

这是我为所有方法编写的测试类型:

函数示例:AddOrUpdateUser

测试:添加作品
测试:更新工作
测试:如果必填字段为空,则函数失败
测试:如果用户名短于X,函数将失败
等等..

这样做需要时间,但是根据我的经验,我在生产中几乎没有错误,而我所犯的错误很小。

确实,这样的测试应该在每个应用程序中进行,但是要在整体中进行则要困难得多。使用微服务,您可以轻松获得超高性能的可靠性。

关于c# - 如何跟踪程序集的多个版本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45069049/

10-12 12:37
查看更多