在我的工作中,我需要将一些现有的 Enterprise Java 应用程序迁移到 AWS。我浏览了 aws.amazon.com 上的许多页面,并且用谷歌搜索了足够多的内容。另外,我尝试在 stackoverflow 上解决所有相关问题。所有这些事情都清楚地表明了很多事情,但是,我仍然有些困惑。这是我们的应用程序结构:
- 它是一个基于 Spring 的应用程序,它使用 Spring MVC 作为其表示层和普通的 Java 接口和类来处理业务和数据逻辑。
- MySQL 用于持久性。
因此,应用程序架构足够简单。然而,问题是我们需要部署这个应用程序的许多实例。这个计数目前是 15,可以超过 30。还有一点是所有这些实例共享一个公共数据库。
现在,我们需要通过迁移到 AWS 来实现以下目标:
- 应用程序的更高容错性。最近,我们在专用主机中遇到了服务器/电源故障,导致了几个小时的停机时间。
- 就响应时间和吞吐量而言,应用程序的所有实例都具有更高的性能。
- MySQL 更高的容错性。最近,由于某些硬件(硬盘)导致 MySQL 意外停止,应用程序实例在我们的一台服务器上出现故障。硬盘驱动器上的整个文件系统变为只读状态,导致该服务器上托管的应用程序实例出现故障。
- 显然降低了基础设施管理的总成本和开销。
就我到目前为止所了解的 AWS 基础设施而言,以下是我们在 AWS 中进行设置所需的内容:
- 4 个实例,每个托管大约 10 个应用程序实例,一些基于 EBS 的 LINUX AMI,上面安装了 Tomcat 和 MySQL。
- 我猜我们还需要 1 个实例来为这 4 个实例中的每一个实例提供一个容错实例,总共 8 个实例。
- 所有服务器实例都将具有大约 160GB 的 EBS。
- 4 个弹性 IP
- 4 个弹性负载均衡器
- 快照等其他东西
现在这是我的问题:
考虑到 EBS 由 AWS 自动备份并且它们会在硬件故障的情况下为新的 EBS 提供相同的数据,我真的需要为每个主服务器实例拥有额外的服务器实例(用于容错)吗?
在上述情况下,我将如何在所有服务器实例(4x2)之间共享数据库?我看到的一种选择是在这些服务器实例中实现 MySQL 集群。假设 MySQL 集群将包含 1 个管理节点、3 个 SQL 节点和 4 个数据节点。但是,在这种情况下,维护集群对我们来说是额外的开销,这可能不被接受,因为我们希望摆脱基础设施管理。
我是否需要为数据库使用 RDS 并从所有服务器实例 (4x2) 中删除 MySQL 实例?如果是,我是否需要在 EC2 实例之外购买 RDS 实例(我认为,如果我需要为 RDS 购买单独的实例,那么总基础设施的成本将至少增加 75%。)或者 RDS 实例还提供计算单元应用程序开发从而减少应用程序部署的实例总数?
在 RDS 实施的情况下,真的需要基于 EBS 的 EC2 实例吗?如果我们知道如何从配备 RDS 实例的 EC2 实例中移除 EBS 要求,我们可以降低总成本。
任何帮助将不胜感激,如果我不清楚具体说明我的问题并且需要对任何一点进行更多说明,请告诉我。