Amazon AWS 上的 I/O 密集型 MySql 服务器

Amazon AWS 上的 I/O 密集型 MySql 服务器

我们最近从传统数据中心迁移到 AWS 上的云计算。我们正在与另一家公司合作开发一款产品,我们需要为即将发布的产品创建数据库服务器。

过去 3 年我一直在使用 Amazon Web Services,但这是我第一次收到具有这种非常具体的硬件配置的规格。

我知道存在权衡,并且真实硬件总是比虚拟机更快,并且事先了解这一事实,您会推荐什么?

1)Amazon EC2?2)Amazon RDS?3)还有别的吗?4)算了吧,还是用真正的硬件吧

这是硬件要求

该服务器将专注于 I/O 和 MySQL 的统计、内存大小和图像托管的磁盘空间。

服务器 1

输入/输出 该服务器上最主要的部分是 I/O 处理,FusionIO 卡已证明自己非常高效,这是目前您能在这个领域拥有的最佳产品。o Fusion ioDrive2 MLC 365GB(http://www.fusionio.com/load/-media-/1m66wu/docsLibrary/FIO_ioDrive2_Datasheet.pdf

中央处理器 MySQL 使用的 CPU 核心比 Apache 少,但它会非常努力地使用它们,E7 系列有 30M Cache L3,可以提高性能:o 1x Intel E7-2870 就可以了。

贮存 SAS 的性能已经足够好了,尤其是考虑到所需的空间。o 4 x SAS 10k 或 15k 的 RAID 10,总可用空间为 512 GB。

记忆 o 考虑到统计数据库的大小,此服务器至少需要 64 GB。警告:统计数据库将快速增长,如果可能,请考虑直接从 128 GB 开始,这将有所帮助。此服务器将专注于统计的 I/O 和 MySQL、内存大小和图像托管的磁盘空间。

服务器 2

输入/输出 该服务器上最主要的部分是 I/O 处理,FusionIO 卡已证明自己非常高效,这是目前您能在这个领域拥有的最佳产品。o Fusion ioDrive2 MLC 365GB(http://www.fusionio.com/load/-media-/1m66wu/docsLibrary/FIO_ioDrive2_Datasheet.pdf

中央处理器 MySQL 使用的 CPU 核心比 Apache 少,但它会非常努力地使用它们,E7 系列有 30M Cache L3,可以提高性能:o 1x Intel E7-2870 就可以了。

贮存 SAS 的性能已经足够好了,尤其是考虑到所需的空间。o 4 x SAS 10k 或 15k 的 RAID 10,总可用空间为 512 GB。

记忆 o 考虑到统计数据库的大小,此服务器至少需要 64 GB。警告:统计数据库将快速增长,如果可能的话,请考虑直接从 128 GB 开始,这会有所帮助。

提前致谢。

最好的,

答案1

存在的问题:

  • 您上面列出的两台服务器完全相同。
  • 您谈到了 FusionIO,但您也谈到了在同一个盒子上运行 MySQL 和 Apache。
  • 您没有提到 Apache 文件或 MySQL 数据库(或其中的部分内容,例如ib_logfile)是否会位于 FusionIO 驱动器上。

误解:

“真实硬件总是比虚拟机快”并不一定是正确的。在同一硬件上即使不在虚拟机中,同一个应用程序的性能也会更好,但由于您无法访问亚马逊的硬件,因此这种比较毫无意义。

云的优点在于它可以水平扩展,因此,如果您可以使用一台服务器同时为 100 名访问者提供服务,那么您就可以使用 10 台服务器同时为 1000 名访问者提供服务,并且每位访问者都会获得相同的响应速度,无论您有多少位访问者。

云端:

与主机托管相比,云提供商之间存在一些关键差异。如果您能够利用这些差异,那么云托管将成为一个明显的赢家。

  1. 您可以非常快速地启动和关闭实例。 如果你的流量非常突发的(比如,您经营一家售票网站)那么您可以在贾斯汀·比伯门票开始销售前一小时轻松将您的 Web 层、数据库层和/或存储层克隆到数百台虚拟机上,并在一小时后将它们全部关闭以节省资金。基于硬件的解决方案通常需要数周时间才能增加您的容量,并且当它们没有得到充分利用时,它们会继续花费金钱。
  2. 前期成本可能会低得多。 您提到的硬件可能要花费数万美元,再加上其他托管费用。我的 Amazon 服务器每月花费约 15 美元,但我可以轻松地将其扩展到更强大的虚拟机,并在几个小时内将其扩展到数十个负载平衡实例。
  3. 他们为你做了很多工作。 Amazon 还有其他服务,例如 DynamoDB,它可以根据您指定的工作负载或存储要求自动扩展或缩减。它们在 SSD 中运行以提高速度,并复制到多个位置,为您提供冗余和可用性。

也就是说,您的应用程序必须能够水平扩展。您不能简单地将其放入云中并期望它永远扩展。例如,默认的 PHP 会话有两个问题:

  1. 它们存储在本地磁盘上,这意味着您要么需要使用粘性会话,要么需要使用共享磁盘,这将成为瓶颈。
  2. 它们使用独占的、阻塞的文件锁打开flock()。一次只能有一个 PHP 进程使用一个会话文件。当您开始触发大量 AJAX 调用时,这可能是一个严重的问题。

这只是一个例子,但在编写时没有考虑水平扩展的应用程序通常充满了像这样的独有资源。

如果你正在运行分布式数据库(亚马逊的数据库服务就是如此),那么你的应用程序还需要能够处理固有的权衡定理。该定理指出,您可以获得三个方面中的两个:一致性、可用性、分区容错性。您需要知道您没有这三个方面中的哪一个,并让您的应用对此进行补偿。

如果你的应用程序适合硬件,就选择硬件。如果它适合云,就选择云。

注意:我在这里使用亚马逊作为示例,但其他云托管提供商也具有类似的功能,可以非常快速地启动和关闭实例,并且只收取您实际使用的费用。

答案2

为了从云解决方案中获得最大性能,您需要为云进行架构设计。如果您担心可以从完全可扩展(向上和向下)的服务中获得多少 IOPS,那么您考虑的是虚拟机而不是云计算。至于可用的 IOPS 数量,我认为这篇关于EBS的文章解释需要考虑的问题

答案3

另一点尚未提及的是未来扩展数据库容量的能力。硬件要求不是静态的,它们会随着应用程序的增长而变化。@rhossi,对于每个硬件选项,您都应该考虑未来的可扩展性路径。简而言之:(1)对于 Amazon EC2,要扩展,您可以升级到更大的实例 [简单],要扩展,您需要在其他实例上安装 MySQL 并在它们之间定义集群 [困难,除非您请求特殊的集群实例,否则网络性能也不理想]。(2)对于 Amazon RDS,要扩展,同样 [简单],要扩展,添加更多 RDS 实例并定义集群 [困难]。(3)其他内容 - 您可以查看 Xeround 的云数据库EC2 上的解决方案具有自动扩展功能,不需要集群,但我认为它的存储容量有限,因此可能不太合适。可能还有其他提供自动扩展的选项,我认为值得研究一下。(4)真实硬件 - 扩展需要手动升级硬件 [小麻烦 + 前期成本],扩展需要更多机器并手动定义集群 [中等难度],但这比在云上更容易实现,因为 IP 是静态的,并且网络性能更好。HTH

相关内容