我们有一个非常大的网站,每月处理几百万访问者,我们目前正在为我们的一些合作伙伴开发API。在不久的将来,我们希望向所有访问者公开API。
由于我们试图限制请求的数量,即100.000 /天和1.000 /分钟,我需要记录每个API密钥的请求总数,并验证API用户是否未超过此总数。我们不会实时检查此时是否超出限制,而是检查站点控制面板中的后续内容。我们还需要在控制面板中显示每个用户的时间表,因此如果需要,我们必须快速获得每日或每小时的概述。
我的第一个想法是构建以下应用程序:
API用户=> Webserver =>将带有API密钥的消息发布到消息队列=>服务选择消息=>发布到数据库,每个用户小时组合有一个项目(键|小时|计数)。这将是相当快的,但我们将删除相当一些有用的信息(查询,请求/分钟等)。将每个请求作为单独的记录保存在数据库中可能每天产生数百万条记录,并且(我猜测,我不是那么多DBA)在生成一些图表时会非常慢。即使有正确的指数。
我们的平台包括大约10个网络服务器,10个前端SQL服务器,统计服务器,以及其他一些用于处理大型任务的服务器。所有Windows(我们的EMC除外)和MS SQL。开发平台是ASP.Net WCF。
答案 0 :(得分:2)
我的建议是记录所有内容 - 一个简单的仅附加文本文件是最简单的 - 并且有一个后台任务定期读取并将日志段汇总到数据库中。与更“复杂”的方法相比,这有几个优点:
答案 1 :(得分:0)
我首先开始记录,然后不执行。您的日志记录可能会向您显示您不需要执行,或者它可能表明您需要执行其他类型的操作。
我刚开始创建一个简单的日志记录API:ApiLogger.Log(apiKey)
。我让记录器从HttpContext
获取身份验证信息等。我首先开始将它转储到数据库表中,只有在性能要求时才会变得更加漂亮。
以后的分析可以确定谁在拨打多少电话,是否需要多层,每层收取不同金额等等。但目前,只需存储您的商务人士所需的数据。
答案 2 :(得分:0)