【问题标题】:Scaling SQL Server on Amazon Web Services在 Amazon Web Services 上扩展 SQL Server
【发布时间】:2011-11-25 18:24:50
【问题描述】:

我目前有一个网络应用程序,我想使用 Amazon Web Services 进行横向扩展。

我的网络应用程序规范:

C# ASP.NET SQL Server

我有一个文件存储供我的用户使用,并有一个 SQL Server 数据库存储我的所有数据。我想使用 S3 在 Amazon Web Services 上进行扩展。我不确定如何在 Amazon Web Services 上使用 SQL Server 进行扩展? Amazon Relational Database Service 看起来不像用于 SQL Server。我会在 Windows 实例上运行它吗?我将如何扩展。

【问题讨论】:

  • 如果你能定义“规模”,那将有很大帮助。我们需要知道您是否只是在寻求运行“普通”应用,或者我们是否需要考虑垂直或水平扩展的解决方案。

标签: c# asp.net sql-server amazon-ec2 amazon-web-services


【解决方案1】:

如果您想轻松扩展,可能需要查看 Windows Azure (www.microsoft.com/windowsazure)。 Azure 让您“随用随付”——为您实际使用的带宽和存储付费,同时使其基本上成为横向扩展的配置设置。

使用 Amazon,您所获得的只是一堆虚拟机 - 如果您希望以这种方式向外扩展,则需要做大量工作才能将其转变为网络场和 SQL Server 集群。此外,在集群情况下,SQL Server 许可证会变得非常昂贵。但如果您想从小处着手,您始终可以拥有一个用于 Web 服务器的 Amazon VM,托管您的 ASP.NET 应用程序,以及一个运行 SQL Server 的 VM。

【讨论】:

  • Sql Azure 不会仅使用配置文件或自动进行水平扩展。 Sql Azure 只是一个实例。您需要研究并在数据库中添加联邦,这与“添加实例”或“更新配置文件”不同。
【解决方案2】:

您的应用程序中有两个不同的元素。有应用程序服务器,它是持有 ASP .Net 应用程序的服务器,还有数据库服务器。

Web 应用程序服务器本质上是无状态的,因此扩展应用程序服务器将非常容易。只需将应用程序部署在多个实例上,然后在它们前面放置一个负载均衡器。

对于数据库服务器,事情要复杂得多。关系数据库由于其事务性和关系性质,很难横向扩展,这通常涉及在应用程序级别编写自定义代码以支持横向扩展方案。这实际上是一个重要方面,因为可扩展性不会简单地通过添加更多硬件(更多机器)来透明地实现,而且您还必须在编码方面进行投资。使用 Sql Server 进行横向扩展的两种最流行的方法可能是镜像和分区。当 Sql Server 部署在云中时,云本身对横向扩展没有任何帮助,它仍将基于内置选项。

除了在一定程度上涉及非免费数据库解决方案的复杂性之外,水平扩展可能会比垂直扩展更昂贵。例如,考虑以下场景:

1 x 10000$ 机器 + 1 x 8000$ Sql Server 专业许可证 = 18000$

10 x 1000$ 机器 + 10 x 8000$ Sql Server 专业许可证 = 90000$

因为它只需要一个 Sql Server 许可证,所以一台昂贵的机器最终会比使用 10 台廉价机器和 10 个许可证便宜得多。

现在我已经到了在云中扩大规模的地步,事情变得有点复杂了。云提供商给你的本质上是虚拟机。虚拟机在划分 CPU 和 RAM 内存方面非常出色,如有必要,您可以通过增加更多 CPU 功率和更多内存来增加机器的功率。这很好,但数据库高度依赖于 I/O(硬盘)速度,而这是虚拟机表现不佳的一个领域。

Amazon 云服务和 Sql Server 相关,我可以推荐 this 非常好的文章(我实际上是通过 @marc_s 提供的链接了解的)。为了在扩展场景中获得良好的 I/O 速度,作者使用了EBS 卷。这种方法的问题在于,EBS 卷不是您部署数据库的服务器内部的硬盘,而是可通过网络访问的存储卷,这会大大降低其效率。

如果您不依赖亚马逊,那么您可以尝试在其基础架构中提供物理机(专用服务器)的云提供商。据我所知 gogrid 正在这样做,但可能还有其他人。想法是将数据库部署在专用服务器上(良好的 I/O 性能),并将应用程序服务器部署在虚拟机上(可水平扩展)。

Microsoft 也提供云服务,称为 Windows Azure,它可能是目前最有趣的产品之一,但在我看来,他们的关系数据库产品让它失望了。他们为此提供了专门的服务,称为Sql Azure。它的主要优点之一是它比普通数据库更容易管理,但不利的一面是它非常受限于扩展。唯一的扩展选项是数据库大小,最多只能达到 50Gb。他们没有提及任何关于 DB 提供的性能的信息,您也无法进行任何与此相关的配置。性能可能低于廉价专用服务器的性能(事实上,StackOverflow 上有一些帖子有人抱怨 Sql Azure 的速度与物理机相比)。您可以使用分片进行横向扩展,但如上所述,这确实会影响和限制数据库结构及其在代码中的使用方式。

结论

  • 如果您正在构建对关系数据有非常大需求的业务应用程序,那么云提供商可能不是您的最佳选择。您可以考虑使用自己的硬件,或者可以考虑使用可以让您选择使用专用服务器的提供商。
  • 您可以考虑使用 nosql 数据库解决方案构建您的应用程序。这些更具可扩展性,但不利的一面是它们有一些功能限制(没有事务、没有连接、有限的索引)。如果您对这种方法感兴趣,Sql Table Storage 可能是一个起点。您也可以考虑一种混合方法,这将涉及到您的部分数据将保存在关系数据库中,而部分数据将保存在 nosql 数据库中。
  • 在扩展数据库之前,请检查是否没有任何其他选项可以先尝试。例如,检查是否存在低效查询或构建缓存层,这取决于应用程序,可以减轻数据库的很大压力。

【讨论】:

  • 您可能希望使用名为“预置 iops”的新增功能来更新您的答案。它允许您为 RDS 实例配置特定数量的 IO/s。
猜你喜欢
  • 2013-09-10
  • 2012-05-22
  • 2012-03-28
  • 2020-11-26
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
相关资源
最近更新 更多