【阿里云ALB应用型负载均衡】功能体验 & 利用ALB进行Serverless与ECS分流

免费领取ALB,满足你的负载均衡需求:https://click.aliyun.com/m/1000370360/

 

 

 

Load Balance,负载均衡是一个大型网站永远绕不开的话题,相信略懂架构的人都了解负载均衡技术,他同时出现在服务器架构和网络架构之中,针对不同应用场景有软负载均衡和硬负载均衡产品。当单节点类型的站点无法满足业务时,我们就必须拓展服务器数量,由负载均衡提供前端访问能力,将访问流量分摊给后端服务器,而后端的服务器可横向拓展。

经典的负载均衡开源软件有Nginx/Tengine(七层,轻量,本身就是反代Web服务等)、Haproxy(四七层,高负载,会话持久、负载算法丰富等)、LVS(四层,基于IP+TCP),以上通常配合Keepalive等VRRP完成高可用负载均衡的架构。但需要多出几台服务器来做专用负载均衡的载体,在云上环境,若把负载均衡设计在服务器上,纯纯大怨种了。

因此,云上负载均衡云服务化就相当有优势了,阿里云负载均衡家族ALB\NLB\CLB针对性的提供了七层/四层/七+四三种负载均衡产品。而对于绝大多数互联网应用来说,ALB应用型就可以满足负载均衡的需求了。

一、ALB三种调度算法

负载均衡重要的特性之一就是后端调度算法,ALB应用型负载均衡这里可以看到支持三种算法:

1.加权轮询。经典负载均衡调度WRR,如Haproxy的static-rr、nginx的weight轮询。通过调整后端服务器的权重来分配请求流量,一般后端配置高的权重会设置高一点,而配置相同的云主机权重默认一致即可,均衡分配请求量。

2.加权最小连接数。寻找连接数最小的节点调度WLC,类似nginx的least_conn,自动选择连接数少的后端服务进行分配,谁闲就让谁干活,摸鱼哒咩。

3.一致性哈希。分为源IP和URL参数两种,主要时利用哈希算法计算这两个参数来保证访问目标结构的一致性。

3.1.一致性哈希-源IP。源地址哈希算法SH,也是常见算法,如Nginx的ip_hash,Haproxy的source。主要负责同一个IP客户端访问相同的后端服务,解决Session持久共享的问题。

3.2.一致性哈希-URL参数。类似Nginx的url_hash,通过$uri即URL参数将同一个URL访问分配到同一个后端服务器中,解决后端某台机子为缓存时的应用场景。

二、ALB后端会话保持两种方法

会话保持是构建负载均衡架构需要关注的内容之一,用户可不想一个网站点着点着被调度算法挪走了后端服务,反复的重新登录。虽然在调度算法里有源IP哈希一致性,但是在内网环境下NAT一个公网IP时,负载均衡收到的内网多个用户的请求还是同一个公网IP地址,还是会出现持久化问题。ALB提供了两种会话保持的方法。即植入Cookie和重写Cookie,这两种方法官方手册介绍的比较简明易懂了,我就不赘述了。

1.植入Cookie:客户端第一次访问时,ALB会在返回请求中植入Cookie(即在HTTP/HTTPS响应报文中插入SERVERID),下次客户端携带此Cookie访问,负载均衡服务会将请求定向转发给之前记录到的后端服务器上。

来自 <如何在ALB控制台配置会话保持_负载均衡-阿里云帮助中心>

如图,客户端返回请求被插入了SERVERID,是由ALB给的,还插入了时间戳信息

2.重写Cookie:当ALB发现用户自定义了Cookie,将会对原来的Cookie进行重写,下次客户端携带新的Cookie访问,ALB会将请求定向转发给之前记录的后端服务器。

来自 <如何在ALB控制台配置会话保持_负载均衡-阿里云帮助中心>

需要在后端Web服务上进行配置的修改,通过Set-Cookie头直接插入相应名称的cookie

再测试时,请求Cookie出就带上了名称为HHH_WWW的cookie

熟悉nginx的哥哥们应该知道有个东西叫session_sticky,里面有三种cookie的mode,insert/prefix/rewrite

综合对调度算法和会话保持的体验,ALB应用型负载均衡更类似于云上的Nginx(或者淘自家的Tengine?没有深入接触过听说两者很相似)的负载均衡SaaS版,更加适合原先在本地机房以Nginx构建负载均衡架构的业务上云,用ALB替代Nginx负载均衡。当然ALB的特性优点还有很多,更加适应云原生环境,丰富的业务流量转发策略,出口大流量并可直接接入WAF、DDOS墙,灵活的健康检测策略等等。

三、实践-利用ALB将传统ECS访问流量切换至Serverless集群,实现云原生化改造

假设我现在是这样一个场景:

一家小型的创业型移动电商平台,业务的技术框架大致为CentOS+Nginx+PHP+Mysql+Redis。初期构建采用了云服务的模式,配置了ECS+RDS主从+Redis+OSS的架构,通过域名发布给用户所使用。就如同所有成长中的中小型企业来说,业务访问量逐渐增长,原先架构的缺点也逐步暴露出来。

ALB作为七层应用型负载均衡,是在云上扩展业务能力的最好方式之一,ALB通常的用法需要构建后端ECS云服务器组,几台相同的ECS动态伸缩来提供后端的负载能力。但是这里,我决定让这个“小型电商平台”用ALB完成流量无缝切换,逐步引入Serverless,拥抱云原生。

至于选择FC函数计算而不使用ECS弹性伸缩的原因大致有这几点:

1、单体ECS改造为弹性伸缩组有停机风险。ECS需要创建自定义镜像来作为伸缩组的来源,创建镜像基于快照技术,但在创建镜像时ECS无法正常提供服务,会存在缓存数据不写盘的情况,导致数据不一致甚至不可用。

2、弹性伸缩策略和能力。当出现业务并发高峰时,弹性伸缩的反应时间和策略就是决定业务是否正常的关键。众所周知,发布一个Pod容器是要比发布一台虚拟机快很多,K8S等云原生带来的动态Scale能力是IaaS层无法比拟的。

3、费用。FC函数的计费粒度比ECS更加精细,使用ECS伸缩组的费用总的来说要高与FC函数计算的弹性扩展,包括其他存储等潜在费用。

4、前后端业务配置里没有特点的固定IP地址,且本身支撑服务如数据都是云服务的环境,只需云上网络互通即可。

同时,根据这个电商平台现有访问情况发现,80%的用户是通过手机移动端来进行访问,也就是说出现高并发的访问量是由移动端产生,PC端的访问较少,因此我决定在ALB监听转发策略将移动端的流量切换到FC函数计算中,PC端的访问暂时由ECS继续提供,待运行一段时间并完成后续测试后全面将流量切换到Serverless。

1.准备工作

实践开始之前,需要修改一下代码,直接了当区别的区分谁提供了后端计算服务。

修改Serverless dev相关配置,发布FC应用,这里不是Serverless主场不多做介绍,确保函数正常运行

2.ALB实例创建

先购买一下活动提供的ALB资源包

进入负载均衡的控制台,选择【创建应用型负载均衡】,到开通页面。

ALB的应用场景非常多,可以在后端架构里,也可以在前端供用户访问,在后端内网环境下我们ALB的网络实例类型就要选择私网,但我们这里直接将ALB的网络提供给用户访问,因此选择【公网】。

这里需要注意VPC需要和原本的业务服务器在同一VPC下,分别选用两个可用区,可用区要和原有的后端云服务一起。

最后【确认订单】后【立即开通】即可。

3.ALB后端服务设置

根据规划,规划两个后端服务器组

进入负载均衡的控制台,选择【创建服务器组】,

创建第一个ECS服务器组:选择【服务器组类型】为服务器类型,也就是我们这里的ECS;选择ECS对应的【VPC】

添加后端服务器,选择正在运行业务的ECS即可

配置后端服务器的端口和权限。配置业务的前端访问端口

创建第二个FC函数计算组:选择【服务器组类型】为函数计算类型;直接选择函数计算所在的资源组

添加后端服务器,直接选择对应的FC服务和函数即可,操作非常简便

这样我们完成了ECS和FC函数计算服务器组的配置

4.ALB监听及转发规则设置

最后,创建好的负载均衡实例,进入业务配置向导,分别完成【配置监听】、【选择服务器组】、【审核配置】

这里创建过程有点冗余,就简述带过了。

我这里业务监听继续使用默认80端口协议HTTP,开启所有HTTP头字段功能,设置默认转发为ECS对应的服务器组

添加转发规则

主流手机的客户端访问web服务时,请求头中User-Agent会带Mobile关键字。这里就用这个关键字来设置转发规则,使移动端访问流量切到后端FC业务组中,由FC来实现动态扩容。

接上一步创建监听,点击【转发规则】,创建一条规则

选择条件为【HTTP标头】,配置键值【User-Agent】,设置值为【*Mobile*】

设定转发动作为重定向,重定向域名为Serverless函数计算的域名

5.ALB业务提供域名设置及测试

最后,ALB需要由域名CNAME指向,修改完域名即可全部生效

效果。直观访问,手机访问流量由Serverless承担,PC访问流量由ECS承担,实际上哪个提供的计算服务在用户侧体验应该是无感的。

后续也可以调整监听和策略,全面无缝迁移到FC函数中。

四、ALB实践-传统负载均衡应用场景

既然有免费体验ALB的机会,还是试一下传统的应用场景,即:

ALB后端服务器组为分别在两个可用区的两套ECS云服务器集群,在创建ALB实例的时候选用至少两个可用区的原因也是希望避免业务的单点故障,若一个可用区的集群健康检测出了问题就可以直接踢出并告警。

每个可用区的后端服务器都是多台ECS,运行的为相同的业务代码,使用默认的轮询算法可以分摊请求流量。

简单的设置即可高可用、高性能,跟自己在本地搭建Nginx+Keepalived相比,确实轻松不少

ALB实例上面已经购买好了,过程略略略

直接新创建服务器组,选择【创建服务器组】,

选择【服务器组类型】为服务器类型;选择ECS集群对应的【VPC】;负载调度算法为【加权轮询】

勾选要加入服务的后端ECS云服务器

配置后端ECS监听的端口和权重,权重一致时就是平均轮询,一台一台按顺序均匀的提供服务。

进入到ALB实例中,配置监听,再按步骤添加配置

使用curl测试就能看到经典的轮询算法,每次访问,ALB将每个可用区的每台ECS均匀的响应请求。

其他:

本来想拿PTS打一下网站压测的,突然发现这玩意还挺贵的,试了一下RPS每秒请求1000次,压测1分钟,测试结果是毫无波澜。

每秒1000请求量压测对于固定IP模式的ALB每秒QPS10w真是蚂蚁见大象了,对不起小丑是我自己,测个寂寞

总的来说,ALB的性能和配置流程是良好的。图形化的操作对于我这个以前动不动就敲Nginx负载均衡+反代,或是Haproxy+Keepalived配置.conf文件的苦逼人来说已经很不错了,熟悉nginx负载均衡前后端监听操作的人使用ALB肯定是没有问题的。

免费领取ALB,满足你的负载均衡需求:https://click.aliyun.com/m/1000370360/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ELB(Elastic Load Balancer)是亚马逊 Web Services(AWS)提供的一种负载均衡服务。它可以自动地将流量分发到多个EC2实例、容器、IP地址或Lambda函数等后端资源,以提高应用程序的可用性和扩展性。 ELB负载均衡器有三种类型:经典负载均衡器(Classic Load Balancer,CLB)、应用负载均衡器(Application Load Balancer,ALB)和网络负载均衡器(Network Load Balancer,NLB)。这些负载均衡器有着不同的特点和适用场景。 1. 经典负载均衡器(CLB):CLB是最早引入的负载均衡服务,可以在传输层(Layer 4)上分发流量。它支持基于TCP和SSL的负载均衡,适用于传统的应用程序架构。 2. 应用负载均衡器(ALB):ALB是在应用层(Layer 7)上进行流量分发的负载均衡器。它支持基于HTTP和HTTPS的负载均衡,并提供了更多高级功能,如请求路由、目标组、容器支持等。ALB适用于微服务架构、容器化应用和现代化的Web应用程序。 3. 网络负载均衡器(NLB):NLB是在传输层(Layer 4)上进行流量分发的负载均衡器,与CLB类似。它适用于对性能和高吞吐量有更高要求的应用程序,如游戏服务器、流媒体和大规模数据传输。 ELB负载均衡器具有以下特点和优势: - 高可用性:ELB将流量分发到多个后端实例,以确保应用程序的高可用性和容错能力。如果某个实例不可用,ELB会自动将流量转发到其他可用的实例。 - 自动扩展:ELB可以根据需要自动调整容量,根据负载情况增加或减少后端实例数量,以应对流量的变化。 - 健康检查:ELB会定期对后端实例进行健康检查,以确保只有正常运行的实例接收流量,并自动将请求转发到健康的实例。 - SSL终止:ELB可以处理SSL/TLS连接,并在负载均衡器和后端实例之间进行SSL终止,减轻了后端实例的计算压力。 - 高级功能ALB提供了更多高级功能,如请求路由、目标组、容器支持等,使得应用程序更加灵活和可扩展。 ELB负载均衡器可以通过AWS管理控制台、命令行接口或API进行配置和管理。它可以与其他AWS服务集成,如Auto Scaling、Amazon ECS、Amazon EKS等,以构建高可用、可扩展的应用程序架构。 总之,ELB负载均衡器是一项重要的服务,可以帮助提高应用程序的可用性、性能和弹性。根据应用程序的需求和架构选择合适的ELB类型,并合理配置和管理负载均衡器,以实现最佳的负载均衡效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值