В частности, есть ли способ в .Net Core (3.0 или более ранней версии) использовать локальную файловую систему в качестве кэша ответов, а не только в памяти?
После изрядного количества исследований наиболее близким оказалось ПО промежуточного слоя для кэширования ответов [1], но это не так:
- разрешить кэширование страниц на неопределенный срок,
- сохранять кэши между перезапусками приложения и сервера,
- разрешить аннулировать кеш для каждой страницы (например, запись в блоге обновлена),
- разрешить аннулирование всего кеша при внесении глобальных изменений (например, при обновлении темы, изменении меню и т. д.).
Я предполагаю, что эти функции потребуют пользовательской реализации ResponseCaching, которая затрагивает локальную файловую систему, но я не хочу заново изобретать ее, если она уже существует.
Немного фона:
Это заменит использование статического генератора сайтов, который проблематичен для изменений всего сайта из-за огромного количества данных (почти 24 часа на создание и копирование на все серверы).
Сценарий очень похож на энциклопедию или новостной сайт — подавляющее большинство контента меняется нечасто, несколько вещей добавляется в день, и нет пользовательского контента (а если или когда он есть, он будет динамически обновляться). загружается через JS/Ajax). Кроме того, загрузка страниц сильно загружает процессор/память/базу данных.
Мы будем использовать обратный прокси-сервер, такой как CloudFlare или AWS CloudFront, но AWS автоматически истечет срок действия их пограничных кэшей ежедневно. Промахи кэша пограничных узлов по-прежнему часты.
Это отличается от IDistributedCache [2] тем, что это должно быть кэширование ответов, а не просто кэширование данных, используемых моделью MVC.
Мы также будем использовать кэш в памяти [3], но опять же, это решает другой сценарий кэширования.
Рекомендации
[1] https://docs.microsoft.com/en-us/aspnet/core/performance/caching/middleware
[2] https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed
[3] https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory