跟踪多个服务/组件的性能的最佳方法是什么

时间:2015-10-29 13:54:46

标签: c# performance web-services

我们的应用程序包含多项服务。让我们说:

  1. 授权服务
  2. 商业服务Alpha
  3. 商业服务测试版
  4. 这些服务大多数是.Net,但不一定都是.Net。大多数是我们的控制,但有两个是外部服务,最终可能会有更多。最终,我们的.Net服务将被迁移到云端。

    端到端的性能很重要,而且现在,我们正在努力查看性能瓶颈所在的大局。我们正在考虑的几个想法是:

    1. 创建每个.Net组件将写入的公共日志文件。我们将寻找可以生成端到端瀑布的工具。
    2. 创建将接收日志记录调用的异步日志记录服务。我们不确定这是否也会写日志文件我们使用其他类型的存储。
    3. 对于外部服务,我们只期望调用的时间和返回的时间,但对于我们控制的那些服务,我们希望跟踪更细粒度的事件。

      任何行动方案都需要付出一些努力。在开始之前,您认为哪种模式和/或工具是跨多个服务提供有效性能数据的最佳方式。

2 个答案:

答案 0 :(得分:2)

主要问题是:对你有多大价值。

标记上有大量云端或自托管解决方案,可让您跟踪性能/错误等等。

我唯一的建议是:不要重新发明,采取预建解决方案。成本可能会低得多,就像你自己做的那样。

没有广告就很难回答你的问题但是因为你提到了.NET

Microsoft提供名为Application Insight的内容:https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-get-started/

就像

一样简单
 var tc = new TelemetryClient(); // Call once per thread

 // Send a user action or goal:
 tc.TrackEvent("Win Game");

 // Send a metric:
 tc.TrackMetric("Queue Length", q.Length);

 // Provide properties by which you can filter events:
 var properties = new Dictionary{"game", game.Name};

 // Provide metrics associated with an event:
 var measurements = new Dictionary{"score", game.score};

 tc.TrackEvent("Win Game", properties, measurements);

看看它,比较一些其他工具并选择一个符合您需求的工具。

答案 1 :(得分:0)

我已经得出结论,以下自助选项提供了价值:

  1. 添加将在整个过程中流动的GUID。
  2. 添加某种类型的切换,可用于打开"详细"针对单个请求按需记录。
  3. 当"详细"已选择日志记录,为该GUID创建单个日志文件,并将计时记录到单个事件日志中。
  4. 这不是一种工业强度解决方案,但是当您可以控制各个组件/服务时,您可以轻松地一目了然地了解系统中的高级性能流。这在开发过程中非常有用。

    当我们发现哪些拼图会造成最大的瓶颈时,我们将转向使用更专业的工具来更精细地分析性能。