【问题标题】:How to deploy code changes across microservices?如何跨微服务部署代码更改?
【发布时间】:2019-08-23 12:41:36
【问题描述】:

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

这是在生产环境中遵循的理想策略还是有特定的模式可以遵循? 博客上的答案似乎讨论了微服务模式,但没有人谈论某些实例具有较新代码版本而其他实例尚未更新的情况。

【问题讨论】:

    标签: spring cloud microservices


    【解决方案1】:

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

    【讨论】:

    • 但是在那种情况下,一些实例将运行以前版本的代码。这不会导致应用程序的间歇性行为吗?
    • 对不起,我的回答澄清了一点。
    • 好的,将负载均衡器指向一组固定的 IP 地址似乎是一个不错的策略。是否有任何工具可以在运行时执行此操作?我们在 Spring Cloud 中使用 netflix 功能区负载均衡器。
    • 对不起,我不熟悉 Ribbon 的细节。您可以在谷歌上搜索金丝雀或蓝/绿部署,这是该技术的正式名称。 This 可能是一个不错的起点。如果我帮助了你,如果你能接受答案,我将不胜感激。
    • 谢谢,我们正在使用 eureka rest 端点注销实例并再次注册实例。解决了问题!!
    【解决方案2】:

    在理想的生产世界中;您的原子需求不存在...通常我们在服务器上假设 10% 部署新代码..看看它在异常、延迟数方面的表现如何..如果一切顺利,我们会继续增加这个百分比..

    但我完全理解某些版本(例如一些数据库更改,尽管甚至有解决方案,但那是另一个假设)或某些情况下我们不能运行多个代码库。任何部署都要问的第一个问题是“允许的停机时间”。

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

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 2020-07-03
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 2020-04-10
      相关资源
      最近更新 更多