如何跟踪使用 .NET 对其他第三方 API 进行的调用次数?

问题描述 投票:0回答:3

在我们的许多 Web 应用程序中,我们调用第三方 API,例如 Twitter 等。这并不是什么新鲜事。

我们想要做的是获取一些有关我们网站使用情况的统计数据 -> 我们每小时和每天对各种免费和付费第三方 API 进行的调用次数。

我不知道我们该如何做到这一点。

现在,我过去使用过“性能计数器”并取得了巨大成功,但它们非常有限(除非我没有正确使用它们)。首先,它们递增/递减 int 值。因此,如果我们需要查看某个时间段内有多少流量通过特定 API ,我们需要 PerfMon running ...这是不可能的(即我们的经理不/不应该/将永远无法访问实时网络服务器。 所以我不确定其他人在这个场景中会做什么?

我是否应该有一个应用程序状态变量来记录发出请求的时间?那么你可以使用 linq 或其他东西来按组求和/计数吗?现在网络农场怎么样? (应用程序状态是每台机器)。然后添加 AppFabric 吗?

下一个典型的反应是使用数据库。好吧,这很好......直到你有很多外部 API 请求......这意味着从服务器到数据库有很多开销流量......这可能会减慢/瓶颈。

此后,我想这可能是混合选项的情况。使用应用程序缓存,然后每 5 分钟一次,如果数字发生变化,则转储到数据库。这可能会缓解一些负载问题,但它仍然会增加系统的额外复杂性。

然后我回到性能计数器的想法..我喜欢它(因为它已被编码到核心操作系统中以处理高流量而不影响(或影响尽可能少的量)性能..但现在我回到步骤 1 - 如何使用性能计数器来生成基于时间的结果。

也许再次使用应用程序状态,并且每隔

小时/每当固定时间

将结果转储到性能计数器(而不是数据库)中?

任何人有任何想法,请:)

您可以创建自己的性能计数器,将它们安装到主机服务器,然后在每次调用时点击它们。然后您将获得每个主机的使用情况计数。然后,您可以编写一个脚本 (PowerShell),允许您从场中的各个服务器收集计数器统计信息。或者,您可以使用另一个 Windows 服务执行与 powershell 脚本相同的操作,并将统计信息转储到数据库中以用于报告目的。
asp.net .net performancecounter
3个回答
0
投票
这是假设的。我之前创建并使用过性能计数器,但仅限于单个 Web 服务计算机。执行此操作的过程需要管理权限。

MSDN 性能计数器

您的网络服务器是否通过任何类型的代理发送传出请求?您也许可以使用它的日志来获得您想要的东西。

0
投票

.NET 提供了

0
投票
CounterSample

CounterSampleCalculator,它们可以方便地访问性能计数器数据,并能够根据采集的样本计算一些简单的指标(计数、每秒速率、时间间隔内的平均值)。 

我会让 Web 应用程序写入计数器,然后创建一个负责读取它们的 Windows 服务(即,这将代替您在原始问题中提到的
perfmon.exe

)。

可以从远程计算机读取性能计数器。  根据您的负载和采样率,该服务可能会在单独的计算机上运行并从多个 Web 服务器收集数据。  它还将拥有持久的统计数据。  这将最大限度地减少网络服务器本身的开销。

© www.soinside.com 2019 - 2024. All rights reserved.