
124 Часть II. Компоненты программного обеспечения Web
рапичение на число одновременно выполняющихся процессов. Оптимизация
производительности сервера и времени ожидания пользователей требует подбора
настраиваемых параметров.
Сервер Apache имеет возможности настройки параметров, значения которых оп-
ределяются сетевым соединением, обслуживаемым каждым из дочерних процессов.
Протокол Transmission Control Protocol (TCP) координирует доставку сообщений
с запросами и ответами, о чем подробнее пойдет речь в главе 5 (раздел 5.2). Роди-
тельский процесс прослушивает клиентские запросы для установления ТСР-соеди-
пепий. Когда все дочерние процессы обрабатывают соединения, операционная систе-
ма поддерживает очередь ожидающих соединений. Сервер Apache накладывает огра-
ничение на число соединений в очереди (ListenBacklog). Операционная система
имеет буфер передачи для хранения исходящих данных для каждого установленного
соединения. Сервер Apache может изменять размер этого буфера (SendBufferSize).
Увеличение размера буфера передачи позволяет повысить производительность, осо-
бенно в случае большой задержки при обмене данными между сервером и клиентом.
Наконец, сервер ограничивает число HTTP-запросов для одного ТСР-соединепия
(MaxKeepAliveRequests) и максимальное время, в течение которого соединение мо-
жет оставаться неактивным (KeepAliveTimeout). При достижении одного из этих ог-
раничений клиентский процесс закрывает ТСР-соединение.
ПУЛЫ РЕСУРСОВ
Web-сервер состоит из программных модулей, выполняющих различные задачи,
такие как прослушивание новых соединений, синтаксический анализ запросов, соз-
дание ответов и передача сообщений-ответов. Подобно любому другому программ-
ному обеспечению, эти модули потребляют ресурсы операционной системы. На-
пример, обработка запроса может потребовать от процесса выделения памяти, дос-
тупа к файлам, создания дочернего процесса для исполнения сценария, передачи
данных через ТСР-соединение клиенту. Одна из основных проблем при разработке
интенсивно работающего сервера — обеспечить, чтобы эти ресурсы операционной
системы использовались эффективно. Проблемы возникают, когда прикладное
программное обеспечение не освобождает эти системные ресурсы после заверше-
ния задачи. Если объем системных ресурсов со временем убывает, то активные
процессы не смогут получить необходимые им ресурсы. Это неприемлемо для
Web-сервера, который должен постоянно выполняться в течение долгого периода
времени. Система должна возвращать ресурсы после завершения задач.
Сервер Apache решает эту проблему с помощью специальных пулов. Пул пред-
ставляет собой структуру данных, которая отслеживает группу ресурсов операци-
онной системы, создаваемых и уничтожаемых совместно. Допустим, что некоррект-
ный запрос привел к ошибке. Процесс, обрабатывающий запрос, может просто
уничтожить соответствующий пул, чтобы вернуть ресурсы операционной системе
для их использования другими модулями. Концепция пулов позволяет оформить
выделение и освобождение ресурсов в виде небольшого, удобного для тестирова-
ния фрагмента программного обеспечения сервера. Это защищает сервер от про-
граммных ошибок или некорректных ситуаций, возникающих в других фрагментах
кода. Концепция пулов основывается на двух основ1Ш1х принципах: процедуры,
поддерживающие концепцию пулов, будут работать корректно, а остальное про-
граммное обеспечение сервера должно выделять и освобождать ресурсы только
с помощью механизма пулов.
Другие части программного обеспечения сервера взаимодействуют с пулами че-
рез интерфейс прикладного программирования (API). API содержит базовые