5

在我的工作中,我需要将一些现有的 Enterprise Java 应用程序迁移到 AWS。我浏览了 aws.amazon.com 上的许多页面,并且用谷歌搜索了足够多的内容。另外,我尝试在 stackoverflow 上解决所有相关问题。所有这些事情都清楚地表明了很多事情,但是,我仍然有些困惑。这是我们的应用程序结构:

  1. 它是一个基于 Spring 的应用程序,它使用 Spring MVC 作为其表示层和普通的 Java 接口和类来处理业务和数据逻辑。
  2. MySQL 用于持久性。

因此,应用程序架构足够简单。然而,问题是我们需要部署这个应用程序的许多实例。这个计数目前是 15,可以超过 30。还有一点是所有这些实例共享一个公共数据库。

现在,我们需要通过迁移到 AWS 来实现以下目标:

  1. 应用程序的更高容错性。最近,我们在专用主机中遇到了服务器/电源故障,导致了几个小时的停机时间。
  2. 就响应时间和吞吐量而言,应用程序的所有实例都具有更高的性能。
  3. MySQL 更高的容错性。最近,由于某些硬件(硬盘)导致 MySQL 意外停止,应用程序实例在我们的一台服务器上出现故障。硬盘驱动器上的整个文件系统变为只读状态,导致该服务器上托管的应用程序实例出现故障。
  4. 显然降低了基础设施管理的总成本和开销。

就我到目前为止所了解的 AWS 基础设施而言,以下是我们在 AWS 中进行设置所需的内容:

  1. 4 个实例,每个托管大约 10 个应用程序实例,一些基于 EBS 的 LINUX AMI,上面安装了 Tomcat 和 MySQL。
  2. 我猜我们还需要 1 个实例来为这 4 个实例中的每一个实例提供一个容错实例,总共 8 个实例。
  3. 所有服务器实例都将具有大约 160GB 的 EBS。
  4. 4 个弹性 IP
  5. 4 个弹性负载均衡器
  6. 快照等其他东西

现在这是我的问题:

  1. 考虑到 EBS 由 AWS 自动备份并且它们会在硬件故障的情况下为新的 EBS 提供相同的数据,我真的需要为每个主服务器实例拥有额外的服务器实例(用于容错)吗?

  2. 在上述情况下,我将如何在所有服务器实例(4x2)之间共享数据库?我看到的一种选择是在这些服务器实例中实现 MySQL 集群。假设 MySQL 集群将包含 1 个管理节点、3 个 SQL 节点和 4 个数据节点。但是,在这种情况下,维护集群对我们来说是额外的开销,这可能不被接受,因为我们希望摆脱基础设施管理。

  3. 我是否需要为数据库使用 RDS 并从所有服务器实例 (4x2) 中删除 MySQL 实例?如果是,我是否需要在 EC2 实例之外购买 RDS 实例(我认为,如果我需要为 RDS 购买单独的实例,那么总基础设施的成本将至少增加 75%。)或者 RDS 实例还提供计算单元应用程序开发从而减少应用程序部署的实例总数?

  4. 在 RDS 实施的情况下,真的需要基于 EBS 的 EC2 实例吗?如果我们知道如何从配备 RDS 实例的 EC2 实例中移除 EBS 要求,我们可以降低总成本。

任何帮助将不胜感激,如果我不清楚具体说明我的问题并且需要对任何一点进行更多说明,请告诉我。

4

1 回答 1

3

我不是基础设施专家,但我在 AWS 方面有一些经验,我希望我至少可以帮助您解决一些问题。我的背景不允许我就您的基础设施规模提供任何建议,但我可以就基础设施的类型提供建议。
首先,我肯定会选择 EBS。除了与您的应用程序服务器物理分离之外,它还具有高可靠性和高可用性。我可以告诉你它救了我几次。虽然我说过我不会告诉你任何关于大小的事情,但我认为你不需要额外的 4 个“容错”实例,但也许你可以保留一些 2 个实例以准备好关闭流量,以防万一。

关于您的数据库,您绝对应该继续使用 RDS for MySQL (http://aws.amazon.com/rds/mysql/)。它们以(恕我直言)低廉的价格为您提供预配置的节点、自动修补、自动备份、自动复制和一键式扩展。对于 MySQL,所有这些特性都是现成的。您还可以使用指标和监控,这一切都包括在内。RDS 不会为您提供计算单元,但在 AWS 中将它们分开是一种很好的做法。您还可以使用 4 个 EC2 Tomcat 节点 + 2 个 RDS 节点进行设置。这只是大小的问题:)

如果您已经阅读过 Amazon Elastic Load Balancing,那么它看起来非常适合您的解决方案。您可以将一些 EC2 节点附加到每个 ELB 节点,而无需考虑负载平衡。它可以正常工作,您还可以根据需要配置粘性会话。不过,我不知道应该选择多少个 ELB 节点,但请注意一个问题:您只能将来自同一地理区域(例如美国东海岸)的 EC2 节点添加到同一 ELB。例如,不可能平衡西海岸的 Tomcat 和东海岸的另一个 Tomcat 之间的流量。如果您选择将节点分布在多个区域,则需要在 Amazon 之外提供另一个 LB 解决方案。

我的最后建议:继续使用基于 ELB + EBS 的 EC2 + RDS。它将大大简化您的监控、部署和维护,而且成本往往要低得多。您可能更清楚每种节点需要多少个,但不要害怕错过,因为在 AWS 上升级或缩小您的基础设施非常容易。

于 2011-08-28T14:20:35.970 回答