我意识到两者之间的一些基本区别,即
EC2 会更便宜
RDS 我不必进行维护
除了这两个之外,从 RDS 运行我的数据库与充当 MySQL 服务器的单独 EC2 服务器相比有什么优势。假设实例大小相似,两者在处理负载方面是否会遇到相同的限制?
为了给你更多关于我使用的信息,我有一个数据库,没有太大或任何东西(最大的表 100 万行),只是高 SELECT 量。
我意识到两者之间的一些基本区别,即
EC2 会更便宜
RDS 我不必进行维护
除了这两个之外,从 RDS 运行我的数据库与充当 MySQL 服务器的单独 EC2 服务器相比有什么优势。假设实例大小相似,两者在处理负载方面是否会遇到相同的限制?
为了给你更多关于我使用的信息,我有一个数据库,没有太大或任何东西(最大的表 100 万行),只是高 SELECT 量。
这是一个简单的问题,但答案却很复杂!
简而言之:如果您使用 RAID0 EBS,EC2 将提供最佳性能。执行 RAID0 EBS 需要相当多的维护开销,例如:
http://alestic.com/2009/06/ec2-ebs-raid
http://alestic.com/2009/09/ec2-consistent-snapshot
没有 RAID0 EBS 的 EC2 将提供糟糕的 I/O 性能,因此它甚至不是一个真正的选择。
RDS 将提供开箱即用的非常好的(尽管不是最大的)性能。管理控制台非常棒,升级实例很容易。高可用性和只读从站只需点击一下即可。真是太棒了。
简短的回答:使用 RDS。还在围墙?与RDS一起去!!!如果您喜欢头疼并为获得最佳性能而进行最后一点调整,那么您可以考虑 EC2 + EBS RAID 0。香草 EC2 是 MySQL 托管的糟糕选择。
在这篇文章中,有一个很好的基准:
基准测试非常好,因为它不仅关注理想条件(只有一个线程),还关注更现实的场景,有 50 个线程访问数据库。
RDS 并不是真正的高可用性系统。阅读 RDS 常见问题解答中的细则。在故障转移事件期间,故障转移最多可能需要 3 分钟。额外的亚马逊将决定它需要“升级”您的 rds 实例并在此时进行故障转移,这将使您的数据库停机“最多 3 分钟”(我们的经验是它可能需要更长的时间)。
RDS 高可用性与主-主或主-从复制非常不同,并且速度要慢得多。他们不使用 mysql 复制,而是使用某种 ebs 复制。因此,在故障转移情况下,它将在备份机器上安装 ebs,启动 mysql,等待 mysql 进行故障恢复(希望没有损坏太糟糕),然后进行 dns 切换。
我希望这对您的评估有所帮助。
我们选择使用 EC2 MySQL 实例是因为我们的读取量很大,需要主从复制。当然,您可以启动多个 RDS 实例并自己在它们之间设置 MySQL 复制,但我们使用 Scalr.net,它使用 EC2 实例为您管理这些。
基本上,我们只是告诉 Scalr 我们需要多少 MySQL 实例来保持它们的运行,自动设置复制,在主服务器终止时处理从服务器升级到主服务器的自动故障转移等。它同时执行 SQL 转储备份和 EBS 卷快照大师。所以,当它需要创建一个新的slave时,它会自动临时挂载最后一个master快照的EBS卷来初始化slave DB,然后从适当的点开始复制。全部点击:)(不,我不为 Scalr 或任何东西工作。如果您不想使用他们的服务,Scalr 可以作为开源使用)
关于维护窗口问题。如果您使用多可用区,则 RDS 将在另一个可用区中创建备用副本,这样就没有停机时间进行维护,并且您可以保护自己免受区域故障的影响。
这就是我计划在接下来的一周左右做的事情。当然,这会花费你更多,但我还没有解决这个问题。
EC2 上的 MySQL 与 RDS MySQL
MySQL 在 EC2 上的优势 Amazon EC2 区域间复制
跨 Amazon EC2 区域复制快照
MySQL EC2 中带有 EBS 条带化的 RAID 0
可以在 EC2 上的 MySQL 上附加超过 3TB 的磁盘空间(根据您的大小,您不需要此空间)。
EC2上MySQL的缺点
与 RDS 相比的配置、监控和维护
RDS 中可用的时间点备份
目前 IOPS 低于 RDS MySQL(即使在 RAID 0 之后),EC2 上的 MySQL 10800 和 6 个磁盘,而 RDS MySQL 上的 12500 IOPS 16KB
我已经尝试 RDS 几个月了,以下是我遇到的一些问题:
使用 SQL 分析器很棘手。由于您无法将探查器直接连接到服务器,因此您必须运行一些存储过程来创建可以分析的日志文件。虽然他们提供了一些关于如何完成的建议,但它远非用户友好。我只建议您让经过认证的 SQL 专业人员来完成此类工作。
在 Amazon 备份您的实例时,您无法恢复单个数据库。我有一个包含多个单独的客户特定数据库的 Web 应用程序,我的解决方案是启动一个运行 SQL 的 EC2 实例,以附加到生产 RDB 数据库并导入数据,然后将其备份到 EC2 实例上。另一个解决方案是使用第 3 方工具创建大量 SQL 脚本(在应用服务器上),该脚本将重新创建架构并将数据填充回还原点。
这个周末我也有同样的问题。RDS 每周有 4 小时的停机时间窗口进行维护。如果您可以摆脱 EC2 的微型实例,RDS 似乎更昂贵。(对于流量最小的测试实例也是如此)我也无法更改 RDS 实例的时区,因为我没有权限。
我现在实际上正在查看http://xeround.com/这是另一家公司在 EC2 上的 mysql。他们不使用 InnoDB,而是拥有自己的名为 IDG 的引擎。我刚刚开始调查,但它们处于测试阶段,将提供 500MB 的空间。