Эффективность Web-сервера , управление соединениями

Эффективность Web-сервера зависит от числа одновременно открытых соединений. Web-серверы контролируют число открытых соединений двумя основными способами: отвергая запросы на новые соединения и закрывая пеактивпые соединения.

УПРАВЛЕНИЕ ОДНОВРЕМЕННО ОТКРЫТЫМИ СОЕДИНЕНИЯМИ

Каждое ТСР-соедииение использует оперативную память на сервере для хранения информации о своем состоянии, входпых и выходных буферах. Например, каждое соединение имеет блок памяти, в котором хранятся размер скользящего окпа и оцепка RTT. Требования к объему памяти могут быть достаточно высокими на сервере, поддерживающем одновременно большое число соединений. Неактивные соедипеиия в состоянии TIME_WAIT также потребляют ресурсы сервера, как это оиисано в разделе 8.1.3. Кроме того, сервер создает отдельный процесс для каждого открытого соединения, что приводит к дополнительному расходу памяти. Соединения TCP и дапиые об их состояниях используют память, которую можно было бы использовать для других целей, иаиример для кэширования Web-pecypcoB и их метаданных на сервере, как об этом рассказано в главе 4 (раздел 4.3). Кэшировапие ресурсов на сервере становится менее эффективным, когда сервер работает с очень большим числом соединений одновременно. Кэшировапие избавляет сервер от на- кладпых расходов, связанных с загрузкой ресурсов с диска и регенерацией метаданных.

Накладные расходы по обработке полученного пакета возрастают с увеличением числа открытых соединений. Когда пакет прибывает, операционная система должна проверить lP-адреса и номера портов, чтобы демультиплексировать пакет п определить, какому соединению он принадлежит. В некоторых старых операционных системах демультиплексирование пакетов требовало липейпого сканирования списка соединений; в качестве усовершенствования соединения в состоянии TIME_WAIT могли быть перенесены в копец списка в связи с малой вероятио- стыо получения ими пакетов. Для дополнительного ускорения поиска современные операционные системы используют хэш-таблицу, которая отображает список IP-адресов и номеров нортов на список соединений. Но время достуиа и требования к памяти по-прежпему увеличиваются при росге числа открытых соедипепий. Помимо этого в случае управления по событиям, необходим отдельный процесс для прослушиваиия пакетов, прибывающих но всем открытым соединениям (например, с помощью системного вызова select()). Накладные расходы на вызов системной функции увеличиваются с ростом числа одновременно открытых соединений, даже если эти соединения неактивны [BM98J.

Оптималыюе число соединений зависит от архитектуры сервера и особенностей НТТР-трафика. Создание и передача ответов потребляет дисковые, процессорные, сетевые ресурсы и ресурсы оперативной памяти сервера. Расиределепие этих ресурсов между большим числом одновременных запросов приводит к большей задержке в создании и передаче ответных сообщений. Как крайний пример, представим себе Web-сервер, который запускает CGI-сцепарий, который требует двух секунд для создания каждого ответа. Если позволить процессору переключаться для выполнения сценариев, обслуживающих десять запросов, то это приведет к 20-ce- купдной задержке при создании каждого сообщения. Большая и заметпая пользователю задержка может вынудить пользователя покипуть сайг, отменить запрос и передать его заново. Низкая производительность раздражает пользователей и расходует ресурсы сервера виустую. В худшем случае такой сервер будет нерегружеи, не выполняя пикакой полезной работы. Число ТСР-соедипепий должно тщательно контролироваться, чтобы избежать такой ситуации.

Несмотря на недостатки открытия большого числа соедипепий, серверу не следует ограничивать их число без надобиосги. Ограничение числа одновременно открытых соединений может заблокировать или задержать запросы на установку соедипепий для новых клиентов. Когда сервер достигает максимального числа поддерживаемых соединений, новые пакеты SYN помещаются в очередь. Запросы задерживаются, пока не закроется одно из открытых соединений. Когда очередь заполнена, сервер отбрасывает пакеты SYN, отвергая тем самым запросы на новые соединения. Чрезмерно заниженный лимит допустимого числа соединений также приводит к пеоптималыюму использованию ресурсов сервера и сети. Серверу требуется определенное число активных ТСР-соедипепий, чтобы использовать доступную пропускную способность сети, потому что скорость передачи сообщений для мпогих соединений ограничивается величиной RTT и пропускпой способностью пути к клиенту. Сервер может носылать ответы большому числу клиентов с низкоскоростными подключениями, не перегружая своего высокоскоростного подключения к Internet.

СТРАТЕГИИ ЗАКРЫТИЯ ДОЛГОВРЕМЕННЫХ СОЕДИНЕНИЙ

В рамках управления числом соединений сервер НТТР/1.1 должен решать, когда закрывать долговременное соединение. Сохранение долговременного соединения позволяет серверу быстрее реагировать на последующие запросы от данного клиента и избежать накладных расходов на установку и закрытие соединения. Поддержание соединения между передачами данных увеличивает общее число одновременно открытых соединений на сервере. Сервер может применять широкий набор стратегий закрытия долговременных соединений. Самая простая стратегия — закрывать неактивные соединения после истечения таймаута. Например, соединение может быть закрыто, если в течепие 15 секупд не пришло запроса. Если соединение было неактивно в течепие нескольких секунд, то маловероятно получение запроса в ближайшем будущем.

Но даже относительно небольшой таймаут может держать соединение открытым слишком долго, так как многие клиенты запрашивают единственный ресурс с сервера. Чтобы справиться с такой ситуацией, сервер может применять гибридную методику [PM95]. Сервер может использовать небольшой таймаут после первого запроса и увеличивать его, если клиент сделал дополнительные запросы. В дополнение к применению таймаута сервер может ограничить число запросов, обрабатываемых соединением. В противном случае у клиента будет повод периодически отправлять запросы только для того, чтобы поддерживать долговременное соединение открытым. Например, каждые десять секуид браузер может создавать HTTP-запрос, даже если на самом деле ничего не требуется, просто для поддержания соединепич в открытом состоянии. Ограничивая число запросов, которое Можно сделать через соединение, сервер делает такое поведение невыгодным. С другой стороны, такая методика заставляет корректно ведущего себя клиента нести накладные расходы но созданию нового соединения, когда исчерпывается лимит запросов.

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

Резюме

Несмотря на преимущества распределения коммуникационных функций но слоям, взаимодействие этих слоев может негативно сказаться на работе приложения. Таймеры, управляющие ключевыми операциями в TCP, оказывают влияние на ироизводительпость HTTP. Средства TCP, которые были разработаны, когда Telnet и Rlogin были доминирующими приложениями, могут вредно влиять на передачу данных во Всемирной паутине. Детали реализации компонентов программного обеспечения Web могут смягчить или наоборот усилить эти эффекты. В отличие от более рапиих Internet-приложений, Web-клиент обычно использует несколько соединений транспортного уровня одновременно, чтобы параллельно загружать различные Web-pecypcbi. Параллельные соединения увеличивают загрузку сервера и сети и приводят к иеравпомерному перераспределению пропускной способности между пользователями. Силыю загруженные Web-серверы и прокси-серверы поддерживают много ТСР-соедипений от лица различных клиентов. Эффективность Web-серверов и прокси-серверов зависит от применения эффективных стратегий управления количеством одновременно открытых соединений.

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100