![]() |
Добавить Архитектура Запросы сейчас Цифры и факты FAQ Кнопка поиска Сделать стартовой |
![]() |
Программа Viewer Server -- viewerd vs/1.0
Статус этого документа.
Этот документ описывает принципы работы, процедуру установки и настройки сервера выдачи информации об объектах, накопленных в результате сканирования программным поисковым комплексом. Документ предназначен для служебного использования. Документ подразумевает предварительное знакомство с протоколом обмена компонент поисковой системы Search System Transfer Protocol и должен рассматриваться в совокупности с ним.Copyright Notice
Copyright © Stack Technologies Ltd. (2001). All Rights Reserved.
Содержание.
1. Назначение. Основным назначением программы Viewer Server (VS) является выдача информации об объектах сканирования, которые запрашиваются обычно оптимизаторами запросов QP. VS является составной частью сервера архивации Archive Server (AS), ее read only составляющей. Полученные от VS данные используются другими компонентами поисковой системы для отображения результатов поиска, включая релевантные фрагменты документов. 2. Принципы работы. Программа VS устанавливается физически на том же компьютере, что и AS. При этом, сферой ответственности AS является сохранение полученных данных от сканирования (включая ретроспективное сохранение самих документов - см. описание Archive Server) как в базе данных, для быстрого извлечения по ключу - идентификатору документа (ID), так и в виде компрессированного содержания самих документов. Сферой ответственности VS является отображение этих накопленных данных по запросу клиента (QP).
- 1. Назначение.
- 2. Принципы работы.
- 3. Установка.
- 4. Настройка и запуск.
- 5. Список параметров конфигурации.
- 6. Пример конфигурационного файла.
Данные на сервере хранятся в 2-х видах:
- База данных объектов, ключом поиска по которой является идентификационный номер документа.
- В виде компрессированных файлов в иерархической структуре каталогов, построенной на основе ID документов.
База данных построена на основе пакета BerkeleyDB vs/3.3.11. Тип базы данных - BTREE с использованием возможности дупликации ключей DB_DUP (см. описание BerkeleyDB). Записи хранятся сортированными по возрастанию ID (беззнаковое 32-х разрядное число). Нескольким документам, расположенным на разных внешних HTTP серверах может соответствовать один и тот же ID тогда и только тогда, когда их содержание абсолютно идентично. Строение записи базы данных имеет следующий вид:
Key:
- ID
- уникальный идентификатор документа (u_int32_t).
Data:
- Srv_ID
- уникальный идентификатор сервера (u_int32_t).
- Doc_Len
- длина оригинального документа в байтах (u_int32_t).
- Doc_Status
- комплексное беззнаковое 32-х разрядное число, характеризующее протокол получения документа (http, ftp и пр.) - биты 0-3, кодировку документа согласно конфигурационной таблице - биты 4-7, язык документа согласно конфигурационной таблице - биты 8-15, номер сканера, от которого получен документ, может характеризовать тему документа согласно конфигурационной таблице - биты 16-31.
- Doc_Flags
- номер последнего сканирования или иными словами, сколько раз сканировался документ. Если это поле содержит значение 0xffffffff, то считается, что документ логически удален из системы. Очевидно, что на этапе последнего сканирования, сервер не обнаружил этого документа. В базе данных AS сами документы не удаляются никогда.
- Bps
- последняя зарегистрированная скорость отклика внешнего сервера при запросе данного документа в байтах в секунду (u_int32_t).
- Time
- дата и время создания документа в секундах. Если внешний сервер не сообщил этой информации, то датой полагается дата сканирования документа (time_t).
- Check_time
- дата и время последнего сканирования документа (time_t).
- Url
- каноническое имя URL ресурса, отделяется от последующих текстовых полей символом '|'.
- Title
- заголовок документа из HTML тэга <TITLE> если он присутствует. Отделяется от последующей части символом '|'/
- Essence
- первые 512 (или сколько указано в конфигурации) байт документа. Отделены от последующего поля символом '|'/
- Langs
- коды языков, слова которых найдены в документе (согласно конфигурационной таблице обозначений языков). Документ может содержать термины из разных языков. В настоящий момент поисковая система располагает сведениями о 24 языках (включая русскую ненормативную лексику). Поле может являться фильтром (например, фильтром мата при выдаче результатов поиска).
Сами документы хранятся в компрессированном виде в файловой системе вида: /spool_home/mln_num/thousand_num/id_num.trt - непосредственно сам документ и /spool_home/mln_num/thousand_num/id_num.dsc - описание параметров, которые помещаются в базу данных (см. выше). Таким образом, полный путь к файлу содержит информацию об уникальном идентификаторе документа ID. Файловая система организована на массиве RAID-5, что обеспечивает высокую надежность и восстанавливаемость данных при авариях, имея при этом приемлемую скорость чтения (40MB/sec) данных. Таким образом, при повреждении целостности файла индекса базы данных по данным файлов можно всегда восстановить утерянный индекс. (Программа восстановления должна быть написана).
Просмотр текстов сохраненных документов можно осуществлять с помощью программы turtle_cat, поставляемой в составе дистрибутива в директории src/archiver.
Программа viewer взаимодействует с внешними приложением (например, QP) посредством SSTP протокола (см. Search System Transfer Protocol). Администратор поисковой системы имеет HTTP интерфейс к функциям VS.
VS обслуживает следующие SSTP типы запросов:
- REQ_GET_URLOBJECT
- REQ_GET_URLDOCUMENT
- REQ_GET_FULLDOCUMENT
- REQ_GET_EXISTDOCUMENT
- REQ_GET_URLVERSIONS
Первые два запроса могут выполняться в пакетном режиме, т.е. за один запрос VS может предоставить данные о нескольких документах. Третий запрос выдает полное содержание затребованного документа (см. SSTP/1.0). REQ_GET_EXISTDOCUMENT запрос проверяет наличие указанных объектов в базе данных и делает при необходимости последнюю пересортировку (см. ниже). Запрос REQ_GET_URLVERSIONS служит для информирования клиента о возможных версиях запрошенного документа. Этот тип запроса может выполняться в пакетном режиме. Под версией в данном случае понимается дата модификации документа в формате DDMMYYYY. Этот номер версии может использоваться в запросе REQ_GET_FULLDOCUMENT в поле HEADER_VERSION.
Параметрами запроса являются:
- HEADER_URI_ID
- неограниченное количество идентификаторов документов, по которым затребована информация для последующего отображения.
- HEADER_SEARCH_WORD
- неограниченное количество поисковых терминов, для которых следует выбрать наиболее релевантный фрагмент. Если тип запроса был REQ_GET_URLDOCUMENT, а поисковые термины не были указаны в запросе, то сервер подменит данный тип запроса на REQ_GET_URLOBJECT и выдаст в качестве фрагмента текста документа первые 512 байт (или сколько определено в конфигурации).
- HEADER_MARK_BEGIN
HEADER_MARK_END- тексты HTML тэгов, которыми следует выделить найденные во фрагменте поисковые термины. Если они не указаны, то выделение не производится и возлагается на программу, отображающую результаты поиска.
- HEADER_VERSION
- номер версии затребованного документа в формате DDMMYYYY используется в запросе REQ_GET_FULLDOCUMENT.
Пример фрагмента запроса:
39 Uid: 4 Uid: 78 Uid: 2287 Swd: db Swd: referenceПорядок следования результатов запроса будет соответствовать порядку входных записей.
Сервер генерирует ответ с тем же кодом запроса, при условии, что хотя бы один объект из списка найден в виде последовательности параметров для каждого затребованного ID:
- HEADER_URI_ID
- HEADER_NUMENTRIES New!
- HEADER_URI_LEN
- New! Группа полей по количеству, указанному в HEADER_NUMENTRIES:
- HEADER_URL
- HEADER_URI_TIME
- HEADER_URL_CHECKTIME
- HEADER_CHARSET
- HEADER_SERVER_ID
- HEADER_SERVER_PROTOCOL
- HEADER_SERVER_NAME
- HEADER_SERVER_PORT
- HEADER_SERVER_BPS
- HEADER_URI
- HEADER_URI_FLAGS
- HEADER_URI_STATUS
- HEADER_BASELANG
- HEADER_LANGUAGES
- HEADER_TITLE
- HEADER_ESSENCE
Первый запрос отличается от второго тем, что в первом случае клиенту передается в поле HEADER_ESSENCE начало документа, взятое из базы данных, во втором случае сервер пытается найти наиболее релевантный фрагмент для поисковых терминов, указанных в запросе в полях HEADER_SEARCH_WORD ("Swd"). Второй тип запроса работает с самим документом и, следовательно, выполняется медленнее. При превышении уровня загрузки VS сервера выше конфигурируемого параметра, сервер прекращает выполнять запросы типа REQ_GET_URLDOCUMENT, автоматически заменяя ответ на тип запроса REQ_GRT_URLOBJECT в целях улучшения ситуации вокруг загрузки сервера.
При запросе типа REQ_GET_FULLDOCUMENT сервер возвращает данные в виде совокупности полей:
И других, описанных выше, для данного документа.
- HEADER_DATASIZE
- HEADER_URI_ID
- HEADER_URI_FLAGS
- ........
После пустой строки следует непосредственно сам текст затребованного документа. Если при сканировании документа были использованы фильтры-преобразователи форматов, то текст будет передан как преобразованный (именно в таком виде он и хранится). Очевидно, клиентской программе следует интерпретировать полученный текст как html или plain - в зависимости от типа конвертора.
Запрос типа HEADER_GET_EXISTDOCUMENT получает в пакетном режиме ID документов для фильтрации. Фильтруются (удаляются из выборки) документы, объекты для которых не были найдены в текущей базе данных. Кроме того, клиентская программа может установить параметр HEADER_SORT_OPTIONS ("Sop") в одно из значений:
- "time"
- отсортировать данную выборку по времени создания документов, при этом в выходных параметрах ответа сервера будут следовать сортированные данные в полях HEADER_URI_ID в виде пар id/time. Если время создания документа неизвестно (HTTP сервер его не сообщил при сканировании), то это время полагается равным времени последней проверки документа.
- "hosts"
- сгруппировать выборку по хостам. В выходных параметрах HEADER_URI_ID будут перечислены сгруппированные пары id/server_id.
- "title"
- исключить из выборки документы, содержащие одинаковый заголовок.
- "dup"
- исключить из выборки документы, содержащие одинаковый заголовок и первые 512 (или сколько указано конфигурационно) байт текста.
Сервер VS имеет свой внутренний кэш документов для предотвращения повторных считываний с диска документов, которые часто встречаются запроса. Размер кэша сервера определяется количеством свободной оперативной памяти на компьютере сервера и может регулироваться конфигурационными параметрами, устанавливающими частоту проверки кэша и максимальным временем жизни объекта при отсутствии к нему обращений. Если операционная система имеет функцию mmap(), то кэш строится с помощью этой функции, иначе документ просто зачитывается в отведенный для него буфер.
Веб-интерфейс к VS содержит следующие возможности:
3. Установка. Исходные тексты сервера находятся в дистрибутиве системы и собираются вместе с другими компонентами в работающую программу путем выполнения команды make в корне исходных текстов дистрибутивов. Для сборки отдельно только сервера VS необходимо сначала собрать библиотеку libturtle.a, а затем сам сервер с помощью команд:
- http://viewer.host:viewer_port/full?uid=10
- отображает содержание сохраненного на сервере документа полностью.
- http://viewer.host:viewer_port/objs?uid=10&uid=20...
- отображает затребованные объекты в полях uid.
- http://viewer.host:viewer_port/docs?uid=10&swd=db&uid=20&mbg=<b>&men=</b>
- отображает затребованные объекты с выбором фрагмента текста, релевантного терминам запроса (swd) и выделенных HTML тэгом BOLD.
- http://viewer.host:viewer_port/stat
- отображает текущую статистику сервера. Необходима базовая HTTP и SSTP идентификация.
- http://viewer.host:viewer_port/statclean
- запрос на очистку текущей статистики (необходима базовая HTTP и SSTP идентификация).
- http://viewer.host:viewer_port/reload
- перезагрузка конфигурационных параметров. Требует базовой HTTP и SSTP идентификации.
cd /where_is_dist_home/src/lib make cd ../archiver make viewerd4. Настройка и запуск. Сервер запускается посредством команд:
cd /viewer_home_dir /where_is_viewer_prog/viewerdЭту последовательность можно включить в файл начальной загрузки компьютера (например, /etc/rc.local), чтобы при перезагрузке компьютера сервер автоматически запускался на данной машине. Программа может быть запущена с ключом:
-c other_config_fileпри этом конфигурация запуска зачитывается из указанного файла. Если программа запускается без ключей, то конфигурационные параметры будут зачитываться из файла viewer.cf в текущей директории. Этот файл следует подготовить с помощью редактора текстов до запуска серверной программы.
Правила оформления конфигурационного файла следующие:
- Любая строка, начинающаяся с символа '#' считается комментарием.
- Комментарии также могут быть определены в той строке, в которой определен параметр, началом комментария считается символ '#'.
- Каждая строка файла определяет один параметр.
- Имя параметра отделяется от его значения с помощью символа '=' и произвольного количества space пробелов или символов табуляции.
- Имя параметра не зависит от регистра символов, значение параметров всегда регистрозависимое.
- Любой параметр может быть опущен в конфигурационном файле, при этом будет использовано значение по умолчанию.
- Порядок следования конфигурационных параметров не имеет значения.
Программа воспринимает следующие внешние сигналы:
- SIGHUP
- производится ротация logfile и перезачитывается конфигурация. Полезно при изменении конфигурации сервера на лету.
- SIGTERM
- выполнение программы немедленно прекращается.
- SIGUSR1
- сервер пытается отработать все полученные запросы и останавливает свою работу.
Кроме того, при получении сигналов ошибки программы SIGBUS, SIGILL, SIGSEGV, SIGQUIT программа оставляет в домашней директории core файл и шлет сообщение администратору системы об ошибке в программе по SMTP на адрес, указанный в конфигурации. Посылка таких сообщений может быть запрещена в отладочных целях с помощью конфигурационного параметра sendmessages=0 (см. ниже). 5. Список параметров конфигурации. Ниже приведен список используемых конфигурационных параметров сервера VS и краткое их описание:
6. Пример конфигурационного файла.
- rootdir = /some/directory
- Корневая директория сервера VS, относительно которой могут быть определены все остальные директории или имена файлов. Если имя файла начинается с символа '/', то считается, что в конфигурации указывается абсолютный путь к файлу, иначе считается, что имя файла будет определено относительно rootdir. Значение по умолчанию: /usr/local/turtle
- spooldir = /spool
- Директория, являющаяся началом дерева хранения самих документов, как это описано в принципах работы.
- dispatchername = dispatcher-001.turtle.ru
- Каноническое Интернет имя или IP адрес сервера Dispatcher Server (DS), необходимо для зачитывания общих для поисковой системы конфигурационных параметров (например, списка разрешенных для соединения машин и пр.) Если общие конфигурационные параметры по каким-либо причинам не могут быть получены от DS (например, он просто не запущен), то будет произведена попытка зачитать их из локальных файлов конфигурации, определенных ниже. Значение по умолчанию: dispatcher-001.turtle.ru
- port = 3320
- Номер порта, по которому может быть произведено соединение с центральным диспетчером. Значение по умолчанию: 3320.
- archname = archiver-001.turtle.ru
- Каноническое имя или IP адрес сервера, на котором запускается данная программа. Если компьютер имеет несколько имен и/или адресов, то принимать запросы он будет только при обращении к указанному в этом поле имени. Значение по умолчанию: archiver-001.turtle.ru.
- archport = 3324
- Номер порта, по которому данный сервер будет принимать SSTP запросы, и посылать ответы на них. Необходимо конфигурировать так это значение, чтобы оно не вступало в конфликт с другими компонентами поисковой системы или иными серверными программами, запущенными в пределах данного компьютера. Значение по умолчанию: 3324.
- progname = viewerd
- Префикс для занесения учетных записей в журнал работы программы (logfile). Если различными компонентами системы используется общий журнал, то данный префикс позволит отличить записи данного сервера от других. Программное обеспечение также может быть откомпилировано с ключом компиляции -DUSE_SYSLOG. При этом записи будут производиться как в указанный logfile, так и используя syslog. При сборке пакета с ключом компиляции -DLOG_DAYTIME в журнал работы вместе с каждой записью будет занесено текущее время. По умолчанию, данная функция отключена. Значение по умолчанию: берется из имени запускаемой программы argv[0].
- logfile = logs/viewerd.log
- Имя файла журнала работы программы. Значение по умолчанию: logs/turtled.log
- pidfile = logs/viewerd.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 и VS не производится, и данные этого файла используются только для идентификации при запросе статистики сервера по HTTP. Подразумевается, что VS находится за брандмауэром локальной сети и доступ к нему может быть осуществлен только QP по локальной сети. Содержание файла используется сервером, в случае если данные идентификации не могут быть получены от центрального диспетчера DS. Значение по умолчанию: conf/turtle.passwd.
- iddb = base/id.db
- Имя базы данных BerkeleyDB, содержащей объекты документов, как это описано в принципах работы VS.
- version = 1.0
- Текущая версия программного обеспечения. Поле носит информативный характер. В дальнейшем, значение этого поля планируется использовать для обеспечения программной совместимости компонент поисковой системы.
- maintainer = admin@e-mail.address
- Почтовый e-mail адрес администратора системы для посылки критических сообщений о работе программы.
- user = turtle
group = turtle- Имя и группа пользователя, от имени которого будет выполняться программа. Если программа запускается от имени суперпользователя, то ее привилегии будут изменены на указанные в этих полях привилегии из соображения безопасности для самой операционной системы. С использованием этих значений можно допускать автоматический запуск программы при рестарте компьютера, на котором установлен сервер VS. Значения по умолчанию: turtle/turtle.
- maxclients = 512
- Максимальное количество одновременно обслуживаемых запросов системой. Это значение не должно превышать максимального значения файловых дескрипторов, разрешенных операционной системой для данного пользователя. Если значение превышает максимально разрешенное, то оно будет уменьшено до правильного значения. Чрезмерное увеличение этого параметра без надобности может приводить к небольшой потере производительности. Уменьшение ниже требуемой величины приведет к отказу в обслуживании некоторых запросов. Рекомендованное значение 512. Значение по умолчанию: 8192.
- timeout = 300
- Интервал времени в секундах, спустя который будет производиться проверка кэш буфера на предмет удаления не используемых объектов. Значение по умолчанию: 300.
- readtimeout = 60
sendtimeout = 60- Таймауты системы для приема запросов и пересылки ответов от VS к QP. Если по истечению указанного периода в секундах запрос не удалось принять или ответ не удалось послать, то данное соединение закрывается.
- chroot = 0
- При запуске системы в целях безопасности программа может выполнить функцию chroot(). При этом, все содержимое каталогов, расположенных выше по дереву станет для программы недоступным. Текущей директорией и корнем станет директория, которая указана в параметре rootdir. Работоспособность данного параметра не проверялась, но особых препятствий не видно. Указанные действия осуществляются, если в данном поле определено значение, отличное от 0. Значение по умолчанию: 0.
- sendmessages = 1
- Данный параметр определяет посылать или нет сообщения по электронной почте администратору системы в случае критических ошибок.
- scanuser = user_name
scanpass = user_password- Имя пользователя и пароль, используемые для базовой SSTP идентификации при обращении к центральному диспетчеру. Подробнее см. SSTP/1.0. Значения данных полей будут посланы сервером VS центральному диспетчеру DS при запуске программы для получения общих конфигурационных параметров. Если со стороны диспетчера идентификация не будет произведена, то DS ответит кодом 403 FORBIDDEN. При этом VS попытается прочесть конфигурационные параметры из локальных файлов (см. выше).
- expire = 300
- Максимальное время жизни объекта кэширования в памяти сервера в секундах. По истечению указанного интервала в секундах на новом этапе проверки объект будет удален из памяти сервера, если за указанный период к нему не осуществлялось обращений. Значение по умолчанию: 600.
- debuglevel = 40
- Уровень занесения информации в журнал работы (см src/include/turtle_defs.h). Самый низкий уровень D_CRIT (10) - в журнал будут записаны только сообщения о критических ошибках, самый высокий - D_PROTOCOL, при этом в журнал будет занесено очень много отладочной информации, включая протокол сетевого обмена. Рекомендуемое значение:40-50.
- сompressdata = 1
- Параметр указывает на тип хранения самих документов. 1- в компрессированном виде, 0- нет.
# # turtle viewer daemon configuration file # rootdir = /home/turtle tmpdir = tmp spooldir = /spool dispatchername = dispatcher-001.turtle.ru archname = archiver-001.turtle.ru progname = viewerd logfile = logs/viewer.log pidfile = logs/viewer.pid pwfile = conf/turtle.passwd iddb = base/id.db # user = turtle group = turtle scanuser = yourname scanpass = abrakadabra compressdata = 1 port = 3320 archport = 3324 debuglevel = 70 maxclients = 16000 timeout = 60 readtimeout = 60 sendtimeout = 60 chroot = 0
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
Черепаший Ранк. Реклама на Turtle Логотипы Правовая информация Конфиденциальность Контакты |
![]() |
![]() |
![]() ![]() ![]() |