У меня есть приложение MVC и WebAPI, которому необходимо регистрировать действия, выполняемые пользователями, в моей базе данных. Это почти всегда одна вставка в таблицу, которая имеет менее 5 столбцов (т. е. очень мало данных передается по сети). Интерфейс данных, который я сейчас использую, — Entity Framework 6.
Время от времени я получаю большое количество пользователей, которым необходимо регистрировать, что они выполнили одно действие. В этом случае «Большое число» может составлять пару сотен запросов в секунду. Обычно это длится не более нескольких минут. В остальное время я вижу очень управляемый трафик на сайт.
Когда трафик резко возрастает, некоторые из моих клиентов получают ошибки тайм-аута, потому что страница не завершает загрузку до тех пор, пока сервер не вставит данные в базу данных. Теперь фактическая вставка данных в базу данных не требуется для того, чтобы пользователь продолжал использовать приложение, поэтому я могу кэшировать эти запросы где-то локально, а затем вставлять их позже.
Существуют ли хорошие решения для ASP.NET MVC для буферизации входящих данных запроса, а затем пакетной вставки их в базу данных каждые несколько секунд?
Что касается моей среды, у меня есть несколько серверов, работающих под управлением Server 2012 R2, в веб-ферме с балансировкой нагрузки. Я бы предпочел оставаться без гражданства, если это вообще возможно, потому что пользователи могут обращаться к разным серверам для каждого запроса.