Spring 如何跨微服务部署代码更改?

Spring 如何跨微服务部署代码更改?,spring,cloud,microservices,Spring,Cloud,Microservices,我们通过eureka服务发现识别了10个相同的微服务实例,并通过网关将呼叫路由到它们。我们希望跨这10个实例部署代码更改,但代码更改应该是原子性的。这意味着在任何时候,两个实例都不会运行不同的代码。 简单的策略可以是关闭9个实例-->对它们进行部署更改-->启动-->关闭剩余的一个实例,在部署更改后,再次启动它 这是在生产环境中要遵循的理想策略,还是要遵循特定的模式? 博客上的答案似乎讨论了微服务模式,但没有一个提到某些实例有更新的代码版本,而其他实例还有待更新的情况 理想的策略是启动一些新实例

我们通过eureka服务发现识别了10个相同的微服务实例,并通过网关将呼叫路由到它们。我们希望跨这10个实例部署代码更改,但代码更改应该是原子性的。这意味着在任何时候,两个实例都不会运行不同的代码。 简单的策略可以是关闭9个实例-->对它们进行部署更改-->启动-->关闭剩余的一个实例,在部署更改后,再次启动它

这是在生产环境中要遵循的理想策略,还是要遵循特定的模式?
博客上的答案似乎讨论了微服务模式,但没有一个提到某些实例有更新的代码版本,而其他实例还有待更新的情况

理想的策略是启动一些新实例,并开始逐步平衡对它们的请求。负载平衡器可以进行IP地址固定,以便从特定时间点开始,IP地址只从新实例获得回复。

理想的策略是启动几个新实例,并开始逐步平衡对它们的请求。负载平衡器可以进行IP地址固定,以便从特定的时间点开始,IP地址只能从新实例获得回复。

在理想的生产环境中;你的原子需求不存在。。。通常情况下,我们在服务器上部署新代码的比例为10%。。看看它在异常、延迟数方面的表现。如果一切正常,我们会继续增加这个百分比

但我完全理解某些版本(例如一些DB更改,尽管有解决方案,但这是另一个假设),或者对于某些场景,我们不能运行多个代码库。任何部署都要问的第一个问题是“允许的停机时间”


让我们假设你需要最少的停机时间。。。然后解决方案是在另外10台服务器上部署u;测试一下。。一切正常后,将ELB指向新服务器。。请注意,这里将有几分钟的停机时间。因为我们有原子要求。

在理想的生产环境中;你的原子需求不存在。。。通常情况下,我们在服务器上部署新代码的比例为10%。。看看它在异常、延迟数方面的表现。如果一切正常,我们会继续增加这个百分比

但我完全理解某些版本(例如一些DB更改,尽管有解决方案,但这是另一个假设),或者对于某些场景,我们不能运行多个代码库。任何部署都要问的第一个问题是“允许的停机时间”


让我们假设你需要最少的停机时间。。。然后解决方案是在另外10台服务器上部署u;测试一下。。一切正常后,将ELB指向新服务器。。请注意,这里将有几分钟的停机时间。因为我们有原子需求。

但在这种情况下,一些实例将运行以前版本的代码。这不会导致应用程序的间歇性行为吗?对不起,我的回答澄清了一点。好的,将负载平衡器指向一组固定的ip地址似乎是一个不错的策略。是否有任何工具可以在运行时执行此操作?我们正在spring cloud中使用netflix ribbon负载平衡器。对不起,我不熟悉ribbon的详细信息。你可以在谷歌上搜索金丝雀或蓝/绿部署,这是这项技术的正式名称。也许是个好的开始。如果我帮助过您,如果您愿意接受答案,我将不胜感激。谢谢,我们正在使用eureka rest端点注销实例并再次注册实例。解决了这个问题!!但在这种情况下,有些实例将运行以前版本的代码。这不会导致应用程序的间歇性行为吗?对不起,我的回答澄清了一点。好的,将负载平衡器指向一组固定的ip地址似乎是一个不错的策略。是否有任何工具可以在运行时执行此操作?我们正在spring cloud中使用netflix ribbon负载平衡器。对不起,我不熟悉ribbon的详细信息。你可以在谷歌上搜索金丝雀或蓝/绿部署,这是这项技术的正式名称。也许是个好的开始。如果我帮助过您,如果您愿意接受答案,我将不胜感激。谢谢,我们正在使用eureka rest端点注销实例并再次注册实例。解决了这个问题!!