AWS ELB & ASG

Scalability

  • 可扩展性是指应用/系统能通过调整,承担更大的负荷
  • 可拓展性分为:纵向可拓展性(为单个实例分配更多的CPU,内存)横向可拓展性(elasticity)

Horizontal Scalability

Scale out / in

Vertical Scalability

Scale up / down

High Availability

  • 可拓展性、高可用是紧密相关的
  • 高可用在AWS中指系统或应用至少运行在两个可用区
  • 高可用性的目标是在某个数据中心发生故障(灾难)时,另一个数据中心能够失效备援

Elastic Load Balancer

  • 将流量转发给下游的EC2实例
  • 为你的应用暴露DNS(单点入口)
  • 处理下游EC2实例的failures
  • 定期检查EC2实例的健康状况
  • 跨可用区

ELB Hands On

  1. 创建两台EC2实例

  2. 使用公共IP访问他们

  3. 创建一个ALB(layer 7),用一个单点入口(DNS)来访问EC2实例

  4. 将ALB部署在以下两个可用区

  5. 创建一个新的安全组,只允许HTTP请求(80)与HTTPS请求(443)

  1. 创建一个目标组(EC2实例组)

    将两个实例加入目标组

    绑定在ALB上

  2. 成功创建ALB

  3. 访问DNS名称ALB-1723269650.us-east-1.elb.amazonaws.com,报错

  4. 发现目标组未注册目标(第7步)

  5. 重新注册

  6. 再次根据DNS名称访问,成功!并且多次访问,流量会被分发到不同的EC2实例

  7. 终止第二个EC2实例,注意私有IP

  8. 在目标组中查看到,第二个是李的运行状态是Unused

  9. 之后通过ALB访问,流量只会被转发给第一台EC2实例

Auto Scaling Group

  • 根据流量迅速自动创建(scale out)与删除(scale in)EC2实例
  • 自动注册新的EC2实例到Load Balancer
  • 自动替换不健康的EC2实例

ASG + ALB Hands On

  1. 创建ASG

  2. 创建启动模板

  3. 选择所有的可用区和子网

  4. 新建一个ALB,选择之前创建的目标组

  5. 配置组大小

  6. 创建成功

  7. 创建好ASG后,EC2实例会被自动创建,目标组自动关联这些实例

  8. 根据ALB的DNS NAME来访问

  9. 终止一个实例,看看会发生什么

  10. activity页面,检测到不健康实例,所以自动扩展了一个新的实例

ASG - Scaling Strategies

Manual Scaling

Dynamic Scaling

Simple Scaling

  • CloudWatch alarm被触发,比如CPU使用率 > 70%,增加两个EC2实例
  • CloudWatch alarm被触发,比如CPU使用率 < 30%,删除一个EC2实例

Target Tracking Scaling

比如:我想让ASG CPU的平均使用率为60%,高于或者低于都可能进行缩放

Scheduled Scaling

根据已知的使用模式预测缩放,比如:每天晚上十点缩容,每天上午八点扩容

Predictive Scaling

  • 使用机器学习预测未来的流量,并调整EC2实例的个数