【问题标题】:Amazon Cloud configuration for Java EE web app with MySQL使用 MySQL 的 Java EE Web 应用程序的 Amazon Cloud 配置
【发布时间】:2011-11-05 09:23:00
【问题描述】:

在我的工作中,我需要将一些现有的 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 要求,我们可以降低总成本。

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

【问题讨论】:

    标签: jakarta-ee amazon-ec2 amazon-web-services amazon-rds amazon-ebs


    【解决方案1】:

    我不是基础设施专家,但我在 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 上升级或缩小您的基础设施非常容易。

    【讨论】:

    • 我需要至少 4 台服务器来实现容错,因为我们将为 4 台主服务器拥有 4 个不同的 IP,因为它们将托管不同的应用程序实例,然后每台服务器至少需要一个实例容错或根本没有容错。对于 RDS,我也在考虑使用多可用区部署的 2 个小型实例。
    • 没关系。由于您似乎有 4 个“外部”IP 地址,您可能会配置 4 个 ELB(弹性负载均衡)实例,其中一个托管每个 IP 地址,然后通过附加多个 EC2 计算节点来按需添加容错根据需要发送到每个 ELB。关于 RDS,这种设置看起来不错,而且多可用区绝对是要走的路。如果您的应用程序的 DB 读取过多,您还可以另外配置一些只读副本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多