У меня есть веб-служба, работающая на кластере серверов. Этот веб-сервис выполняет некоторую внутреннюю обработку, а затем может обратиться к внешней службе, которая несет плату.
Я хочу добавить некоторое кэширование, чтобы, если я получаю одинаковые запросы к службе (что гарантировано), то мне не нужно повторять обработку, сохраняя время и мощность обработки, а также затраты, понесенные в внешняя часть служебного вызова.
Однако я изо всех сил пытаюсь понять, как управлять этим кэшированием, когда у меня есть следующие ограничения
- Служба работает на нескольких веб-серверах для обеспечения высокой доступности и масштабируемости.
- Запрос может занять до 5 секунд для ответа, но в среднем я мог получить 2 или 3 других одинаковых запроса.
Как я могу приостановить выполнение других вызовов службы до тех пор, пока первая не ответит (поэтому доступная в кеше) при работе в распределенной среде.
Я подумал о том, чтобы ввести шаблон прокси-сервера и создать очередь идентичных запросов в прокси-сервере, так что, когда первый возвращает, он также может вернуть тот же ответ другим. Это правильный шаблон или есть лучший шаблон concurrency, который имеет дело с этим сценарием?