2

我正在一个需要能够跟踪广告印象的网站上工作。我的环境是带有 IIS 的 ASP.Net,使用 SQL Server DMBS 和可能的 Memcached,因此访问数据库的次数不多。我还必须考虑可扩展性,因为我希望这个应用程序成为一个全球现象(保持我的手指交叉并努力工作)!所以情况如下:

  • 我的客户将为 Y 次广告展示支付 X 金额
  • 然后,这些广告展示(目前只有文字广告)将显示在特定页面上。
  • 该页面由 Memcached 提供,减少了访问数据库的次数
  • 展示广告时,需要为数据库的展示次数添加一个“+1”标记

所以困境是这样的:我需要能够将“+1”刻度标记添加到每个广告印象计数器但我不能在每次加载该广告时运行该 SQL 语句。我需要以某种方式将“+1”展示次数存储在会话(或其他地方)中,然后每 X 分钟、小时或天运行一次批处理。

请记住,可扩展性在这里是一个重要因素。您的任何建议将不胜感激。

4

2 回答 2

2

我见过一些项目通过在每个 Web 场服务器上部署 SQL Server Express 版本并依靠 Service Broker 将跟踪审计交付到中央服务器来处理这个问题。因为场中的每台服务器都会更新一个本地 SQL 实例,所以它们可以扩展到天空。Service Broker 确保近乎实时的可靠交付。我已经看到网络农场平均每秒处理 300-400 个请求,长时间 24x7,并且 Service Broker 的排队特性能够在数小时内吸收每秒 5000-7500 次命中的峰值,并以合理的速度恢复时间,没有审计损失,积压工作得到控制。

If you really expect to scale and become the next MySpace, then you should learn from how they do it, and queue based asynchronous, decoupled processing is the name of the game.

于 2010-02-20T20:42:48.757 回答
1

您可以做的是将计数增加到一个不太永久的存储中,并定期(每 1 分钟、5 分钟、每小时 ..)同步到您更可靠的数据库中。

如果您的临时商店出现故障,您会在短时间内丢失点击次数;这样做的最终结果是,在罕见的故障事件中,为广告付费的人可以获得一些免费展示。

您可以向 memcache 发送“原子地将该值增加 +1”命令。您还可以在每次显示广告时将一行写入平面文件,并让您的“每 5 分钟”同步作业轮换日志,然后计算文件中刚刚轮换出来的所有行。

于 2010-02-20T18:52:24.123 回答