ASP.NET + Entity Framework - 处理间歇性流量高峰

ASP.NET + Entity Framework - handling intermittent traffic spikes

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

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

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

ASP.NETMVC缓冲传入的请求数据,然后每隔几秒批量插入数据库有什么好的解决方案吗?


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

When the traffic spikes, Some of my clients are getting timeout errors because the page doesn't finish loading until the server has inserted the data into the database.

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

更新

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

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