Varnish: Backend с несколькими IP-адресами (или использовать что-то еще) - PullRequest
0 голосов
/ 03 апреля 2019

Я разрабатываю систему, которая подключается к внешнему бэкэнд-сервису (приобретенному у другой компании), где система намного превысит месячную квоту запросов. Я пытаюсь создать прокси / кэш, который будет кэшировать запросы и использовать кэшированный ответ, если он присутствует.

Варианты использования:

Дело 1:

  1. Пользователь запрашивает конечную точку
  2. Прокси не имеет кеширования
  3. Прокси-запрос перенаправляет на внешний сервер
  4. Ответ прокси-кэшей
  5. Прокси возвращает ответ пользователю

Дело 2:

  1. Пользователь запрашивает конечную точку
  2. Прокси имеет его в кеше
  3. Прокси-сервер возвращает кэшированный ответ

Дело 3:

  1. Внешний бэкэнд отправляет webhook о том, что все было обновлено
  2. Прокси очищает кеш

Требования:

  • Прокси должен иметь возможность кэшировать файлы (в основном, изображения)
  • Три разных 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-адреса не изменятся.

Вопросы:

  1. Можно ли как-нибудь заставить эту работу работать на Varnish?
  2. Может кто-нибудь объяснить, как именно должен выглядеть конфиг Squids, чтобы он соответствовал описанным выше сценариям использования и требованиям (если возможно)?
  3. Есть ли какая-либо другая служба кэширования прокси, которая могла бы работать лучше, чем Varnish или Squid?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Я считаю, что vmod-goto - это то, что вы ищете: https://docs.varnish -software.com / varnish-cache-plus / vmods / goto /

Это не открытый код, но это решает именно вашу проблему.

0 голосов
/ 04 апреля 2019

1 и 2 можно сделать без проблем.Для бэкэндов на основе циклического перебора DNS (одно и то же имя дает разные IP-адреса для каждого запроса), вам следует обратиться к директорам, которые имеют особую поддержку циклического перебора: https://www.varnish -software.com / wiki / content / tutorials / varnish / multiple_varnishes.html#

3 также может быть сделано.Например, по запросу HTTP PURGE.Просто убедитесь, что вы белый список, что IP-адреса, так это.https://www.varnish -software.com / вики / содержание / учебники / лак / vcl_examples.html #

...