Я строю архитектуру микросервисов, которая должна иметь дело с:
- Прямой доступ к базе данных
- Вызов внешних устаревших сервисов
Я могу подумать о двух стратегиях кэширования, но не могу понять, что лучше, учитывая, что я не буду контролировать то, что другие люди могут делать на разных уровнях.
Кэширование на уровне приложения (@Cacheable)
Я предоставляю только функцию кэширования, которую может использовать каждый, применяя spring.cache.redis.key-prefix к имени микросервиса для ограничения конфликтующих ключей.
- PRO : самый гибкий способ
- CONS :
- Нет контроля над кэшем, кроме максимального пространства: люди просто создают новые записи в кэше
- Нет контроля над недействительностью кэша: мы не знаем, какие данные на самом деле хранятся, поэтому, если, например, устаревшая система нуждается в перезагрузке, мы не можем очистить некоторые ключи кэша
- Возможная избыточность: как кэширование является на уровне приложений может случиться так, что микросервисы хранят примерно одинаковые данные. Хотя я мог иметь контроль над базой данных (одна MS должна иметь собственную базу данных или хотя бы подмножество таблиц), я не могу гарантировать, что унаследован SOAP layer
Кэширование на уровне обслуживания (соединители)
Я не предоставляю функцию кэширования, но я предоставляю настраиваемые soap соединители, которые будут / не будут кэшировать ответ на основе конфигурации, которую я предоставлю (также может быть черный / белый список)
- PROS:
- кэш контролируется
- легко аннулировать
- CONS:
- необходимо обновлять соединители каждый раз, когда меняется политика кэширования
- зависимость между разработкой и архитектурой
edit: мне нужно предложение о теоретическом подходе, а не о конкретной технологии c.