【发布时间】:2011-11-05 09:23:00
【问题描述】:
在我的工作中,我需要将一些现有的 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 要求,我们可以降低总成本。
任何帮助都将不胜感激,如果我不清楚具体说明我的问题并需要更多说明,请告诉我。
【问题讨论】:
标签: jakarta-ee amazon-ec2 amazon-web-services amazon-rds amazon-ebs