ELB 是否会增加 AWS 架构的可用性?

Do ELB's increase availability of an AWS architecture?

我正在努力通过 AWS 认证的模拟考试。其中一题如下:

 The web tier for an a pplication is running on 6 EC2 instances spread
 across 2 AZs behind a classic ELB.  The data tier is a MySQL database
 running on an EC2 instance.  What changes will increase the
 availability of the application? (select TWO)

 A: Turn on CloudTrail in the AWs account
 B: Migrate the MySQL database to a Multi-AZ RDS MySQL database instance
 C: Turn on cross-zone load balancing on the ELB
 D: Launch the web tier EC2 instances in an Auto Scaling Group
 E: Increase the instance size of the web tier EC2 instance

正确答案是 B 和 D。我的问题是,为什么 C 不是正确答案?讲师(亚马逊员工)掩盖了 C,解释说 "enabling cross-zone load balancing would have little to no effect on availability." 但我的看法是,如果 ELB 无法将流量发送到两个 AZ,那么我们实际上是在创建 6 实例系统变成 3 实例系统(假设每个 AZ 中有 3 个实例)。单个 AZ 系统永远不会 被认为是高可用架构,因为如果那个 AZ 出现故障,您的整个系统将不可用。

启用 cross-zone 负载平衡不会影响可用性,因为 ELB 可以在不启用该功能的情况下将流量发送到所有已配置的可用区。 这不是 cross-zone 平衡的目的意思是

配置在两个可用区中的 ELB 总是至少有两个平衡器节点,每个可用区一个。您无法直接看到这一点,但如果您在 EC2 控制台的 "Network Interfaces" 下查看,您可以找到连接到平衡器节点的弹性网络接口 (ENI)。每个节点有一个弹性网卡。该服务根据负载确定平衡器有多少个节点。这是自动管理的,不会根据节点数向您收费。

Cross-zone 负载均衡控制每个节点可以做什么。 "Enabled" 表示区域 A 中的平衡器节点可以将流量发送到区域 A 或 B 中的实例,而不仅仅是区域 A 中的实例,区域 B 中的平衡器节点也是如此。

这不会提高可用性,因为如果可用性区域丢失,则该区域中的平衡器节点也会丢失,因此它可能已将流量发送到其他区域中的实例这一事实并不重要。

Cross-zone 负载平衡有助于确保工作负载尽可能均匀地分布在平衡器后面的所有实例上,如果您有不对称性,这会有所帮助——例如一个可用区中有 3 个应用程序实例和 2 个应用程序实例在另一种情况下(在这种情况下,具有 2 的区域会比具有 3 的区域看到更多的流量 每个实例 ) - 或者实例没有看到的其他情况 evenly-balanced 工作负载,当平衡器后面的实例数量较少或者由于某些请求与其他请求相比的复杂性导致请求处理时间有很大差异时,这种情况更有可能发生。

哪些更改会提高应用程序的可用性?

更高的可用性意味着应用程序处理请求的时间段更少。

  • (B) Multi-AZ 数据库 肯定会有帮助,因为如果一个 AZ 出现故障,它会自动提升另一个 AZ 中的辅助数据库服务器
  • (D) Auto Scaling 肯定会有所帮助,因为失败的实例将被替换。

Cross-zone 负载均衡在 AZ 中没有可用的健康实例但流量由该 AZ 中的 ELB 处理的情况下会有所帮助。这是不太可能发生的情况,尤其是在一个 AZ 中有 3 个实例的情况下,但我可以理解对此的争论。但是,其他两个答案要强得多。

值得一提的是,AWS Certification 官方问题经过了多级技术审核,不应在问题中留下如此模棱两可的问题。样题(无论是在 AWS 课程还是其他方面)可能没有经过如此详细的审查。