Я разрабатываю систему, которая подключается к внешнему бэкэнд-сервису (приобретенному у другой компании), где система намного превысит месячную квоту запросов. Я пытаюсь создать прокси / кэш, который будет кэшировать запросы и использовать кэшированный ответ, если он присутствует.
Варианты использования:
Дело 1:
- Пользователь запрашивает конечную точку
- Прокси не имеет кеширования
- Прокси-запрос перенаправляет на внешний сервер
- Ответ прокси-кэшей
- Прокси возвращает ответ пользователю
Дело 2:
- Пользователь запрашивает конечную точку
- Прокси имеет его в кеше
- Прокси-сервер возвращает кэшированный ответ
Дело 3:
- Внешний бэкэнд отправляет webhook о том, что все было обновлено
- Прокси очищает кеш
Требования:
- Прокси должен иметь возможность кэшировать файлы (в основном, изображения)
- Три разных URL: s, которые должны быть достигнуты: url1.external-backend.com, url2.external-backend.com и url3.external-backend.com
- Желательно только один прокси для всех трех URL: s
- Три URL: могут иметь разные пути (url1.external-backend.com/this/is/a/path), а также могут быть запросы (url1.external-backend.com?query=something)
- Было бы неплохо, если бы прокси мог быть очищен на основе того, что отправлено с внешнего бэкэнда, но это не обязательно
Пока мысли:
До сих пор я рассматривал две разные системы: Varnish (https://varnish -cache.org / ) и Squid (http://www.squid -cache.org / ) , Я пытался с Squid, но я совсем не понимал, как настроить конфигурацию для работы, как описано выше. Пример файла конфигурации был очень грязным и невозможным для понимания, и я не смог найти для него никакого руководства в Интернете.
Я заглянул в Varnish, и насколько я могу судить, его можно использовать. Но у меня здесь проблема.
Проблема:
В Varnish's /etc/varnish/default.vcl
есть возможность добавлять бэкэнды, поэтому я добавил следующее:
backend page2 {
.host = "url2.external-backend.com";
.port = "443";
}
Это дает нечто похожее на это (я точно не помню, и сейчас не вижу сообщения об ошибке):
Backend host "url2.external-backend.com": resolves to multiple IPv4 addresses.
Only one address is allowed.
Please specify which exact address you want to use, we found these:
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
Я не смею ставить один из IP-адресов вместо имени хоста, и я не уверен, что создание директора - это правильный путь. Причина в том, что я не контролирую имя хоста, и они не могут гарантировать, что IP-адреса не изменятся.
Вопросы:
- Можно ли как-нибудь заставить эту работу работать на Varnish?
- Может кто-нибудь объяснить, как именно должен выглядеть конфиг Squids, чтобы он соответствовал описанным выше сценариям использования и требованиям (если возможно)?
- Есть ли какая-либо другая служба кэширования прокси, которая могла бы работать лучше, чем Varnish или Squid?