建议API时记录请求数量的建议?

时间:2009-05-15 11:43:44

标签: sql wcf api logging

我们有一个非常大的网站,每月处理几百万访问者,我们目前正在为我们的一些合作伙伴开发API。在不久的将来,我们希望向所有访问者公开API。

由于我们试图限制请求的数量,即100.000 /天和1.000 /分钟,我需要记录每个API密钥的请求总数,并验证API用户是否未超过此总数。我们不会实时检查此时是否超出限制,而是检查站点控制面板中的后续内容。我们还需要在控制面板中显示每个用户的时间表,因此如果需要,我们必须快速获得每日或每小时的概述。

我的第一个想法是构建以下应用程序:

API用户=> Webserver =>将带有API密钥的消息发布到消息队列=>服务选择消息=>发布到数据库,每个用户小时组合有一个项目(键|小时|计数)。这将是相当快的,但我们将删除相当一些有用的信息(查询,请求/分钟等)。将每个请求作为单独的记录保存在数据库中可能每天产生数百万条记录,并且(我猜测,我不是那么多DBA)在生成一些图表时会非常慢。即使有正确的指数。

我们的平台包括大约10个网络服务器,10个前端SQL服务器,统计服务器,以及其他一些用于处理大型任务的服务器。所有Windows(我们的EMC除外)和MS SQL。开发平台是ASP.Net WCF。

3 个答案:

答案 0 :(得分:2)

我的建议是记录所有内容 - 一个简单的仅附加文本文件是最简单的 - 并且有一个后台任务定期读取并将日志段汇总到数据库中。与更“复杂”的方法相比,这有几个优点:

  • 这更简单。
  • 调试非常简单。
  • 您可以保留各个日志段,直到需要从磁盘中删除它们为止,这样您就可以获得有关各个请求的信息以进行调试和记帐。
  • 您可以轻松扩展它以收集更多信息,或改进和更改摘要生成器,因为组件松散耦合。
  • 很容易分片 - 让每台服务器保留自己的日志。

答案 1 :(得分:0)

我首先开始记录,然后不执行。您的日志记录可能会向您显示您不需要执行,或者它可能表明您需要执行其他类型的操作。

我刚开始创建一个简单的日志记录API:ApiLogger.Log(apiKey)。我让记录器从HttpContext获取身份验证信息等。我首先开始将它转储到数据库表中,只有在性能要求时才会变得更加漂亮。

以后的分析可以确定谁在拨打多少电话,是否需要多层,每层收取不同金额等等。但目前,只需存储您的商务人士所需的数据。

答案 2 :(得分:0)

  

由于我们试图限制请求的数量,即100.000 /天和1.000 /分钟,我需要记录每个api密钥的请求总数,并验证api用户是否未超过此总数。

这样的功能将在不久的将来成为WCF的一部分(如果还没有)。我目前在听到它的地方绞尽脑汁所以我可以直接指出你。

编辑:发现它! 本周在一个名为“The Thirsty Developer”的播客上,出现了这个话题。下载播客here,然后在39:40进入播客主题。对于那些不想听的人,有一个REST工具包,其中包含此功能。我认为工具包可以找到here