负载均衡与弹性伸缩
负载均衡与弹性伸缩
更新时间:2023-04-14 04:24:31


目标与准备

在这一章中,我们将为我们私有的iVX应用配置负载均衡与弹性伸缩服务。其作用是当应用访问量过高时,一台服务器无法满足需求,需要更多的服务器来处理高并发的计算请求。

负载均衡与弹性伸缩,是两个需要搭配在一起使用的服务,其中,负载均衡负责在前端接收服务请求,并分发给弹性伸缩组中的后台服务器;弹性伸缩组,负责根据预先指定的规则,监控组中的服务器负载过高时,自动扩展新的服务器,并在负载下降时,释放多余的服务器,以节省成本。其结构大致如下图所示:



最后,要使用自动拓展的服务器架构,我们除了需要完成基础的裸机部署之外,还需要将文件和数据库都进行云端部署,否则,如果将文件和数据库部署在计算服务器上,会导致由弹性伸缩自动创建出来的服务器,无法访问到存储在原始服务器上的文件和数据库。因此,这一章的内容需要依赖之前的单机部署、OSS以及RDS章节,但由于负载均衡会自动承担反向代理的工作,因此并不需要我们自行部署nginx反向代理。

创建负载均衡

首先,我们找到阿里云的负载均衡(SLB)服务,并创建一个实例。创建实例时,不需要额外的配置,只需要注意实例所在区域,要和我们的云服务器所在地域一致即可。

实例创建完成之后,我们通过配置入口开始配置:



1、第一步:选择负载均衡外部访问的协议与端口



443是https的默认端口,如果我们需要额外支持http的访问,可以再添加一个http的监听,http的默认监听端口是80。一个负载均衡,支持添加多个监听端口。


2、第二步:选择证书



https协议,需要一个证书。在这里,由于我们将使用负载均衡作为服务请求的前端,因此,之前在服务器上免费生成的证书就不适用了,需要额外配置证书。在这里,我们需要先在阿里云的SSL证书服务,申请一个证书,然后在这里选择申请好的证书。通常,单域名的证书都有免费版本可以申请,阿里云的证书申请请见相关文档,在这里我们就不重复说明了。

3、配置后端服务器

在这一步中,我们将配置负载均衡后端负责执行计算任务的服务器。我们选择默认服务器组,然后在“继续添加”入口中,可以选择到之前我们已经配置好的服务器。



选择好服务器之后,我们填写我们的服务端口,我们之前配置的是9900;权重默认为100,因为当前只有一个服务器。

4、完成配置

之后,我们还需要选择是否开启健康检查。健康检查,是负载均衡在新加入服务器之后,检查是否正常运行,仅对正常运行的服务器才发送服务请求。我们保留默认打开选项即可。选择下一步,配置完成后,可以看到这个确认界面:





配置域名

负载均衡创建完成后,我们可以在管理界面查看到它的公网IP:



接下来,我们需要在DNS服务中,将之前绑定了证书的域名,指向这个IP。在这个教学中,我们用了一个测试域名 wintest.ih5school.cn。完成域名解析,我们就可以通过这个域名访问到我们的应用了:

https://wintest.ih5school.cn/Q&A (由于这个只是一个教学用的测试应用,您查看这个文档的时候,这个服务不一定能够正常访问。)

这个访问路径,是通过阿里云的负载均衡服务,而不是直接连接到我们的服务器。


配置弹性伸缩

接下来,我们来接入弹性伸缩服务。首先,找到阿里云的弹性伸缩服务(auto scaling),并选择创建一个伸缩组:



在这里,由于我们已经配置好了一个服务器,因此,可以直接选择通过已有的ECS创建,将我们已配置完成的服务器作为一个模板。

开始创建之后,有几个要点需要注意:

1、选择模板实例
配置来源选择已有实例,然后选我们之前配置好的服务器:




2、设置最大最小实例数

我们需要制定这个弹性伸缩组,最大和最小的实例数,最小实例,填写1即可。



3、选择关联的负载均衡与RDS

最后,我们需要选择这个弹性伸缩组关联的负载均衡与RDS。关联负载均衡之后,这个弹性伸缩组就会自动接入负载均衡,管理其后端服务器了。关联RDS实例的目的,是因为RDS实例需要设置访问白名单,关联之后,弹性伸缩组在扩展服务器时,会自动去RDS中登记新的服务器,确保新的服务器可以顺利访问RDS。



配置完成后,我们的服务器就可以弹性伸缩了。当弹性伸缩条件满足时,我们会在负载均衡的后端服务器组中,看到自动创建出来的服务器:



除了以上基本配置,弹性伸缩还可以配置更加详细的伸缩策略,包括冷却时间,触发伸缩的条件等等,具体可以参考阿里云的相关文档说明。



弹性伸缩的局限性

以上,我们已经完成了弹性伸缩计算服务的配置,尽管这个服务架构,支持在高并发时自动添加服务器资源,但其依旧有一些局限性:

  1. 弹性伸缩需要时间:弹性伸缩服务器资源并不是瞬间完成的,其通常需要完成资源监听-》创建实例-》健康检测-》服务登记这些步骤,因此通常需要几分钟的时间,因此,当我们有瞬间大流量的时候,这个伸缩可能会来不及响应,建议针对大型现场活动,提前调高弹性伸缩组的最小服务器个数,以预备瞬发的大流量;
  2. 弹性伸缩的只是计算服务器,而不是数据库:这一点需要大家额外注意,由于大多数数据库服务是无法弹性伸缩的,比如阿里云的RDS服务,因此,尽管前端的运算服务器可以弹性伸缩,但数据库访问依旧是我们应用处理的瓶颈。针对这个问题,我们可以预备更大的RDS资源,或使用polarDB等伸缩性能更好的数据库,针对大规模高兵发的应用场景,必须提前对数据库性能做好压测。
文档反馈