在我们的许多网络应用程序中,我们调用第三方API,如Twitter等。那里没什么新东西。
我们想要做的是获取有关我们网站使用情况的一些统计信息 - >我们每个小时和每天拨打多少免费和付费第三方API的电话。
我不确定我们怎么做到这一点。
现在,我之前使用过 Performance Counters 取得了巨大成功,但它们非常有限(除非我没有正确使用它们)。首先,它们递增/递减int值。因此,如果我们需要查看特定API 一段时间内的流量,我们需要让PerfMon 运行 ...这是不可能的(即我们的经理不会/不应该/永远不会访问实时网络服务器。
所以我不确定其他人在这个场景中做了什么?
我是否应该有一个应用程序状态变量来记录请求的时间?然后你可以使用linq或其他东西来汇总到SUM / COUNT吗?那个网络农场呢? (应用程序状态是每台机器)。然后添加AppFabric?
下一个典型的响应是使用数据库。嗯,这很好......直到你有很多外部api请求..这意味着从服务器到数据库有很多开销流量..这可能会减慢/瓶颈。
在此之后,我想也许是混合选项的情况。使用应用程序缓存然后每隔5分钟,如果数字已更改,则转储到数据库。这可能会导致一些负载问题,但它仍然会为系统增加额外的复杂性。
然后我回到性能计数器的想法......我喜欢它(因为它被编码到核心操作系统中以处理高流量而不会影响(或影响最小可能的数量)性能....但现在我回到第1步 - 如何使用性能计数器来制作基于时间的结果。
可能再次使用应用程序状态,每个小时/每当固定时间将结果转储到perf计数器(而不是db)?
任何人都有任何想法,请:)
答案 0 :(得分:0)
您可以创建自己的性能计数器,将它们安装到主机服务器,然后在每次拨打电话时点击它们。然后,您将获得每个主机的使用量。然后,您可以编写一个脚本(PowerShell),允许您从服务器场中的各个服务器收集计数器统计信息。或者您可以使用另一个Windows服务执行与powershell脚本相同的操作,并将统计信息转储到数据库中以进行报告。
这是假设的。我之前创建并使用过性能计数器,但仅限于单个Web服务计算机。执行此操作的过程需要管理权限。
答案 1 :(得分:0)
您的Web服务器是否通过任何类型的代理发送传出请求?您可以使用它的日志来获得您想要的内容。
答案 2 :(得分:0)
.NET提供了CounterSample
和CounterSampleCalculator
,可以方便地访问性能计数器数据,并能够根据样本计算一些简单的指标(计数,每秒的速率,一段时间内的平均值)服用。
我希望Web应用程序写入计数器,然后创建一个Windows服务,负责读取它们(即,这将代替您在原始问题中提到的perfmon.exe
)。
可以从远程计算机读取性能计数器。根据您的负载和采样率,可能此服务将在单独的计算机上运行,并从多个Web服务器收集数据。它还拥有持久的统计数据。这样可以最大限度地减少Web服务器本身的开销。