我们目前正在尝试RDS,并且遇到了一些非常糟糕的性能。我无法找出瓶颈所在,不胜感激!

我们有一个简单的Web应用程序,可在丹麦的IIS服务器上运行。现在,我们的数据库也位于此IIS服务器上。我们的Web应用程序是老式的,因此在服务器响应文档之前,它会进行约30个数据库查询以生成初始HTML文档。



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

localhost: 7 seconds
Dev-server: 0.9 seconds
Prod-server: 0.5 seconds


(dev和prod服务器位于同一数据中心内-不是aws。所有服务器都使用位于prod服务器上的数据库)

对于使用sql表示的T2 Medium rds实例,加载时间如下:

localhost: 12.22 seconds
Dev-server: 24.76 seconds
Prod-server: 11.49 seconds


澄清服务器配置
正如John Rotenstein所指出的那样,我可能对服务器的配置和位置不太清楚,所以我将在这里进行澄清。
我们的生产数据库与applicaton一起在我们的生产服务器上运行。这是一个单一的整体实例,可以完成所有工作。我的所有第一个测试都使用生产数据库。服务器和我/本地主机位于丹麦,而RDS实例位于法兰克福/德国。
因此,对于RDS测试,我在丹麦的服务器上运行应用程序逻辑,而在德国使用RDS数据库。



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

我短暂地尝试制作一个M4大型RDS实例,以检查是否仅仅是使用规格不佳的实例的问题,但是我看到的结果完全相同。

数据库没有任何东西都用尽,cpu积分似乎很多,cpu徘徊在1-4%左右。
我已经使用SQL Server Profiler来检查查询是否存在问题(可能是索引在有限的ram上无法正常工作,或者读取速度很慢),但是每个单独的查询都非常快-尽管它们相当离的远。

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

有人可以帮我找到瓶颈吗?还是仅仅是由于网络延迟而引起的?我原本希望通过将数据库移离应用程序而导致网络损失,但幅度不大。此安装程序是否可行-还是仅当我们将IIS服务器放在相同的可用区域中时才起作用?

任何见解将不胜感激!

*编辑了一些错字..

最佳答案

根据您的评论和原始问题,我认为您的应用程序无法很好地适应应用程序和数据库之间的高延迟连接。 DirectConnect可能会有所改进,但始终会成为瓶颈。我强烈建议不要尝试使用远程数据库运行生产应用程序,除非有非常强烈的动机。在理想的情况下,Id建议您研究并行化,缓存和优化-但是,如果您坚持只需要托管的内容,这就是我的方法。

CloudFront CDN,具有某些ec2实例的自动伸缩组,具有ACM证书的负载均衡器和多个az rds实例。所有服务都是彼此本地的,我怀疑您的应用程序性能会更好。此配置将提供地理位置独立的位置,同时运行IIS和SQL的副本以实现容错功能。基本概要:


CloudFront CDN。这是您指向DNS的地方。使用IIS中的缓存头可以使静态资产缓存在边缘位置,从而加快页面加载速度/减少后端IIS的负载。动态请求将通过CloudFront传递到负载平衡器,然后透明地返回给客户端。
自动缩放组。管理在连接到负载平衡器的可用性区域之间划分的实例集。提供基于触发器的/计划的实例缩放比例,并可以重新生成不正常的实例。实例可以预先配置并保存为AMI,也可以在启动时通过UserData脚本动态配置。
负载平衡器(ALB)。区域级别的负载平衡器将处理aws可用区的故障,将可用流量路由到其余可到达的实例。您可以在负载平衡器上配置SSL卸载,因此实例 ALB通过HTTP进行通信,但是公共只通过HTTPS与负载平衡器通信。您还可以在实例上设置自己的SSL,并使ALB也通过HTTPS与后端实例进行通信,但是它的工作量更大。
ACM证书(证书管理器)。它是经过DNS验证的基本SSL证书。您不能下载并自己使用它,它仅适用于CloudFront和Load Balencers等-但它是免费的!如果将它们转换为正确的格式并附加到负载平衡器,您仍然可以上传自己的证书/中间证书/主密钥。
多可用区RDS。您将获得一个单一的区域/容错端点,并且AWS会处理大多数细节。实际上,您有2个服务器位于不同的可用区中,其中一个活动实例将数据复制到一个单独的备用从属实例。如果主机不可用,则从机将透明接管。


就启用此功能而言,需要检查一些事项。确保您的SSL证书覆盖了站点名称(www.example.com)和裸/顶点域(example.com),并且IIS处理了将流量重定向到相应站点的操作。另外,还要确保将DNS TTL减小到适当的较小值,以进行合理的响应更改(如果存在重大问题,则进行回滚)。您需要允许当前的TTL过期,然后才能对TTL进行完全更改,因此,请提前进行计划(如果该值很高,则可以逐步更改TTL)。

07-24 09:39
查看更多