Если данные, которые вы кэшируете, требуются более чем одной службе, это звучит так - с точки зрения Сервис-ориентированной архитектуры, во всяком случае, - что они не принадлежат ни к одной из служб, которые вы вызываете.
Если кэшируемые данные на самом деле не связаны с какой-либо службой, а то, что нужно обеим службам, то, возможно, они принадлежат к своей отдельной службе. Рассматривали ли вы инкапсуляцию своего кэша в третьем сервисе и выполнение вызова сервис-сервис для получения нужных вам данных? Преимущества включают ...
- Это решает вашу первоначальную дилемму, избегая необходимости читать весь кэш из базы данных несколько раз;
- Он инкапсулирует кэш в одном месте для удобства поддержки / изменения позже.
- Это позволяет абстрагировать реализацию кэша от других сервисов, добавив другой интерфейс сервиса.
В общем, я бы сказал, что это лучший подход. Единственный недостаток - это дополнительные издержки, связанные с выполнением вызова между сервисами, но это, безусловно, превосходит необходимость считывания всего кэша из базы данных.
В качестве альтернативы, если данные в вашем кеше очень тесно связаны с ОБА сервисов, которые вызывают кеш, т.е. оба сервиса добавляют / изменяют данные в кеше и т. Д., То, возможно, две существующие службы должны быть объединены в разовая услуга.
Если то, что я говорю, имеет какой-то смысл, то принцип SOA, на котором я опираюсь, это Автономная служба .