Кэширование в памяти:
- Производительность: чрезвычайно быстрый доступ (наносекунды).
- Простота: простота внедрения и управления.
- Стоимость: Дополнительная инфраструктура не требуется.
- Масштабируемость: ограничено памятью одного процесса.
- Постоянство: теряется при перезапуске процесса.
- Согласованность: проблем с синхронизацией нет.
- Использование памяти: конкурирует с памятью приложения.
Распределенное кэширование:
- Масштабируемость: используется несколькими экземплярами приложения.
- Постоянство: может пережить перезапуск приложения.
- Согласованность: требуются механизмы синхронизации.
- Network Overhead: Additional latency for cache operations
- Сложность: более сложная настройка и управление.
- Cost: Additional infrastructure and maintenance
- Reliability: Single point of failure without clustering
Варианты использования — в памяти:
- Данные сеанса: информация о сеансе пользователя в односерверных приложениях.
- Конфигурация: настройки приложения и переменные среды.
- Результаты вычислений: часто используются дорогостоящие вычисления.
- Справочные данные: статические данные, которые изменяются нечасто.
- Кэширование шаблонов: скомпилированные шаблоны и представления.
- Краткоживущие данные: временные данные с коротким жизненным циклом.
Варианты использования – распределенные:
- Многоэкземплярные приложения: общий кеш между экземплярами сервера.
- Микросервисы: общие данные между различными сервисами.
- Сеансы пользователя: данные сеанса в средах с балансировкой нагрузки.
- Ограничение скорости: общие счетчики для ограничения скорости между экземплярами.
- Функциональные флаги: данные конфигурации, общие для всех служб.
- Результаты запросов к базе данных: дорогостоящие результаты запросов доступны по всему миру.
Гибридные подходы:
- Кэширование L1/L2: в памяти как L1, распределяется как L2.
- Обогрев кеша: предварительное заполнение кешей часто используемыми данными.
- Умная маршрутизация. Направляйте запросы к экземплярам с кэшированными данными.
- Частичное кэширование: кэшируйте разные типы данных на разных уровнях.
Итог
Ключевой вывод для интервью: сравните кэширование в памяти и распределенное кэширование, а также варианты их использования в серверных системах.