I'm building a KPI monitoring web app. It used to work perfectly fine with a few users, but lately the load increased, causing problems with our backend systems. Some of them are very expensive to license, others are hard to scale mainframes.
It is very important for the business to never show data which is more that 10 min old. Ideally I'd like to call my backend once every 10 min, but only if there are active users.
My biggest problem currently is that most users start work at the same time and my app receives 30-40 requests in the matter of a few seconds.
How can I reliably solve this issue?
I've tried creating a static object in Global.asax.cs. That got very complex very fast, as I needed locking and a way to signal to pages that there is a backend info retrieval in progress.
I've also used CacheCow.Server in the past, but it's WebAPI only and it felt like a black box I don't really understand.
Can you give me an advice on how to proceed please?
Have you tried using the OutputCache attribute? (The link is to older docs, but it's still valid).
The output of that action will be cached for the number of seconds specified, in this case, 10 minutes.