ASP.NET +实体框架 - 处理间歇性流量峰值

时间:2015-09-11 20:32:02

标签: c# asp.net entity-framework web-traffic

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

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

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

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

至于我的环境,我在负载均衡的Web Farm中有几台运行Server 2012 R2的服务器。如果可能的话,我宁愿保持无状态,因为用户可能会针对每个请求点击不同的服务器。

1 个答案:

答案 0 :(得分:2)

  

当流量激增时,我的一些客户端会收到超时错误,因为在服务器将数据插入数据库之前,页面未完成加载。

我建议使用消息队列。让网站呈现代码只是将一个对象发布到代表该操作的队列,并让一个单独的进程(例如Windows服务)从队列中读取并使用Entity Framework写入数据库。

<强>更新

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

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