【问题标题】:AWS WebApp Blue / Green Deployment Without Breaking Sessions不中断会话的 AWS WebApp 蓝/绿部署
【发布时间】:2019-03-16 22:10:16
【问题描述】:

我的用例: 我有一个由 1 个 EC2 实例前面的弹性负载均衡器提供服务的 Web 应用程序。 该架构旨在模拟蓝/绿部署流程,这意味着当我需要更新代码并切换 ELB 指向的实例时,我将打开第二个实例。

假设 Instance-A 具有我的应用程序的当前版本,我的 ELB 正在将流量路由到该实例,因为它是唯一可用的实例。我想将更新推送到我的应用程序,因此我在 Instance-B 上部署了我的应用程序的新版本(打开实例 B 并部署新版本的代码)。同时,任何访问我的应用程序的用户仍将被路由到 Instance-A 并创建一个会话,直到我进行切换。

一旦 Instance-B 部署并可以使用较新的代码,我如何确保 ELB 仅在 Instance-B新流量 /em>,并在 instanceA 上保留旧流量(以前的用户及其会话),直到我从负载平衡器中取消注册后者?

希望这是有道理的,我知道这种架构设计不是蓝/绿部署的正确实现。但由于我的应用程序的大小和预算,我想限制我使用的实例数量。

感谢您的帮助。

【问题讨论】:

    标签: amazon-ec2 session-cookies amazon-elb blue-green-deployment session-affinity


    【解决方案1】:

    好的,如果您使用的是经典 ELB,则需要为 ELB 创建和粘性策略,您可以在此处找到详细说明 https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html

    如果您使用 ALB 或应用程序负载均衡器几乎相同但在粘性策略中超过目标组https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#sticky-sessions

    如果你想改进你的蓝/绿部署策略,最好使用Route53进行切换,成本非常低

    希望对你有帮助

    【讨论】:

    • 感谢@douglas 的回复,但它不包括我的用例。我更新了我的问题,因为它没有得到很好的描述。
    • 好的,我知道了,使用应用程序负载均衡器的粘性会话策略,您可以使用属性“stickiness.enabled 和stickiness.lb_cookie”设置一个时间以保持会话具有相同的目标。 duration_seconds" 但我担心这不能保证超过 7 天,对于您的用例,如果您需要超过 7 天,最好的方法是使用 Netflix Zuul 等其他解决方案并设置 ZuulFilter 规则 github.com/Netflix/zuul/wiki/Writing-Filters
    • 但恐怕场景太复杂了,你需要一种方法来识别用户会话并在应用程序级别有逻辑来做到这一点
    猜你喜欢
    • 2020-07-23
    • 2019-05-20
    • 2021-09-16
    • 2019-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2017-07-10
    相关资源
    最近更新 更多