11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Application Load Balancer 通过加权目标组简化部署

  • 2019-11-27
  • 本文字数:3673 字

    阅读完需:约 12 分钟

Application Load Balancer 通过加权目标组简化部署

云计算的优势之一,就是可以通过编程的方式创建基础设施并在不再需要时拆除。这样彻底改变了开发人员部署应用程序的方式。当开发人员在本地部署应用程序时,他们必需为新版本的应用程序重复使用现有的基础设施。在云中,开发人员为新版本的应用程序创建新的基础设施。他们会保持旧版本并行运行,直到将旧版本拆除为止。这种方法称为蓝/绿部署。借助这种方法,可以在应用程序的两个版本之间逐渐切换流量,监控新版本的业务和运营指标,以及在发生问题时将流量切换回旧版本。


在蓝/绿部署方法方面,AWS 客户目前使用两种策略。第一种策略是创建一个第二应用程序堆栈,包括一个第二负载均衡器。开发人员使用某种加权路由方法(例如 DNS)将部分流量导向各个堆栈。第二种策略是替换负载均衡器后的基础设施。这两种策略都会导致在版本之间切换流量时的延迟,具体取决于 DNS TTL 和客户端计算机的缓存。这可能会导致运行额外的负载均衡器,产生额外的费用,并且额外的负载均衡器预热也会产生延迟。


目标组会告诉负载均衡器流量的导向目标:EC2 实例、固定 IP 地址或者 AWS Lambda 函数等等。在创建负载均衡器时,您会创建一个或多个侦听器,并且会配置侦听器规则以将流量导向到一个目标组。


今天,我们宣布推出适用于 Application Load Balancer 的加权目标组。借助此功能,开发人员可以控制如何在应用程序的不同版本之间分配流量。


多重加权目标组


您现在可以将多个目标组添加到侦听器规则转发操作并指定各个目标组的权重。例如,假设您定义的规则拥有两个目标组,权重分别为 8 和 2,则负载均衡器会将 80% 的流量路由到第一个目标组,将剩下 20% 的流量路由到第二个目标组。


您可以立即通过此 CDK 代码来试用加权目标组。它会用 EC2 实例创建两个 Auto Scaling 组,并在其前面放置一个 Elastic Load Balancer。它还会在实例上部署一个示例 Web 应用程序。Web 应用程序的蓝色版本将部署在蓝色实例中,Web 应用程序的绿色版本将部署在绿色实例中。基础设施的架构如下所示:



您可以 git cloneCDK 项目并键入 npm run build && cdk bootstrap && cdk deploy 以部署上述基础设施。为演示如何配置负载均衡器,此 CDK 代码会创建 Auto Scaling 组、负载均衡器和通用目标组。下面我们手动完成配置并创建两个加权目标组,应用程序的每个版本一个目标组。


首先,我将导航至 EC2 控制台,选择目标组,然后单击创建目标组按钮。我会创建一个叫做 green 的目标组。请务必选择正确的 Amazon Virtual Private Cloud(此 CDK 脚本创建的 VPC 名称以“AlbWtgStack...”开头),然后单击创建



我重复上述操作创建了一个 blue 目标组。我的目标组控制台如下所示:



然后我将两个 Auto Scaling 组更改为指向 bluegreen 目标组。在 AWS 管理控制台中,我单击 Auto Scaling 组,选择其中的一个 Auto Scaling 组,我会注意它的名称(包含“green”或“blue”),然后依次单击操作编辑



编辑详细信息屏幕中,我移除此 CDK 脚本创建的目标组,然后添加名称与 Auto Scaling 组(greenblue)匹配的目标组。我单击屏幕上的保存,然后为另一个 Auto Scaling 组重复此操作。



然后我更改侦听器规则以添加这两个目标组,每个目标组都有自己的权重。在 EC2 控制台中,我选择左侧的负载均衡器,然后搜索此 CDK 代码创建的负载均衡器(名称以“alb”开头)。我单击侦听器,然后单击查看/编辑规则



其中有一个由 CDK 脚本创建的规则。我会单击顶部的编辑图标,然后再次单击此规则左侧的编辑图标,从而修改该规则。我会单击回收站图标删除转发至规则。



然后我会单击“+ 添加操作”以添加两个转发至规则,每个目标组(bluegreen)一个,权重均为 50。



最后,我会单击右侧的更新。现在我可以测试加权负载均衡。


我将浏览器指向负载均衡器的 DNS 名称。我会看到此 Web 应用程序的绿色或蓝色版本。我强制让浏览器重新加载页面,我观察到负载均衡器正在执行操作,将 50% 的请求发送到绿色应用程序,将 50% 的请求发送到蓝色应用程序。一些浏览器可能会缓存页面,不会反映我定义的权重。Safari 和 Chrome 在此方面不如 Firefox 激进。



这时,在 AWS 管理控制台中,我将权重更改为 80 和 20,然后继续刷新浏览器。我观察到平均 10 次有 8 次显示的是蓝色版本。



我还可以从 ALB ModifyListener APIAWS 命令行界面 (CLI) 或通过 AWS CloudFormation 调整权重。


例如,我使用 AWS 命令行界面 (CLI),与以下类似:


Bash


aws elbv2 modify-listener    \     --listener-arn "<listener arn>" \     --default-actions        \        '[{          "Type": "forward",          "Order": 1,          "ForwardConfig": {             "TargetGroups": [               { "TargetGroupArn": "<target group 1 arn>",                 "Weight": 80 },               { "TargetGroupArn": "<target group 2 arn>",                 "Weight": 20 },             ]          }         }]'
复制代码


或者使用 AWS CloudFormation,JSON 节选如下:


Json


"ListenerRule1": {      "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",      "Properties": {        "Actions": [{          "Type": "forward",          "ForwardConfig": {            "TargetGroups": [{              "TargetGroupArn": { "Ref": "TargetGroup1" },              "Weight": 1            }, {              "TargetGroupArn": { "Ref": "TargetGroup2" },              "Weight": 1            }]          }        }],        "Conditions": [{          "Field": "path-pattern",          "Values": ["foo"]        }],        "ListenerArn": { "Ref": "Listener" },        "Priority": 1      }    }
复制代码


如果您使用外部服务或工具来管理负载均衡器,您可能需要等待相关提供商更新他们的 API 以支持 Application Load Balancer 上的加权路由配置。


其他用途


除蓝/绿部署外,AWS 客户还可以将加权目标组用于另外两个使用案例:云迁移或在不同的 AWS 计算资源之间迁移。


当您将本地应用程序迁移到云中时,您可能需要逐步推进,在一段时期内需要在本地数据中心和云中同时运行应用程序。当您最终验证云端版的性能符合要求时,您可以彻底弃用本地应用程序。


同样,例如当您将工作负载从 EC2 实例迁移到在 AWS Fargate 上运行的 Docker 容器时,您可以轻松在新目标组上建立新的应用程序堆栈,然后通过更改目标组的权重逐步迁移流量,而不会给最终用户带来停机的问题。由于 Application Load Balancer 支持将 EC2、容器(Amazon ECSAmazon Elastic Kubernetes ServiceAWS Fargate)、AWS Lambda 函数和 IP 地址等多种 AWS 资源作为目标,您可以选择在任意这些资源之间迁移流量。


目标组粘性


有时,您会希望客户端在指定的时间段内使用相同版本的应用程序,或者您会希望当前使用此应用程序的客户端不会在其会话中切换到新部署的 (green) 版本。对于这些使用案例,我们还突出了目标组粘性功能。启用目标组粘性功能后,在指定时间段内来自一个客户端的请求将全部发送到同一目标组。在该时间段到期时,请求将会根据权重分配到目标组。ALB 会通过 Cookie 来保持目标组粘性。


请注意,目标组粘性与已经存在的目标粘性不同(也称为粘性会话)。粘性会话可以确保来自一个客户端的请求始终固定路由到一个目标组中的特定目标。目标组粘性仅确保请求会发送到特定的目标组。粘性会话可以与目标组粘性结合使用。


要从 AWS 命令行界面 (CLI) 添加或配置目标组粘性,您需要使用 TargetGroupStickinessConfig 参数,与以下类似:


Bash


aws elbv2 modify-listener \    --listener-arn "<listener arn" \    --default-actions \    '[{       "Type": "forward",       "Order": 1,       "ForwardConfig": {          "TargetGroups": [             {"TargetGroupArn": "<target group 1 arn>", "Weight": 20}, \             {"TargetGroupArn": "<target group 2 arn>", "Weight": 80}, \          ],          "TargetGroupStickinessConfig": {             "Enabled": true,             "DurationSeconds": 2000          }       }   }]'
复制代码


可用性


Application Load Balancer 支持每个侦听器规则 5 个目标组,每个目标组都可有自己的权重。在不超过 API 阈值限制的前提下,权重调节的次数不受限制。实际流量权重的更新可能会有轻微的延迟。


加权目标组现已在所有 AWS 区域推出。在 Application Load Balancer 上使用加权目标组不会产生额外费用。


— seb


后记:请勿忘记删除为此博文创建的示例基础设施并停止产生 AWS 费用。由于我们手动修改了 CDK 创建的基础设施,使用简单的 cdk destroy 命令即可返回。请连接到 AWS CloudFormation 控制台,然后删除 AlbWtgStack。您还需要在 EC2 控制台中手动删除 bluegreen 目标组。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-application-load-balancer-simplifies-deployment-with-weighted-target-groups/


2019-11-27 08:00378

评论

发布
暂无评论
发现更多内容

Go语言创造者回顾:是什么让GoLang如此受欢迎?

三石

go语言

Flink ML API,为实时机器学习设计的算法接口与迭代引擎

Apache Flink

大数据 flink 编程 流计算 实时计算

详解大集群通信建模理论公式

华为云开发者联盟

数据库 华为云 查询

做多线程并发扩展,这两点你需要关注

华为云开发者联盟

spring 多线程 高并发 开发 华为云

千万级高并发下看天翼云如何为“健康码”突破技术瓶颈

天翼云开发者社区

作为软件工程师,给年轻时的自己的建议(下)

禅道项目管理

工程师 程序员进阶 程序员‘

极客星球 | 开发者服务合规检测护航企业数字生态建设

MobTech袤博科技

信息安全 开发者服务 安全合规检测 SDK检测 数据健康

KusionStack 开源有感|历时两年,打破“隔行如隔山”困境

SOFAStack

开源 编程语言 语言 #Github 运维‘

中国企业数字化转型的十大趋势

小炮

天翼云对象存储ZOS高可用的关键技术揭秘

天翼云开发者社区

天翼云践行“双碳”目标 “东数西算”绘画绿色发展新蓝图

天翼云开发者社区

Web3生态龙头AQUANEE,即将登录Gate等平台

股市老人

昇腾AI的蝴蝶效应,从智能制造开始

脑极体

TICS端到端实践:企业积分查询作业开发

华为云开发者联盟

云计算 华为云 安全计算

MySql函数

秋名山码民

6月月更

四川21市州国家反诈中心APP覆盖情况,筑牢全民反诈“防护墙”

易观分析

反诈APP

OKALEIDO IDO前瞻:基于NFT交易聚合器,构建面向艺术家的Web3商业生态

EOSdreamer111

Streaming Data Warehouse 存储:需求与架构

Apache Flink

大数据 flink 编程 流计算 实时计算

SoFlu 软件机器人:辅助企业落地 DevOps 的自动化工具

SoFlu软件机器人

手把手教你实战开发黑白棋实时对战游戏

华为云开发者联盟

云计算 软件开发 游戏开发 华为云

一文读懂天翼云自研TeleDB 数据库五大关键特性

天翼云开发者社区

社区动态|SelectDB 联合传智教育推出免费 Apache Doris 中文视频教程

SelectDB

Doris 开源社区 Apaache Doris 开源治理

架构实战营 - 第 6 期 模块八课后作业

乐邦

「架构实战营」

为什么我们总是说不清「需求是什么」

LigaAI

产品经理 需求 需求分析 产品设计与思考

淘宝Native研发模式的演进与思考 | DX研发模式

阿里巴巴终端技术

ide 技术选型 native 客户端 动态化

OKALEIDO的NFT聚合交易,打造面向艺术家的Web3商业生态

股市老人

OKALEIDO的NFT聚合交易,打造面向艺术家的Web3商业生态

威廉META

知识图谱看高考,高考加油!高考学子金榜题名

情报分析师

数据分析 数据可视化 高考 知识图谱

Yarn的RM功能介绍

五分钟学大数据

6月月更

见微知著,细节上雕花:SVG生成矢量格式网站图标(Favicon)探究

刘悦的技术博客

前端 favicon SVG svg图 Icon Font

MASA Auth - 从用户的角度看整体设计

MASA技术团队

Application Load Balancer 通过加权目标组简化部署_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章