У нас есть ситуация, когда мы вызываем функцию в API, которая довольно дорогая.Давайте назовем это API.ExpensiveCall()
Этот ExpensiveCall()
часто вызывается в веб-приложении.Хотя это не заметно для одного пользователя, оно становится заметным, если у вас есть 5 или более пользователей одновременно.
Мы хотим кэшировать эти результаты.Но поскольку API.ExpensiveCall()
по сути является для нас черным ящиком, у нас нет способа аннулировать наш кэш, чтобы знать, когда обновлять.
Поэтому мы предложили решение создать службу Windows, которая просто вызывала бы этоAPI.ExpensiveCall()
каждые десять секунд, затем сохраняйте результаты в локальной базе данных, которую веб-приложение уже использует.
Таким образом, не имеет значения, если на сайте есть 1 пользователь или более 20 пользователей, ExpensiveCall()
вызывается только каждые 10 секунд.Это очень контролируемая нагрузка на внешнюю систему, к которой подключен API.ExpensiveCall()
.
Проблема
Наш руководитель проекта не согласен с этим.По какой-то причине он считает, что обновление по расписанию каждые 10 секунд - плохая идея, потому что, по его мнению, слишком сильно загружает внешнюю систему.
Но если мы ничего не сделаем с этим и оставим вещив отличие от кэширования, это не только снижает производительность веб-приложения, но и определенно приводит к тому, что во внешней системе он будет вызывать более одного ExblyCall в секунду.И это число будет умножаться в зависимости от количества пользователей в веб-приложении.
Я хотел бы спросить вас, действительно ли такой способ кэширования - плохая идея?Вы слышали о других системах, использующих такой метод для кэширования?И если это такая плохая идея, есть ли альтернативные более эффективные способы кэширования результатов системы, когда для вас это черный ящик?
РЕДАКТИРОВАТЬ:
Вашответы, кажется, указывают, что я должен использовать функцию тайм-аута механизма кэширования памяти ASP.Net.
Мне нравится идея тайм-аута.Единственная (небольшая) проблема, с которой я сталкиваюсь сейчас, заключается в том, что, когда истечет время ожидания и наступит время вызова ExblyCall (), это будет блокирующий вызов.В отличие от запросов к локальной таблице, которая обновляется путем постоянного обновления в отдельном процессе.Это то, что я считаю привлекательным с идеей опроса.Хотя я должен признать, что это странно - опрашивать каждые 10 секунд, вот почему я нахожусь на заборе по этому поводу.