Мы используем базу данных PostgreSQL и сервер AppFabric, на котором запущен умеренно загруженный сайт электронной коммерции ASP.NET MVC.
Следуя шаблону без кеша, мы запрашиваем данные из нашего кеша, и если они недоступны, мы запрашиваем базу данных.
Этот подход приводит к «шторму запросов», когда база данных получает несколько запросов на одни и те же данные за короткий промежуток времени, в то время как данный объект в кэше обновляется. Эта проблема усугубляется более длительными запросами, и очевидно, что несколько запросов на одни и те же данные могут привести к тому, что запрос будет выполняться дольше, образуя неприятную петлю обратной связи.
Одним из решений этой проблемы является использование блокировки чтения в кэше. Однако это само по себе может вызвать проблемы с производительностью в ситуации с веб-фермой (или даже на одном занятом веб-сервере), поскольку веб-серверы блокируются при чтении без причины, если выполняется запрос к базе данных.
Другим решением является отказ от шаблона кэширования и независимое заполнение кеша. Это подход, который мы использовали, чтобы смягчить непосредственные проблемы, которые мы наблюдаем с этой проблемой, однако это возможно не со всеми данными.
Я что-то упустил здесь? И какие другие подходы люди использовали, чтобы избежать такого поведения?