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

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

过去三年来,我一直在使用amazon web services,但这是我第一次收到这个非常具体的硬件configuration规格。

我知道有一些权衡,真正的硬件总是比虚拟机快,而且事实上正确地知道,你会推荐什么?

1)亚马逊EC2? 2)亚马逊RDS? 3)还有别的? 4)忘记它的宝贝,坚持真正的硬件

这是硬件要求

这台服务器将专注于I / O和MySQL的统计,内存大小和磁盘空间的图像托pipe。

服务器1

I / O这个服务器上的主要部分是I / O处理,FusionIO卡已经certificate它们是非常高效的,这是目前在这个领域最好的。 o Fusion ioDrive2 MLC 365GB( http://www.fusionio.com/load/-media-/1m66wu/docsLibrary/FIO_ioDrive2_Datasheet.pdf )

CPU MySQL将使用比Apache更less的CPU核心,但它将使用它们非常困难,E7家族具有30McachingL3 wichi提供了提升性能:Ø1倍的英特尔E7-2870将是好的。

存储 SAS在性能方面performance不错,尤其考虑到所需的空间。 o 4个SAS 10k或15k的RAID 10,总共可用空间为512 GB。

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

服务器2

I / O这个服务器上的主要部分是I / O处理,FusionIO卡已经certificate它们是非常高效的,这是目前在这个领域最好的。 o Fusion ioDrive2 MLC 365GB( http://www.fusionio.com/load/-media-/1m66wu/docsLibrary/FIO_ioDrive2_Datasheet.pdf )

CPU MySQL将使用比Apache更less的CPU核心,但它将使用它们非常困难,E7家族具有30McachingL3 wichi提供了提升性能:Ø1倍的英特尔E7-2870将是好的。

存储 SAS在性能方面performance不错,尤其考虑到所需的空间。 o 4个SAS 10k或15k的RAID 10,总共可用空间为512 GB。

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

提前致谢。

最好,

问题:

  • 上面列出的两台服务器是完全相同的。
  • 你谈论FusionIO,但你也谈论在同一个盒子上运行MySQL和Apache。
  • 您不会提及Apache文件或MySQL数据库(或其部分,如ib_logfile )是否在FusionIO驱动器上。

误解:

“真正的硬件永远比虚拟机要快”并不一定是真实的。 的确, 在相同的硬件上 ,相同的应用程序对于不在虚拟机中的执行效果会更好,但由于您无法访问亚马逊的硬件,所以这种比较是没有意义的。

关于云的一点是它横向扩展,所以如果一台服务器可以同时为100个访问者服务,那么可以为10个服务器同时访问1000个访问者,而且每个访问者的响应速度都是相同的,不pipe他们中有多less人。

云端:

与托pipe服务商相比,与托pipe服务商有一些关键区别。 如果你能够利用他们,他们将在云中托pipe一个明确的赢家。

  1. 您可以快速旋转实例。 如果你的stream量非常突然 (比如你运行一个售票网站),那么你可以在Justin Bieber门票发售前一小时轻松地将你的networking层,数据库层和/或存储层克隆到数百个虚拟机中,一小时后把它们全部closures,以省钱。 基于硬件的解决scheme通常需要花费数周时间来提高您的容量,并且在没有被充分利用的情况下继续花费金钱。
  2. 前期成本可以低得多。 你提到的硬件可能花费数万美元,除了你的其他托pipe成本。 我的Amazon服务器每个月花费我大约15美元,但是我可以轻松地将其扩展到一个更加健壮的虚拟机,并在数小时内将其扩展到几十个负载均衡实例。
  3. 他们为你做了很多工作。 Amazon还提供其他服务,如DynamoDB,可自动扩展或满足您提供的工作负载或存储需求。 他们运行在固态硬盘的速度和复制到多个地方给你冗余和可用性。

这就是说,你的应用程序必须能够水平扩展。 你不能简单地把它扔到云端,并期待它永远扩展。 例如,默认的PHP会话有两个问题:

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

这只是一个例子,但是没有考虑横向扩展的应用程序通常都是像这样的独占资源。

如果您运行的是分布式数据库(亚马逊的数据库服务),那么您的应用程序也需要能够处理CAP定理中固有的折衷。 这表明您可以从三个方面获得两个方面:一致性,可用性,分区容忍度。 你需要知道你没有的三个中的哪一个,并让你的应用程序补偿它。

如果你的应用程序适合硬件,那么去硬件。 如果它适合云,那么去云。

注意:我已经在此使用Amazon作为示例,但是还有其他云托pipe提供商具有类似的function,能够非常快速地启动和closures实例,并且只收取您实际使用的内容。

为了从云解决scheme中获得最大的性能,您需要为云构build一个架构。 如果您担心可以从服务中获得多lessIOPS,而这些服务的devise是完全可扩展的(无论是向上还是向下)。您正在考虑虚拟机而不是云计算。 就可用的IOPS数量而言,我认为这篇关于EBS的文章解释了需要考虑的问题

还有一点没有提到的是未来扩展数据库容量的能力。 硬件要求不是静态的,随着应用程序的增长,它们会随着时间而变化。 @rhossi,对于每个硬件选项,您应该考虑未来的可伸缩性path。 简而言之:(1)对于Amazon EC2,要扩展,可以升级到一个更大的实例[轻松],扩展你需要在其他实例上安装MySQL并定义它们之间的集群[硬,也是次优的networking性能除非你请求特殊的群集实例]。 (2)对于Amazon RDS,要扩展,同样的[容易],扩展,添加更多的RDS实例和定义群集[硬]。 (3)还有其他的东西 – 你可能会在EC2上看到Xeround的云数据库解决scheme,它具有自动扩展function,不需要集群,但是我认为它的存储容量有限,所以可能不适合。 可能会有其他选项提供自动缩放,我认为这将是很好的调查。 (4)真正的硬件 – 扩大需要手动升级硬件[小麻烦+前期成本],扩展需要更多的机器和手动定义群集[中硬],但这将比在云上更容易实现,因为IP静态的,更好的networking性能。 HTH