Вы описываете несколько проблем, возможно, вам помогут некоторые общие идеи.
Одна проблема состоит в том, что ваш сгенерированный контент слишком велик для хранения целиком, поэтому вы можете кэшировать только подмножество этого общего контента, вам понадобится: метод уникальной идентификации каждого объекта контента, который может быть сгенерирован, метод идентификации, если объект содержимого уже находится в кеше, политика пометки данных в устаревшем кеше для указания того, что фоновая регенерация должна быть запущена, и политика для истечения срока действия и замены данных в кеше. В конечном счете, простота уникальной идентификации контента должна способствовать повышению производительности, в то время как ваша политика для устаревших объектов и маркировки устаревших объектов должна использоваться для определения приоритета для фоновой регенерации объектов контента. Это могут быть простые обновления существующей схемы кэширования, с другой стороны, для вас может быть более эффективно использовать пакет программного обеспечения, специально созданный для удовлетворения этой потребности, поскольку это не является необычной проблемой.
Другая проблема заключается в том, что вы не хотите дублировать работу для регенерации контента. Если у вас есть несколько механизмов параллельной генерации с различными возможностями, это может быть не так уж плохо, и лучше всего поставить задачу в очередь для каждой и удалить задачу из всех других очередей, когда первый генератор завершит работу. Рассмотрите возможность отслеживания состояния объекта в процессе регенерации, чтобы можно было активировать несколько фоновых задач регенерации без непреднамеренного дублирования работы. Еще раз, это может быть вытеснено в вашу существующую систему кэширования или обработано специальным пакетом программного обеспечения для кэширования.
Третья проблема связана с тем, что делать, когда клиент запрашивает данные, которые не кэшированы и должны быть восстановлены. Если данные должны быть полностью регенерированы, вы застрянете, заставляя клиента ждать завершения регенерации, чтобы помочь с длительным временем генерации контента, вы могли бы определить политику для предиктивной предварительной выборки объектов контента в кеш, но для этого требуется метод для определения отношений между объектами контента. , Хотите ли вы обслуживать клиента «восстанавливающей» страницей до тех пор, пока запрошенный контент не станет доступным, действительно зависит от ожиданий вашего клиента. Рассмотрим многоуровневые кэши со сжатыми архивами данных, если регенерацию контента невозможно улучшить с 10-15 секунд.
Эффективное использование зрелого пакета программного обеспечения для веб-кэширования, вероятно, решит все эти проблемы. Ник Gerakines упомянул лак, который, кажется, хорошо подходит для ваших нужд.