2

我有一个 MVC 和 WebAPI 应用程序,需要将用户执行的活动记录回我的数据库。这几乎总是一次插入到少于 5 列的表中(即很少有数据通过网络)。我目前使用的数据接口是Entity Framework 6

每隔一段时间,我就会有大量用户需要记录他们执行了一项活动。在这种情况下,“大量”可能是每秒几百个请求。这通常最多只会持续几分钟。其余时间,我看到网站的流量非常可控。

当流量激增时,我的一些客户端会收到超时错误,因为在服务器将数据插入数据库之前页面没有完成加载。现在,用户不需要将数据实际插入数据库就可以继续使用应用程序,因此我可以将这些请求缓存在本地某处,然后再批量插入它们。

ASP.NET MVC 是否有任何好的解决方案来缓冲传入的请求数据,然后每隔几秒将它们批量插入数据库?


至于我的环境,我有几台服务器在负载平衡的 Web Farm 中运行 Server 2012 R2。如果可能的话,我宁愿保持无状态,因为用户可能会根据请求访问不同的服务器。

4

1 回答 1

2

当流量达到峰值时,我的一些客户端会出现超时错误,因为在服务器将数据插入数据库之前页面没有完成加载。

我建议使用消息队列。让网站渲染代码简单地将一个对象发布到代表动作的队列中,并让一个单独的进程(例如 Windows 服务)从队列中读取并使用实体框架写入数据库。

更新

或者,您可以记录对文件的访问(快速),并让单独的进程读取文件并将信息写入数据库。

我更喜欢消息队列选项,但它确实增加了另一个架构。

于 2015-09-11T20:35:15.610 回答