【问题标题】:Multi-server n-tier synchronized timing and performance metrics?多服务器 n 层同步时间和性能指标?
【发布时间】:2014-09-06 20:44:08
【问题描述】:

[我不确定是在 stackoverflow 还是 serverfault 中发布,但由于这是一个 C# 开发项目,我会坚持使用 stackoverflow...]

我们有一个多层应用程序在一天中不可预测的时间表现出较差的性能,我们正在努力追查原因。它特别难以修复,因为我们无法在我们的开发环境中重现它——这只是我们生产服务器上的零星问题。

架构如下:运行 MVC 应用程序 (C#) 的负载平衡前端 Web 服务器 (IIS)。一种自主开发的服务总线,通过在域集成模式下运行的 MSMQ 实现。五个“工作池”服务器,运行我们的 Windows 服务,响应放在总线上的请求。后端 SQL Server 2012 数据库,镜像和复制。

所有服务器都具有高规格硬件,运行 Windows Server 2012、最新版本、最新 Windows 更新。一切都是最新的。

当用户在 MVC 应用程序中点击一个动作时,控制器本身非常薄。它所做的几乎就是将请求消息放在总线上(发送 MSMQ 消息)并等待回复。

工作池中的一个服务器接收消息,确定要做什么,然后在 SQL Server 后端执行查询并执行其他繁重的工作。然后将结果放回总线上,以便 MVC 应用程序使用 Correlation ID 进行备份。

就每个单独组件的简单性而言,这是一个很好的架构。随着需求的增加,我们可以简单地将更多服务器添加到工作池中,一切正常。它还允许我们在中间层热交换代码。大多数情况下,该解决方案的性能都非常好。

但是,如前所述,我们确实在某些时候会出现性能问题。事实证明,很难追踪架构中的哪个点是瓶颈。

我们尝试做的是通过总线发送一个请求并将其往返返回到 MVC 应用程序,并在消息中嵌入一整套时间和指标。在路线上的每个站点,都会将时间戳和其他指标添加到消息中。然后,当 MVC 应用收到回复时,我们可以屏幕转储时间戳和指标,并尝试确定是哪个进程的部分导致了问题。

但是,我们很快意识到我们不能将 Windows 时间作为准确的衡量标准,因为我们的许多进程都降到了 5-100 毫秒级别,并且一条消息可以通过 5 台服务器(然后又返回)。我们无法将服务器之间的时间同步到该分辨率。微软文章:http://support.microsoft.com/kb/939322/en-us

为了使问题更加复杂,每次我们发送请求时,我们都无法预测哪个特定的工作池服务器将处理该消息。

获得精确到 5 毫秒级别的准确、协调和同步时间的最佳方法是什么?如果我们必须在每一步调用外部(Web)服务,这将增加额外的过程时间,我们如何保证每个调用在每台服务器上花费相同的时间?即使是在一台服务器上的外部调用中的少量延迟也会扭曲结果并给我们一个误报。

希望我已经解释了我们的困境并期待您的帮助。

更新

我刚刚找到了这个:http://www.pool.ntp.org/en/use.html,这可能很有希望。也许每隔 x 小时安排一次工作以保持时间同步可以让我达到我需要的 5 毫秒以下的分辨率。意见或经验?

更新 2

FWIW,我们找到了性能问题的原因。当软件在打开队列之前测试队列是否已创建时,就会发生这种情况。所以它本质上是查找队列两次,这是相当昂贵的。所以这个问题已经解决了。

【问题讨论】:

    标签: c# asp.net asp.net-mvc time windows-server


    【解决方案1】:

    您应该尝试使用作为 Windows 本身一部分的性能监视器。您可以做的是在每台服务器上创建一个Data Collector Set,然后选择您要监控的指标。像请求执行时间这样的东西是一个很好的监控。

    这是数据收集器集的教程:https://www.youtube.com/watch?v=591kfPROYbs

    希望这能让您开始解决问题。

    【讨论】:

    • 我们经常使用 perf mon,但我们需要协调整个堆栈、所有服务器和层的跟踪。我们不仅需要检测每台服务器上运行的进程,还需要检测跨网络边界的传输和接收。没有它,我无法确定是代码、层、硬件还是其他任何东西。
    • 可能是,但我们已经进行了广泛的测试。网络很少超过 5%。这就是为什么我需要检查整个堆栈。
    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多