Turtle

 
 
 
   РАСШИРЕННЫЙ ПОИСК
   ПОИСК ПО ФРАГМЕНТУ
   ПОМОЩЬ
   ПРОСТАЯ ФОРМА
 
 СИНОНИМЫ   ВСЕ ФОРМЫ СЛОВ
 Добавить   Архитектура   Запросы сейчас   Цифры и факты   FAQ   Кнопка поиска   Сделать стартовой 

Программа Cache Server -- cacherd vs/1.0

Статус этого документа.

Этот документ описывает принципы работы, процедуру установки и настройки сервера кэширования результатов поиска. Документ предназначен для служебного использования. Документ подразумевает предварительное знакомство с протоколом обмена компонент поисковой системы Search System Transfer Protocol и должен рассматриваться в совокупности с ним.

Copyright Notice

Copyright © Stack Technologies Ltd. (2001). All Rights Reserved.

Содержание:

1. Назначение.
2. Принципы работы.
3. Установка.
4. Настройка и запуск.
5. Список параметров конфигурации.
6. Пример конфигурационного файла.

1. Назначение.

Данная программа предназначена для сохранения результатов поиска, полученных при выполнении поискового запроса комплексом оптимизаторов запроса и поисковых процессоров в кэш буфере сервера с целью их дальнейшей выдачи по запросу. Кэширование часто используемых запросов необходимо для предотвращения выполнения частой одинаковой работы процессорами поиска, а значит для уменьшения времени выполнения таких запросов. Кэширование также способствует улучшению нагрузочных характеристик всего комплекса.

Предполагается, что в дальнейшем эта же программа будет выполнять также функции балансировщика нагрузки Load Balancer (LB), поэтому в дальнейшем будем называть программу как LB.

2. Принципы работы.

Исходные данные для хранения и поиска объектов запроса LB получает от оптимизаторов запросов Query Parsers (QP). LB хранит данные об объектах в виде сортированной таблицы в памяти. Ключом сортировки является текстовое представление идентификатора запроса, однозначно определяющее данный поисковый запрос. Любая последовательность печатных символов (printable) может являться таким ключом-идентификатором. Длина ключа в текущей реализации не ограничивается, однако очевидно, что чем она меньше, тем меньше памяти будет занимать результирующая сортированная таблица и тем быстрее может быть получен ответ об интересующих клиентскую программу результатах ранее выполненного поискового запроса. QP передает данные для хранения LB и получает от него ответы с помощью SSTP протокола (см. Search System Transfer Protocol SSTP/1.0).

Для передачи данных сохранения результатов используется код запроса REQ_PUT_CACHEOBJECT (81). В качестве параметров QP определяет для LB следующие поля:

HEADER_NUMRESULTS
Количество передаваемых для сохранения уникальных ID документов и их соответствующие нормированные на максимальное значение веса. Этот параметр является обязательным.

HEADER_NUMFOUND
Количество найденных результатов (всего) по запросу. Поле не является обязательным. При отсутствии поля полагается равным HEADER_NUMRESULTS.

HEADER_AVG_NUMFOUND
Количество предполагаемых результатов, которое могло бы получиться в результате работы поискового запроса, если при получении результатов использовались не все данные. Поле не является обязательным. В случае его отсутствия это значение полагается равным количеству результатов HEADER_NUMFOUND.

HEADER_URI_ID
Уникальный ID документа, удовлетворяющий критериям данного поискового запроса и его нормированный вес. Таких параметров должно быть столько же, сколько определено в HEADER_NUMFOUND. Это поле является обязательным.

Пример использования:

Uid: 1087/0.9871

HEADER_EXPAND_QUERY
Ключ, однозначно определяющий данный поисковый запрос. Это поле также является обязательным.

HEADER_EXTRA
Произвольные данные которые QP привязывает к данному запросу. Поле не является обязательным.

HEADER_HRQ
Запрос в читаемом виде, пригодный для повторного поиска. Поле не является обязательным. Однако, по содержанию этого поля выводятся данные о последних запросах пользователей к системе.

HEADER_SERVER_ADDR_V4
Интернет IP адрес в цифровом представлении xxx.xxx.xxx.xxx. Параметр не является обязательным, однако крайне желательным для того, чтобы сервер мог регистрировать частотность обращений с одного IP адреса.
Последовательность параметров не имеет для сервера LB принципиального значения.

Для поиска кэшированных результатов ранее произведенного поискового запроса используется код запроса REQ_GET_CACHEOBJECT (80). При этом клиентская программа (QP) определяет параметры:

HEADER_EXPAND_QUERY
Параметр идентификации искомого поискового запроса (см. выше). Это поле является обязательным.

HEADER_SERVER_ADDR_V4
Интернет IP адрес в цифровом представлении xxx.xxx.xxx.xxx. Параметр не является обязательным, однако крайне желательным для того, чтобы сервер мог регистрировать частотность обращений с одного IP адреса.

HEADER_NUMRESULTS
Необязательный параметр, характеризующий количество результатов, которые LB вернет в результате выполнения запроса.

HEADER_START_RESULTS
Порядковый номер первого выдаваемого значения. Не обязательное поле. Вместе с HEADER_NUMRESULTS определяет совокупность необходимой QP информации.
Если два последних параметра в процессе запроса не были определены QP, то по умолчанию считается, что LB должен вернуть все имеющиеся у него данные, начиная с самого первого. Эти поля могут быть использованы для ограничения сферы интереса QP, а значит и для уменьшения количества передаваемых данных по сети. Если количество результатов больше, чем имеется в распоряжении сервера, то будет выдано только столько результатов - сколько имеется. Если стартовая позиция превышает количество результатов, имеющихся у сервера, то результаты не будут выданы, при этом код ответа будет правильный REQ_GET_CACHEOBJECT. Если не указан параметр HEADER_EXPAND_QUERY, то ответом сервера будет REQ_PUT_BAD_REQUEST. Сервер также может вернуть код REQ_PUT_FORBIDDEN, в случае если обнаружит, что с одного и того же IP адреса следует много запросов (сейчас анализируется интервал в секунду).

При успешном выполнении запроса, в качестве кода ответа сервер LB использует код запроса. При неудаче запроса сервер возвращает соответствующий код ошибки (например, REQ_PUT_NOT_FOUND, если данные по объекту кэширования не найдены).

Данные возвращаются в виде совокупности параметров:

Коды этих параметров описаны в SSTP/1.0.

Для просмотра последних запросов в кэше используется тип запроса REQ_GET_STATS. При этом, количество интересующих для просмотра запросов может быть определено клиентом в параметре HEADER_NUMRESULTS. Сервер вернет данные в полях HEADER_EXPAND_QUERY, HEADER_NUM_FOUND, HEADER_AVG_NUMFOUND, HEADER_SERVER_ADDR_V4 в порядке убывания времени последнего обращения к объекту кэширования, каждая четверка полей характеризует один объект кэширования (запрос пользователя).

При поиске по сортированной таблице объектов кэширования используется метод медианы, что гарантирует нахождение (или не нахождение) искомых результатов максимум за 32 итерации. При вставке новых данных с помощью этого же метода находится позиция для вставки, производится копирование указателей на структуры данных от текущего значения до последнего, и на освобожденное место помещаются вставляемые данные. Т.к. копируются только указатели с помощью вызова одной единственной функции memmove (3), это обеспечивает приемлемую скорость вставки нового объекта.

Алгоритм вставки и поиска по списку, возможно, не является самым быстрым для решения данной задачи, однако он легко реализуем и скорость его работы сравнима со скоростью установления сетевого соединения.

Предполагается, что данный сервер может быть физически размещен на одном из серверов QP, и будет обслуживать все QP программы, как с данного сервера, так и с других серверов, на которых исполняют свою работу QP. При значительном увеличении поисковых запросов (несколько миллионов в сутки) считается целесообразным выделить отдельный сервер под LB.

Наращивание возможностей сервера (расширение функциональности) осуществляется внесением изменений в модуль cacher/cacher_requests.c, а именно внесением в массив структур req[] описания нового запроса и написания для данного типа запроса соответствующей функции обработки данного типа запроса в модуле cacher/cacher_handlers.c. При этом прототипы функций обработки новых запросов должны быть включены в include/turtle_func.h.

Сервер также обслуживает код запроса REQ_PUT_RESET_CONTENT. По данному типу запроса сервер очищает весь кэш, имеющийся на данный момент у него в наличии. На практике, данный код запроса может применяться администратором системы для отладочных или иных нужд.

В настоящий момент сервер также обслуживает HTTP запрос:

GET /stat HTTP/1.0 (http://cacher.host:cacher_port/stat).
При его выполнении сервер выдает текущую статистику работы cache сервера в виде HTML документа. Это свойство сервера используется администратором системы для мониторинга работы сервера. Выполнение запроса требует базовой HTTP и SSTP идентификации.
HTTP запрос администратора вида http://cacher.host:cacher_port/cacheclean вызывает очистку данных кэширования. Запрос требует базовой HTTP и SSTP авторизации.

HTTP запрос администратора вида http://cacher.host:cacher_port/reload вызывает перечитывание конфигурационных параметров и очистку данных кэширования. Запрос также требует базовой HTTP и SSTP авторизации.

Программа выполнена в виде демона, который "слушает" конфигурационно определенный порт в ожидании указанных выше запросов. HTTP и SSTP запросы автоматически определяются сервером. В случае неправильного запроса сервер просто разрывает соединение с клиентом, и не производит ни каких действий. Периодически, согласно конфигурационно установленным параметрам, сервер производит удаление объектов из кэш, которые не были ни разу использованы за определенное в конфигурации время. Таким образом, в кэше хранятся только требуемые объекты. Увеличивая или уменьшая время жизни объекта можно варьировать используемым сервером размером памяти.

Логика работы QP с LB по части передачи или получения объектов кэширования должна быть примерно следующий: если за разумный период времени (например, 0.01 сек) соединение с сервером LB не возможно установить, то следует выполнять запрос обычным чередом, т.е. произвести оптимизацию запроса, генерацию ассемблерного кода запроса для SP (см. Search System Assembly Language SSAL/1.0), его передачу на SP и ожидать его выполнения группой SP. При этом необходимо произвести соответствующую запись в журнал работы с уровнем критической ошибки D_CRIT, чтобы администратор поисковой системы гарантированно получил сообщение о неработоспособности LB. Если QP в процессе жизни обрабатывает несколько поисковых запросов, то повторное обращение к LB он должен осуществлять через разумный интервал времени, который может быть определен конфигурационно.

3. Установка.

Исходные тексты сервера находятся в дистрибутиве системы и собираются вместе с другими компонентами в работающую программу путем выполнения команды make в корне исходных текстов дистрибутивов. Для сборки отдельно только сервера необходимо сначала собрать библиотеку libturtle.a, а затем сам сервер с помощью команд:
cd /where_is_dist_home/src/lib
make
cd ../cacher
make

4. Настройка и запуск.

Сервер запускается посредством команд:
cd /cacher_home_dir
/where_is_cacher_prog/cacherd
Эту последовательность можно включить в файл начальной загрузки компьютера (например, /etc/rc.local), чтобы при перезагрузке компьютера сервер автоматически запускался на данной машине. Программа может быть запущена с ключом:
-c other_config_file
при этом конфигурация запуска зачитывается из указанного файла. Если программа запускается без ключей, то конфигурационные параметры будут зачитываться из файла cacher.cf в текущей директории. Этот файл следует подготовить с помощью редактора текстов до запуска серверной программы.

Правила оформления конфигурационного файла следующие:

Программа воспринимает следующие внешние сигналы:
SIGHUP
производится ротация logfile и пере зачитывается конфигурация. Полезно при изменении конфигурации сервера на лету. Внимание, при получении данного сигнала текущий кэш сервера очищается.

SIGTERM
выполнение программы немедленно прекращается.

SIGUSR1
сервер пытается отработать все полученные запросы и останавливает свою работу.
Кроме того, при получении сигналов ошибки программы SIGBUS, SIGILL, SIGSEGV, SIGQUIT программа оставляет в домашней директории core файл и шлет сообщение администратору системы об ошибке в программе по SMTP на адрес, указанный в конфигурации. Посылка таких сообщений может быть запрещена в отладочных целях с помощью конфигурационного параметра sendmessages=0 (см. ниже).

5. Список параметров конфигурации.

Ниже приведен список используемых конфигурационных параметров сервера LB и краткое их описание:
rootdir = /some/directory
Корневая директория сервера LB, относительно которой могут быть определены все остальные директории или имена файлов. Если имя файла начинается с символа '/', то считается, что в конфигурации указывается абсолютный путь к файлу, иначе считается, что имя файла будет определено относительно rootdir. Значение по умолчанию: /usr/local/turtle

dispatchername = dispatcher-001.turtle.ru
Каноническое интернет имя или IP адрес сервера Dispatcher Server (DS), необходимо для зачитывания общих для поисковой системы конфигурационных параметров (например, списка разрешенных для соединения машин и пр.) Если общие конфигурационные параметры по каким-либо причинам не могут быть получены от DS (например, он просто не запущен), то будет произведена попытка зачитать их из локальных файлов конфигурации, определенных ниже. Значение по умолчанию: dispatcher-001.turtle.ru

port = 3320
Номер порта, по которому может быть произведено соединение с центральным диспетчером. Значение по умолчанию: 3320.

cachename = cacher-001.turtle.ru
Каноническое имя или IP адрес сервера, на котором запускается данная программа. Если компьютер имеет несколько имен и/или адресов, то принимать запросы он будет только при обращении к указанному в этом поле имени. Значение по умолчанию: cacher-001.turtle.ru.

cacheport = 3324
Номер порта, по которому данный сервер будет принимать SSTP запросы, и посылать ответы на них. Необходимо конфигурировать так это значение, чтобы оно не вступало в конфликт с другими компонентами поисковой системы или иными серверными программами, запущенными в пределах данного компьютера. Значение по умолчанию: 3324.

progname = cacherd
Префикс для занесения учетных записей в журнал работы программы (logfile). Если различными компонентами системы используется общий журнал, то данный префикс позволит отличить записи данного сервера от других. Программное обеспечение также может быть откомпилировано с ключом компиляции -DUSE_SYSLOG. При этом записи будут производиться как в указанный logfile, так и используя syslog. При сборке пакета с ключом компиляции -DLOG_DAYTIME в журнал работы вместе с каждой записью будет занесено текущее время. По умолчанию, данная функция отключена. Значение по умолчанию: берется из имени запускаемой программы argv[0].

logfile = logs/cacher.log
Имя файла журнала работы программы. Значение по умолчанию: logs/turtled.log

pidfile = logs/cacher.pid
Имя файла, в котором будет помещен идентификатор процесса - его номер в таблице процессов системы. Полезен администратору для написания скриптов посылки сигналов программе (например, SIGHUP). Значение по умолчанию: logs/turtled.pid

allowdb = conf/hosts.allow
Имя файла локально разрешенных для обслуживания запросов внешних машин. Если при старте программе не удалось получить список шаблонов разрешенных для обслуживания машин от центрального диспетчера, то будет произведена попытка зачитать такие шаблоны из указанного в данном поле файла. Файл устроен так, что каждая строка содержит один шаблон, который оформляется так, как это используется в shell (например: 192.168.3.* или *.turtle.ru). Значение по умолчание: conf/hosts.allow.

pwfile = conf/turtle.passwd
Файл описания известных системе пользователей и их идентификационной информации при использовании базовой SSTP идентификации. Файл создается и редактируется с помощью программы turtle_passwd с различными ключами. В настоящий момент базовая SSTP идентификация в рамках взаимодействия QP и LB не производится, и данные этого файла используются только для идентификации при запросе статистики сервера по HTTP. Подразумевается, что LB находится за брандмауэром локальной сети и доступ к нему может быть осуществлен только QP по локальной сети. Содержание файла используется сервером, в случае если данные идентификации не могут быть получены от центрального диспетчера DS. Значение по умолчанию: conf/turtle.passwd.

version = 1.0
Текущая версия программного обеспечения. Поле носит информативный характер. В дальнейшем, значение этого поля планируется использовать для обеспечения программной совместимости компонент поисковой системы.

maintainer = admin@e-mail.address
Почтовый e-mail адрес администратора системы для посылки критических сообщений о работе программы.

user = turtle
group = turtle
Имя и группа пользователя, от имени которого будет выполняться программа. Если программа запускается от имени суперпользователя, то ее привилегии будут изменены на указанные в этих полях привилегии из соображения безопасности для самой операционной системы. С использованием этих значений можно допускать автоматический запуск программы при рестарте компьютера, на котором установлен сервер LB. Значения по умолчанию: turtle/turtle.

maxclients = 512
Максимальное количество одновременно обслуживаемых запросов системой. Это значение не должно превышать максимального значения файловых дескрипторов, разрешенных операционной системой для данного пользователя. Если значение превышает максимально разрешенное, то оно будет уменьшено до правильного значения. Чрезмерное увеличение этого параметра без надобности может приводить к небольшой потере производительности. Уменьшение ниже требуемой величины приведет к отказу в обслуживании некоторых запросов. Рекомендованное значение 512. Значение по умолчанию: 8192.

timeout = 300
Интервал времени в секундах, спустя который будет производиться проверка кэш буфера на предмет удаления не используемых объектов. Значение по умолчанию: 300.

readtimeout = 60
sendtimeout = 60
Таймауты системы для приема запросов и пересылки ответов от LB к QP. Если по истечению указанного периода в секундах запрос не удалось принять или ответ не удалось послать, то данное соединение закрывается.

chroot = 0
При запуске системы в целях безопасности программа может выполнить функцию chroot(). При этом, все содержимое каталогов, расположенных выше по дереву станет для программы недоступным. Текущей директорией и корнем станет директория, которая указана в параметре rootdir. Работоспособность данного параметра не проверялась, но особых препятствий не видно. Указанные действия осуществляются, если в данном поле определено значение, отличное от 0. Значение по умолчанию: 0.

sendmessages = 1
Данный параметр определяет посылать или нет сообщения по электронной почте администратору системы в случае критических ошибок.

scanuser = user_name
scanpass = user_password
Имя пользователя и пароль, используемые для базовой SSTP идентификации при обращении к центральному диспетчеру. Подробнее см. SSTP/1.0. Значения данных полей будут посланы сервером LB центральному диспетчеру DS при запуске программы для получения общих конфигурационных параметров. Если со стороны диспетчера идентификация не будет произведена, то DS ответит кодом 403 FORBIDDEN. При этом LB попытается прочесть конфигурационные параметры из локальных файлов (см. выше).

hashsize = 2048
Начальное значение количества объектов буфера кэш. В процессе работы при достижении данного предела, максимальное значение будет увеличиваться путем удвоения текущего значения. Значение по умолчанию: 256*1024.

expire = 300
Максимальное время жизни объекта кэширования в памяти сервера в секундах. По истечению указанного интервала в секундах на новом этапе проверки объект будет удален из памяти сервера, если за указанный период к нему не осуществлялось обращений. Значение по умолчанию: 600.

debuglevel = 40
Уровень занесения информации в журнал работы (см src/include/turtle_defs.h). Самый низкий уровень D_CRIT (10) - в журнал будут записаны только сообщения о критических ошибках, самый высокий - D_PROTOCOL, при этом в журнал будет занесено очень много отладочной информации, включая протокол сетевого обмена. Рекомендуемое значение:40-50.

freq = 2
Максимальное количество запросов от одного IP адреса клиента в секунду. При превышении этого значения сервер возвращает клиенту код REQ_PUT_FORBIDDEN. Значение по умолчанию: 1.

6. Пример конфигурационного файла (cacher.cf).

#
# turtle cacher daemon configuration file
#
rootdir		=       /home/cacher  		# work home
tmpdir         	=       tmp             	# temporary files directory
dispatchername 	=       dispatcher-001.turtle.ru # dispatcher host hostname
cachename       =       dispatcher-001.turtle.ru # cacher host name
cacheport       =       3325			# my port
progname        =       cacherd         	# programm name to log
logfile         =       logs/cacher.log		# where is we save logs
pidfile         =       logs/cacher.pid		# and pid
#
allowdb         =       conf/hosts.allow        # hosts allow to connect
pwfile          =       conf/turtle.passwd      # scanners passwd base
#
version         =       1.0             	# current version number
maintainer      =       turtle-admin@.turtle.ru # send messages to
#
user            =       turtle			# owner of the started proccess
group           =       turtle			# group of the owner
port            =       3320            # dispatcher port
maxclients      =       512             # max connection at a time
timeout         =       300             # timeout to check connections
readtimeout     =       60              # timeout to read from a socket
sendtimeout     =       60              # timeout to write to a socket
chroot          =       0               # do chrot() or not
sendmessage     =       0               # send critical alerts to maintainer?
#
scanuser        =       abracadabra  	# username to send dispatcher
scanpass        =       mystrongpasswd  # and password
hashsize        =       2048            # initial cache size
expire          =       300             # cache record time to leave in sec
freq		=	5		# no more tham 5 requests/sec from IP
Наверх Назад Turtle
 Черепаший Ранк.   Реклама на Turtle   Логотипы   Правовая информация   Конфиденциальность   Контакты 
    ©ЗАО "Группа компаний Стек". 2003-2007