Sql server 当数据库和web服务器分离时,是否真的需要糟糕的RDS性能?

Sql server 当数据库和web服务器分离时,是否真的需要糟糕的RDS性能?,sql-server,amazon-web-services,networking,amazon-rds,database-performance,Sql Server,Amazon Web Services,Networking,Amazon Rds,Database Performance,我们目前正在尝试RDS,并且遇到了一些非常糟糕的性能。我无法找出瓶颈在哪里,希望得到一些指导 我们有一个简单的web应用程序,在位于丹麦的IIS服务器上运行。现在我们的数据库也位于这个IIS服务器上。我们的web应用程序相当过时,因此在服务器响应文档之前,它会进行大约30次数据库查询以生成初始HTML文档 使用我们当前的数据库设置(位于prod服务器上),文档加载时间如下: localhost: 7 seconds Dev-server: 0.9 seconds Prod-server: 0.

我们目前正在尝试RDS,并且遇到了一些非常糟糕的性能。我无法找出瓶颈在哪里,希望得到一些指导

我们有一个简单的web应用程序,在位于丹麦的IIS服务器上运行。现在我们的数据库也位于这个IIS服务器上。我们的web应用程序相当过时,因此在服务器响应文档之前,它会进行大约30次数据库查询以生成初始HTML文档


使用我们当前的数据库设置(位于prod服务器上),文档加载时间如下:

localhost: 7 seconds
Dev-server: 0.9 seconds
Prod-server: 0.5 seconds 
localhost: 12.22 seconds
Dev-server: 24.76 seconds
Prod-server: 11.49 seconds
(开发人员和prod服务器位于同一数据中心,而不是aws。所有人都使用prod服务器上的数据库)

对于使用sql express的T2中型rds实例,加载时间如下:

localhost: 7 seconds
Dev-server: 0.9 seconds
Prod-server: 0.5 seconds 
localhost: 12.22 seconds
Dev-server: 24.76 seconds
Prod-server: 11.49 seconds
服务器配置澄清 正如John Rotenstein指出的,我可能对服务器的配置和位置有点不清楚,所以我将在这里澄清。 我们的生产数据库与应用程序一起运行在我们的生产服务器上。这是一个单一的单片实例,可以完成所有操作。我的第一次测试都使用了生产数据库。服务器和me/localhost位于丹麦,RDS实例位于法兰克福/DE。 所以对于RDS测试,我在丹麦的服务器上运行应用程序逻辑,同时在德国使用RDS数据库


RDS实例位于法兰克福。我发现这个数据中心的ping时间最短

我曾短暂尝试制作一个M4大型RDS实例,以检查是否只是使用了一个规格不高的实例,但我看到了完全相同的结果

数据库在任何方面都没有最大化,似乎有大量的cpu积分,cpu在1-4%左右徘徊。 我使用SQL Server Profiler检查查询是否有问题(可能是索引在有限的ram下无法正常工作,或者只是读取速度慢等等),但每个查询都非常快,尽管它们相距很远

我尝试将存储类型从通用更改为配置,但未发现任何更改

有人能帮我找到瓶颈吗?或者这仅仅是由于网络延迟造成的?我原本以为数据库会离应用程序更远,但不会有这么多,这会对网络造成损失。这个设置是可行的吗?还是只有当IIS服务器位于同一可用区域时,它才能工作

如有任何见解,将不胜感激

*编辑了一些打字错误。

您的性能指标(响应)在迁移到云端时会变得更差。这似乎是明智的,因为在同一个数据中心(原始DC)内执行时,移动到云可能需要多个网络跃点(基于您的AZ或地区)才能完成。然而,我仍然不相信这种差异。在不了解AWS中的基础设施设置的情况下,很难量化这种差异的原因

现在,回到你的问题上来。据我所说,你没有看到任何明显的性能差异的原因不是因为你原来的DC或搬到AWS。相反,这可能与应用程序本身有关。如果您的应用程序生成30个同步IO(一步接一步执行),那么这就是您必须微调代码的地方。如果是这种情况,那么您可以实现异步IO并在响应回客户机之前合成最终结果。这种方法(假设您可以并行化当前逻辑)帮助您构建可组合的执行setp,从而减少总体响应时间


请记住,拥有高端硬件并不一定能提高性能,除非你指导你的应用程序如何最好地利用硬件。

根据你的评论和你最初的问题,我认为你的应用程序不适合应用程序和数据库之间的高延迟连接。DirectConnect可能是一种改进,但它始终是一个瓶颈。我强烈建议不要尝试运行带有远程数据库的生产应用程序,除非有非常强烈的动机这样做。在一个理想的世界里,我建议您考虑并行化、缓存和优化——但是如果您的应用程序被一些您只需要托管的东西卡住了,我会这样做

CloudFront CDN,一个具有一些ec2实例的自动缩放组,一个具有ACM证书的load balencer,以及一个多az rds实例。所有的服务都是本地的,我想你的应用程序会表现得更好。此配置将提供运行IIS和SQL副本的地理位置不同的位置,以实现容错。基本概述:

  • 云前CDN。这是您指向DNS的地方。使用IIS中的缓存头将静态资产缓存在边缘位置,以加速页面加载/减少后端IIS上的负载。动态请求将通过CloudFront传递给load balencer,然后透明地返回给客户端
  • 自动缩放组。管理在连接到load Balancer的可用性区域之间拆分的实例集。提供基于触发器/计划的实例数量缩放,并可以重新启动不健康的实例。实例可以预先配置并保存为AMI,也可以在启动时通过UserData脚本动态配置
  • 装载巴伦塞(ALB)。区域级负载balencer将处理aws可用性区域将流量路由到剩余可访问实例的故障。您可以在load balencer上配置SSL卸载,以便实例ALB通过HTTP通信,但公众仅通过HTTPS与load balencer通信。您还可以在实例上设置自己的SSL,并让ALB通过HTTPS与后端实例进行对话,但这需要更多的工作
  • ACM证书(证书)