Есть ли способ настроить Squid на выбор однорангового кеша на основе задержки при обмене данными с http-портом на целевом веб-сервере?
Например, предположим, что у нас есть два кэша Squid - сервер «A» в США и сервер «B» в Китае. Мы знаем, что доступ к любым веб-сайтам за пределами Китая означает, что время прохождения пакета туда и обратно увеличивается примерно на 200–250 мс из-за кабелей, пересекающих Тихий океан. Я бы хотел, чтобы Squid на сервере «A» исследовал это и перенаправлял запрос на сервер «B» только в том случае, если задержка превышает определенный порог. В противном случае он напрямую обращается к веб-серверу.
Если это поведение необходимо запрограммировать в Squid, есть ли у вас какие-нибудь предложения, где его подключить к архитектуре?
Похоже, что вам нужно настроить с помощью директивы cache_peer. Вот пример прямо из документации:
cache_peer cache.domain.example parent 3128 3130 по умолчанию
Вместо или в дополнение к «по умолчанию» в последней позиции вы можете указать «вес» и «без запроса».
Параметр «no-query» указывает squid сначала отправлять запросы ICP во все настроенные кеши. Самый быстрый кеш для ответа - это то, куда будет направлен HTTP-запрос.
Флаг "веса" сообщит squid, что, когда объект имеет более одного настроенного кеша, использовать кеш с самым быстрым ответом для выборки этого объекта.
Полная информация об этих параметрах содержится в документации, но этого должно быть достаточно, чтобы вы начали.
Если я правильно вас понял, я не думаю, что это имеет смысл, как вы это выразили.
Имейте в виду, что для измерения задержки вам потребуется отправить как минимум пару зондов, поэтому это займет практически столько же времени, сколько и получение самого объекта.