ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ближайший mirror



Письмо получено от drmarker.
Датируется 4 февраля 2007 г., 14:19:49.

> Думаю над алгоритмом поиска "ближайшего к клиенту зеркала". Типа
> пришел клиент, сделал запрос, ему отдается 302 на сервер, который к
> нему ближе всего.

> Есть идеи? Как бы делали вы?

 В nginx есть поддержка Perl для обработки запросов.

 Скрипт должен делать примерно такое:
 1. Взять адрес клиента из $remote_addr
 2. Адрес преобразуется в подсеть, к примеру, /8.
 3. В пинг-кэше ищется нужная подсеть.
 4. Если подсеть найдена - редирект на указанный там адрес.
 5. Если нет - даем всем зеркалам сигнал определить пинг до клиента и
 вернуть результат.
 6. Результаты пишем в пинг-кэш.

 Пинг-кэш может быть csv файликом или даже таблицой в базе (что имхо
 неплохой вариант), примерно такой структуры:

 client_subnet VARCHAR(23) (с рассчетом на ipv6)
 server_ip VARCHAR(23)
 ping INT
 updated TIMESTAMP

 Соответственно, client_subnet - подсеть клиентов,
 server_ip - адрес зеркала,
 ping - собственно, время пинга в мсек,
 updated - последнее обновление записи. Имеет смысл кроме есть/нет в
 базе еще проверять насколько стары данные.

 Только нужно учесть самое главное. Некоторые юзеры сидят за NAT,
 параноидальным файрволом и т.п. помехами пингу. Поэтому гарантировать
 вычисление корректного времени пинга хотя бы до 70% клиентов
 невозможно.

 В принципе, можно скормить клиенту ява-скрипт, который два раза
 запросит у сервера однозначно отличающийся запрос, например,
 empty_gif, один за одним.
 Время пинга в этом случае будет пропорционально интервалу между
 полученными запросами. Соответственно, нужен будет второй скрипт,
 который будет замерять время между запросами.

-- 
С уважением,
 Шепелев Сергей Александрович.
ICQ: 145-542-767




 




Copyright © Lexa Software, 1996-2009.