HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

使用 AWS Application Load Balancer 实现基于主机名的路由分发

  • 2019-11-15
  • 本文字数:2942 字

    阅读完需:约 10 分钟

使用AWS Application Load Balancer实现基于主机名的路由分发

负载均衡器在应用架构设计中是重要的组件,负责接收来自客户端的流量,将流量按一定的算法转发给后端的一组实例,并将后端实例的响应再返回给客户端。AWS 提供一款托管的负载均衡服务, Elastic Load Balancer(简称 ELB),ELB 除了能够做负载均衡分发流量之外,还能对后端的实例健康检查,并将流量仅转发给通过健康检查的实例,同时 ELB 还能与自动扩展组(Auto Scaling Group)以及监控服务(CloudWatch)配合,设置根据后端实例 CPU 使用率的高低,流量大小,处理时间长短等指标,自动完成添加或缩减实例数量。


ELB 又分两种,Classic ELB 和 Application Load Balancer(简称 ALB),ELB 的一个重要组件是侦听器,前者支持 4 层和 7 层的协议和端口(TCP,SSL,HTTP,HTTPS),对后端实例按轮询(TCP 协议)或者最少未完成请求数(HTTP 协议)的算法对后端实例进行流量转发。


ALB 是应用层负载均衡器,支持 HTTP/HTTPS 的协议,与 Classic ELB 不同的是,ALB 支持基于请求路径的分发,即根据 HTTP 标头的请求 URL 路径的不同,分发给后端不同的目标组(Target Group)。目标组是一个或多个目标(这里的“目标”可以是 EC2 实例)的集合,通常一组目标运行相同的应用或服务,一个目标可以注册到一个或多个目标组中。在目标组中可以配置运行状况检查,实例监控,等待连接耗尽及粘性会话等等。ALB 中的规则决定了如何将流量路由到后端不同的目标组,每条规则对应一个目标组、条件及优先级,一旦匹配规则,则执行相应的流量路由,比如将请求 URL 中路径是/api 的请求路由给运行 api 服务的目标组,将请求 URL 中路径是/mobile 的访问路由给 mobile 的目标组。


两者的转发模型可见下图。



过去 ALB 仅支持基于请求路径的流量分发,客户为了实现基于主机名的分发往往使用多组 Classic ELB 或 Classic ELB + Nginx 集群的方式,现在 ALB 提供了新功能,即可以基于主机名进行路由分发,详情请参考:


https://aws.amazon.com/cn/elasticloadbalancing/applicationloadbalancer/


接下来,我们将详细介绍如何使用 ALB 完成基于主机名的流量分发。


本例中我们将创建以下资源:


(1)1 个 ALB;


(2)5 个目标组,分别为 api-prod,api-sandbox,mobile-prod,mobile-sandbox,default;


(3)每个目标组注册不同的 EC2 实例,其中 api-prod 目标组将注册两个 EC2 实例;


(4)一个侦听器;


(5)创建基于主机名和路径的分发规则,实现流量的分发。


1、创建目标组



2、输入目标组名称,选择协议(HTTP/HTTPS)及端口,ALB 所在的 VPC,配置运行状况检查(协议,路径,阈值等)。此处我们选择了默认 HTTP,路径/。



3、注册实例


目标组的重要实体是目标(比如说 EC2 实例),在此将实例注册到目标组下面,注意选中实例后点击”添加到已注册”,然后保存。此处我们选中了该目标组对应的实例 ALBDemo_api_prod,ALBDemo_api_prod_2 两个实例。您可以向一个或多个目标组注册多个目标实例以便满足需求。只要注册过程完成且新注册的目标实例通过初始运行状况检查,负载均衡器就会开始将请求路由至此目标。同样,您也可以从目标组取消目标注册。



同理创建 api-sandbox,mobile-prod,mobile-sandbox,default 目标组,此处省略创建过程。


创建完成后,选中目标组,在目标页我们可以看见注册到该目标组的实例的状态,healthy 表示实例正常,另外该状态还有 unhealthy(实例未通过健康检查),initial(实例注册中),unused(无流量传入,该目标组未注册到 ALB)等。



4、创建负载均衡器


下面我们来创建 ALB



5、选择 ELB 类型


这里我们选择应用程序负载均衡器 ALB



6、配置负载均衡器


输入 ALB 名称,模式可选择该 ALB 面向 Internet 或是内部使用;配置侦听器协议,端口,根据需要可以配置多个侦听器,此处我们选择 HTTP/80;同时选择 ALB 部署在哪个可用区及子网,建议多可用区方式部署,同样将应用部署在多可用区,达到高可用的设计目标。



7、配置安全设置


如果侦听器配置了 HTTPS,需要配置证书。使用 HTTPS,ELB 可以完成与客户端的 SSL 安全连接的建立与 SSL 卸载,减轻后端服务器的压力。


如果从 ACM(AWS Certificate Manager)申请过证书,则可以直接选择该证书,也可以自己上传证书到 IAM 或者在此上传证书。由于此次我们仅配置了 HTTP 80 端口侦听器,此处将不配置证书。配置安全证书的截图如下:



8、配置安全组


安全组的概念及用法此处不做复述,我们可以为 ALB 配置安全组,仅允许指定的协议、端口及来源的流量进入 ALB



9、配置路由


这里可以选择”现有目标组”,选择我们前面的创建的 default 目标组。此处只能选择一个目标组,我们可以在创建完成后,对此 ALB 添加编辑规则的时候对应路由规则添加目标组。



10、注册目标



11、审核


创建完成后,可以在负载均衡器的控制台看到该 ALB 的相关描述与信息。



12、配置规则


选中该 ALB,在页面下方的侦听器下按端口选择“查看/编辑规则”。



13、添加/编辑规则


与之前不同的是,现在 ALB 提供了一个规则编辑器。进入规则编辑器后,我们看到的是一条默认规则,并看到目标组是我们前面创建过程中选择的 default 组。点击左上方”+”,可以添加规则。



目前路由规则支持三种方式:


a.基于 URL 路径;


b.基于主机名(New Feature);


c.基于主机名+路径(New Feature);



点击 &,可以实现基于主机名+路径的规则;



添加了 4 条规则,将不同主机及路径的流量分发到不同的目标组,如下:


col 1col 2col 3
规则规则(if)目标组(then)
1路径/sandbox/* &主机名为api.shishuai.techapi-sandbox
2主机名为api.shishuai.techapi-prod
3路径/sandbox/* &主机名为mobile.shishuai.techmobile-sandbox
4主机名为mobile.shishuai.techmobile-prod



通过左上角的添加、编辑、排序、删除可以对规则进行相应的修改与排序,需要注意的是,流量路由匹配规则的时候按规则的顺序匹配,并按最先匹配到的规则执行相应的路由。最多可以添加 75 条规则。每条规则在主机名处支持最多 3 个通配符(”*”或者”?”)。



最后规则配置完成,我们检查下规则是否生效。使用 Route53 DNS 解析服务,将相应的域名(本例中为 api.shishuai.tech 和 mobile.shishuai.tech)CNAME 到该 ALB 的域名(本例中为 ALBDemo-2043343612.us-west-2.elb.amazonaws.com,可在选中该 ALB,在描述页中看到该 DNS 地址)。


本例中每个 EC2 有一个简单的页面,表明自己主机名,以及 instance-id,以此区分是否按规则路由到相应的 EC2。


http://api.shishuai.tech



在 api-prod 目标组,我们注册了两台机器,刷新几次会出现另一台 EC2 的页面。



http://api.shishuai.tech/sandbox/



http://mobile.shishuai.tech



http://mobile.shishuai.tech/sandbox/



综上所述,使用应用负载均衡器基于主机名/路径的流量分发特性,客户可以仅用一组应用负载均衡器就可实现将流量路由给多个后端服务,这可以大大简化客户的架构、减轻运维负担以及优化成本。


作者介绍



王世帅


AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内教育、医疗行业的应用和推广。在加入 AWS 之前曾在国航担任系统工程师,负责存储方案的架构设计,在企业私有云方面有丰富经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-alb-route-distribute/


2019-11-15 08:001115

评论

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

你值得拥有的IoT 物联网平台开发实用技巧(一)——数据价值类

阿里云AIoT

业务系统故障率居高不下:有哪些非常有效的治理大招?

TakinTalks稳定性社区

虎牙SRE谈可观测:如何做到比用户和老板更早发现业务异常?

TakinTalks稳定性社区

利用 ModelScope 社区开源模型,实现低资源场景下的零样本文本分类

阿里技术

深度学习 自然语言模型

2023年3月中国数据库排行榜:开源OTO揽获前三,传统达梦、GBase触机便发

墨天轮

数据库 opengauss TiDB oceanbase 国产数据库

跨平台开发成为移动应用程序开发趋势

没有用户名丶

Mac教程:如何开启任何来源选项

理理

Mac 苹果电脑 任何来源

真香!阿里最新出品Java面试核心讲(终极版),Github已星标50K

程序员小毕

Java 程序员 面试 后端 架构师

设备使用HTTPS协议接入IoT物联网平台——设备接入类

阿里云AIoT

国家中心城市手机银行发展洞察

易观分析

金融 经济 手机银行 城市

面面俱到!四面阿里拿offer后,才发现师哥给的面试笔记有多强大

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

Spring源码解析-Spring AOP

Java你猿哥

Java 源码 云原生 Spring Boot ssm

经验总结!朋友的阿里面经分享(内附题目+解析)

Java你猿哥

Java 校招 春招 阿里面经 Java八股文

2023年浸没液冷智算产业发展高峰论坛:OPPO发布两项白皮书

安第斯智能云

创新 OPPO 论坛 高新技术

订阅标识符与订阅选项--MQTT 5.0新特性

EMQ映云科技

物联网 IoT mqtt 订阅 企业号 3 月 PK 榜

CTO问我如何规避MyBatis使用过程中带来的全表更新风险

Java永远的神

Java 程序员 面试 后端 mybatis

如何在 macOS 中互换 Control 和 Command 键

理理

mac教程 Control键 Command 键

喜讯|百度入选“移动互联网APP产品安全漏洞治理”优秀案例

百度安全

使用抓包工具Wireshark分析IoT设备网络行为——设备管理运维类

阿里云AIoT

网络协议 物联网 网络性能优化

图片无损放大:Topaz Gigapixel AI 激活版

真大的脸盆

Mac Mac 软件 图片无损放大 图片编辑 图片放大

解决 Parallels Desktop 虚拟机不能连网的问题

理理

Parallels Desktop 虚拟机 PD虚拟机不能联网 PD常见问题

CleanMyMac4.20专业的mac清理软件

茶色酒

CleanMyMac4.20

K8S部署应用详解

tiandizhiguai

支付宝小程序-MQTT模拟器体验阿里云IoT开发——设备接入类

阿里云AIoT

物联网

中国流程挖掘迎来新“启点”,望繁信科技全面升级

ToB行业头条

Spring源码解析-Spring 事务

Java你猿哥

Java spring Spring Boot ssm spring 源码

跟清华大佬用18个要点带你一步步学习springboot2微服务项目实战

Java你猿哥

Spring Boot 面经 校招 春招 java

通过Flutter实现一个能在多端运行的扫雷游戏

编程的平行世界

flutter 前端 游戏 移动端 扫雷

国产操作系统应用开发的趋势与挑战

没有用户名丶

业务架构那点事(2)如何通过高层访谈获取企业战略信息?

涛哥 数字产品和业务架构

业务架构 访谈

使用AWS Application Load Balancer实现基于主机名的路由分发_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章