Это зависит от многих факторов. Когда вы ссылаетесь на кеш, вы имеете в виду стандартный кеш, предоставляемый Asp.Net?
Абсолютно важно, чтобы у вас всегда была самая свежая информация, или если два запроса сделаны для распределения, это нормально, чтобы они были распределены двум наименее занятым пользователям в момент запроса?
Вы действительно можете использовать кеш для хранения этой информации, однако, как правило, предполагается, что вы будете использовать только один сервер, вероятно, вы будете использовать кластеризацию или балансировку нагрузки для высоких нагрузок?
Лучший совет, который я могу вам дать, - это создать хорошо спроектированное приложение с богатой моделью предметной области, отражающей нагрузки каждого пользователя и очереди, а также слабосвязанный доступ к данным и множество автоматизированных модульных и системных тестов. Таким образом, вы можете создать работающее приложение, быстро запустить и запустить систему, не беспокоясь об оптимизации, и начать тестирование производительности \ профилирование как можно скорее.
Если \ когда вы сталкиваетесь с проблемами производительности, вы можете идентифицировать узкие места, профилируя / отслеживая и добавляя оптимизацию, в зависимости от ситуации, которая может быть кэшированием или оптимизированными запросами \ представлениями или комбинациями вещей.
Если вы попытаетесь угадать, где находятся узкие места, и удалите их, вы, скорее всего, догадаетесь неправильно и повредите конструкцию системы. Хорошо спроектированная система может быть оптимизирована, когда вам это нужно.
То, как я первоначально предполагал это, было бы реляционной базой данных (возможно, с использованием представлений или хранимых процедур для быстрого получения сводной информации о рабочей нагрузке) с уровнем отображения данных между этим и моделью предметной области (которая может использовать кэширование, отложенную загрузку и отображение идентичности для обеспечения эффективности при необходимости). Модель предметной области в значительной степени содержала бы представление о рабочей нагрузке.
Я ожидаю, что в нем будут пользователи, рабочие элементы, рабочая очередь и классы стратегии распределения. Большая часть этого может храниться в памяти или храниться локально между запросами, каждый запрос может быть представлен событием, которое обновит модель.
например.
Пользователь завершает рабочий элемент
Сайт инициирует событие домена, чтобы уведомить модель изменения домена
Модель домена получает событие и обновляет рабочую нагрузку для пользователя
В этом случае распределение работы будет зависеть от запроса модели домена для распределения работы (что будет сделано посредством стратегии поиска наименее выделенного пользователя), когда это необходимо. Это может происходить в фоновом режиме за пределами отдельных рабочих запросов и событий, инициируемых для уведомления пользователей при следующем запросе работы.