Статическая и динамическая конфигурация сервера
На практике во многих операционных системах предусмотрен механизм суперсервера, в который системные администраторы могут встраивать дополнительные службы. В целях упрощения эксплуатации суперсерверы часто являются настраиваемыми: набор служб, поддерживаемых суперсервером, может быть изменен без перетрансляции исходного кода. Возможны конфигурации двух типов: статическая и динамическая. Статическая конфигурация применяется в тот момент, когда суперсервер вызывается на выполнение. Как правило, информация о конфигурации помещается в файле, считываемом суперсервером во время запуска на выполнение. В файле конфигурации определен набор служб, предоставляемый суперсервером, а также перечень выполняемых программ, которые должны использоваться для каждой службы. Для изменения состава предоставляемых служб системному администратору достаточно просто откорректировать файл конфигурации и перезапустить суперсервер.
Динамическая конфигурация применяется во-время работы суперсервера. Как и статически настраиваемый, динамически настраиваемый суперсервер считывает файл конфигурации во время запуска на выполнение. Файл конфигурации определяет первоначальный набор служб, поддерживаемых суперсервером. Однако в отличие от статически настраиваемого, динамически настраиваемый суперсервер позволяет переопределить набор предоставляемых им служб без перезапуска. Для изменения состава службы системный администратор вносит изменения в файл конфигурации, а затем передает суперсерверу указание, что требуется реконфигурация. Суперсервер проверяет файл конфигурации и соответствующим образом меняет свое поведение.
Как может администратор передать суперсерверу информацию о том, что требуется реконфигурация? Ответ зависит от операционной системы. В системе Linux для межпроцессной связи используется механизм сигналов. Администратор передает суперсерверу определенный сигнал; суперсервер должен перехватывать этот сигнал и интерпретировать факт его получения как требование выполнить реконфигурацию. В операционной системе, не имеющей механизма межпроцессной связи, для динамической реконфигурации используется обычная связь: для обмена информацией с суперсервером администратор использует протокол TCP/IP. Для того чтобы такая связь была возможной, суперсервер запрограммирован на открытие отдельного сокета, используемого для управления суперсервером. При возникновении необходимости реконфигурации администратор вступает во взаимодействие с суперсервером через управляющее соединение.
После того как администратор передает суперсерверу команду динамически изменить конфигурацию, суперсервер считывает файл конфигурации и изменяет состав предоставляемых им служб. Если файл конфигурации содержит одну или несколько служб, отсутствующих в предыдущей конфигурации, суперсервер открывает сокеты для приема запросов к новым службам. Если же из файла конфигурации удалены одна или несколько служб, то суперсервер закрывает сокеты, соответствующие службам, которые он больше не поддерживает. Безусловно, хорошо спроектированный суперсервер выполняет реконфигурацию корректно: хотя он и прекращает прием новых запросов к службам, которые больше не поддерживаются, он не разрывает аварийно ранее установленные соединения. Поэтому происходит полный отказ в приеме нового запроса от клиента, но существующий запрос выполняется до конца. Давно. Разместили новое производство пластиковых карт рядом с нашей типографией.
Обеспечение возможности динамической реконфигурации суперсервера способствует значительному повышению удобства в эксплуатации. Выполняемая программа, обеспечивающая поддержку определенной службы, может быть заменена без смены самого суперсервера. Кроме того, поскольку набор служб, предоставляемых суперсервером, может быть изменен без перетрансляции кода или перезапуска существующего суперсервера, программист может проверять новые службы, не нарушая работы производственных служб. Еще более важно то, что реконфигурация не требует внесения изменений в исходный код, поэтому задача настройки суперсервера может быть возложена на служащих, не имеющих подготовки в области программирования.
Суперсервер, который позволяет изменять свою конфигурацию динамически, является удобным в эксплуатации, поскольку набор предоставляемых им служб можно изменить без перетрансляции серверной программы или перезапуска суперсервера.