Сетевые технологии стали неотъемлемой частью современного общества. Благодаря им передача информации на большие расстояния перестала быть сложной задачей, а Интернет посредством коммуникационных каналов связывает все страны мира. Но многие технологии передачи данных и широко используемые протоколы, такие как TCP\IP, были разработаны довольно давно и сегодня не успевают за многократно возросшим трафиком [1]. Поэтому достаточно актуальны задачи оптимизации IP-трафика. Решаются они как на программном, так и на аппаратном уровне.
Самыми простыми способами являются пос- тоянное обновление сетевого оборудования и расширение канала связи, что довольно затратно. Поэтому во всем мире активно разрабатываются альтернативные подходы к повышению производительности существующих каналов связи. Для этого используются кэширование, сжатие (компрессия), особая настройка параметров соединения [1, 2] и др.
В Республике Беларусь существует немало крупных предприятий, имеющих свои локальные сети, предназначенные для обмена информацией между рабочими станциями и серверами, на которых размещены централизованные БД. Как правило, информация передается в несжатом виде, поэтому время ее передачи от серверов к рабочим станциям и наоборот может значительно возрасти, если последние находятся за пределами локальной сети, допустим, в сервисном центре другого региона. Сегодня некоторые белорусские предприятия (например «Атлант» и «МАЗ») интенсивно осваивают новые рынки сбыта и активно создают или начинают создавать сервисные центры за рубежом. Чтобы держать постоянную связь с головным отделением и иметь доступ к централизованным хранилищам информации, необходимы надежные технологии коммуникации. Такой технологией являются web-сервисы – идентифицируемые web-адресом программные системы, расположенные на стороне сервера, которые позволяют принимать запросы от клиентских приложений, расположенных на удаленных рабочих станциях, обрабатывать их, формировать ответ и отсылать его обратно.
Существует немало технологий создания надежных и безопасных web-сервисов, например технология Windows Communication Foundation (WCF) [3]. С ростом удаленности клиентов от серверов резко возросли задержки при передаче данных. Главная причина этого – отсутствие компрессии и кэширования данных, представляющих собой запросы и ответы на базе протокола SOAP (другими словами, большие объемы несжатой текстовой информации). Для решения данной проблемы был разработан акселератор WAN (Wide Area Network), который является независимым программным модулем.
В отличие от существующих сложных и достаточно дорогих универсальных WAN-акселераторов, предназначенных для оптимизации IP-тра- фика [4–6], предложенный акселератор прост в установке и сопровождении, так как представляет собой программный комплекс, специально предназначенный для ускорения работы web-сервисов. Он использует хорошо зарекомендовавшие себя алгоритмы сжатия и кодирования (шифрования) данных, а также оригинальный подход предупреждения передачи часто повторяемых ответов от сервера клиенту путем возвращения ответа прямо из кэша клиента, если нет явной необходимости его обновить. Использование данного акселератора позволит избежать больших затрат, связанных с модификацией уже существующих web-сервисов с целью ускорения передачи информации по сети, особенно по нестабильным каналам или каналам с низкой пропускной способностью.
Архитектура акселератора web-сервисов
Архитектура разрабатываемого акселератора представлена на рисунке 1. Он может работать в двух режимах – в режиме сервера и в режиме клиента. Работая в режиме сервера, акселератор прослушивает и обрабатывает запросы от такого же акселератора, но работающего в режиме клиента. Соответственно, работая в режиме клиента, акселератор отправляет запросы и принимает ответы от такого же акселератора, но работающего в режиме сервера. Данный акселератор должен быть установлен как на стороне клиентского приложения, так и на стороне web-сервиса и настроен таким образом, чтобы перехватывать HTTP-запросы от клиентского приложения web-сервису и туннелировать их по TCP-каналу, попутно выполняя операции кэширования, компрессии и кодирования. Таким образом, предлагаемый акселератор представляет собой своеобразную среду для передачи данных. Для простоты будем называть акселератор, работающий в режиме сервера, акселератором-сервером, акселератор, работающий в режиме клиента, акселератором-клиентом. Такая архитектура хорошо подходит для ускорения работы клиентских приложений, использующих синхронные запросы к web-сервисам, в которых не были предусмотрены механизмы компрессии и шифрования данных.
Акселератор-клиент служит прокси-сервером. Он перехватывает запросы, отсылаемые клиентским приложением web-сервису, определенным образом их обрабатывает и перенаправляет акселератору-серверу. Акселератор-сервер принимает запросы от акселератора-клиента, обрабатывает их, а затем направляет web-сервису. Между акселератором-клиентом и акселератором-сервером устанавливается TCP-соединение. К одному акселератору-серверу могут подключаться один или несколько акселераторов-клиентов. Данные по TCP-каналу передаются в зашифрованном виде. Шифрование осуществляется посредством самого акселератора. Рассмотрим подробнее ключевые методы, ускоряющие передачу данных по сети.
Ускорение передачи данных по сети путем кэширования
Существует ряд хорошо зарекомендовавших себя и широко применяемых методов оптимизации IP-трафика. Одним из них является кэширование данных, то есть хранение часто используемой информации в месте, откуда при необходимости ее можно быстро и легко извлечь. Такой возможностью обладают, например, web-браузеры, что позволяет загружать не весь контент повторно запрашиваемой web-страницы с удаленного сервера, а только некоторую обновленную информацию. Если множество клиентов выходят в Интернет через один серверный компьютер, имеющий непосредственное подключение к данной сети, с помощью специальных средств можно кэшировать информацию о запросах всех пользователей, извлекая ее каждый раз не из удаленного компьютера, а из памяти сервера [6]. Кроме того, можно использовать промежуточные серверы, предназначенные для кэширования информации, доступ к которым в большинстве случаев будет быстрее, чем при запрашивании этих же данных повторно с удаленного сервера, как это, например, реализовано в технологии Google Global Cache.
Особенностью предлагаемого решения является то, что и акселератор-клиент, и акселератор-сервер будут иметь свой собственный кэш, то есть кэширование информации будет вестись как на стороне клиента, так и на стороне сервера.
При перехвате HTTP-запроса от клиентского приложения акселератором-клиентом для него формируются постоянный уникальный ключ, который создается путем хеширования строки URI-запроса и (если это POST-запрос) его тела, а также временный уникальный ключ, сгенерированный случайным образом. Под временным ключом копия запроса помещается в кэш акселератора-клиента, а сам запрос направляется дальше акселератору-серверу. Акселератор-сервер получает запрос, помещает его копию под временным ключом, не совпадающим в общем случае с аналогичным ключом на клиенте, в свой кэш, вычисляет постоянный ключ, совпадающий с аналогичным ключом на клиенте, и направляет запрос web-сервису. Web-сервис генерирует ответ, приходящий сначала акселератору-серверу. Последний на базе тела ответа вычисляет хеш-код, затем помещает этот код и копию ответа в кэш, связывая его с соответствующим кэшированным запросом, присваивает паре запрос-ответ постоянный ключ (временный ключ удаляется) и отсылает ответ акселератору-клиенту, который осуществляет аналогичную операцию, направляя затем ответ клиентскому приложению. Таким образом, каждый запрос и ответ на него кэшируются дважды – на клиенте и на сервере. Общие схемы алгоритмов работы акселератора-клиента и акселератора-сервера представлены на рисунках 2 и 3 соответственно.
В случае перехвата акселератором-клиентом нового запроса последний вычисляет его хеш-код по указанному выше правилу и осуществляет поиск этого запроса по постоянному ключу в своем кэше. Если пара запрос-ответ с идентичным хеш-кодом (идентичным постоянным ключом) найдена в кэше, то акселератор-клиент посылает данный хеш-код акселератору-серверу. Тот, получив хеш-код запроса, ищет соответствующую пару запрос-ответ в своем кэше. Если такая пара имеется, акселератор-сервер отсылает назад хеш-код ответа. Акселератор-клиент получает хеш-код ответа и сверяет с аналогичным кодом у себя в кэше. Если коды идентичны, значит, ответ не изменился на сервере, поэтому акселератор-клиент возвращает ответ конечному клиенту из собственного кэша. При этом акселератор-сервер сразу же после отсылки хеш-кода ответа посылает запрос, который находится в его собственном кэше, web-сервису, чтобы обновить соответствующий ответ. Другими словами, акселератор-сервер асинхронно обновляет собственный кэш с тем, чтобы данные в нем были как можно актуальнее.
В случае повторного перехвата акселератором-клиентом идентичного запроса хеш-код ответа, хранящегося в его собственном кэше, и хеш-код обновленного ответа, хранящегося в кэше акселератора-сервера, могут различаться. За этим последует передача запроса от акселератора-клиента акселератору-серверу, чтобы обновить ответ в кэше акселератора-клиента и вернуть его более актуальную версию клиентскому приложению. Акселератор-сервер отошлет ответ из своего собственного кэша, а затем пошлет запрос web-сервису, чтобы снова обновить ответ.
Такие архитектура и схема работы акселератора позволят значительно ускорить процесс передачи данных в случае частой повторяемости идентичных запросов со стороны клиента, на которые приходят ответы с не очень часто либо с не обновляемым вообще содержимым. Значительно снизить задержки в ожидании ответа клиентом, вызванные длительностью обработки запроса web-сервисом (например, выборка из большого массива данных, проведение сложных расчетов и т.п.), может и асинхронное обновление кэша акселератора-сервера. Наличие же временных ключей позволит избежать конфликтов в случае одновременного получения идентичных запросов от нескольких клиентов в акселераторе-клиенте или нескольких акселераторов-клиентов в акселераторе-сервере.
Очевидный недостаток такой схемы в том, что всегда остается вероятность хранения на стороне акселератора-сервера неактуальных данных. Способствовать снижению этой вероятности может независимое асинхронное обновление кэша акселератора-сервера через определенные промежутки времени, причем для каждого запроса существует собственный таймер во избежание значительного роста нагрузки на web-сервис в случае обновления всего кэша целиком в один и тот же момент времени.
Ускорение передачи данных по сети путем их избирательного сжатия (компрессии)
Как уже было отмечено ранее, некоторые предприятия, имея старые, но хорошо отлаженные и работоспособные системы, в которых клиентские приложения должны постоянно контактировать с центральным сервером, а данные передаются в несжатом виде, сталкиваются с определенными трудностями при расширении такой системы и налаживании связи клиентских приложений с серверами не по локальной сети, а по сети Интернет. Из-за отсутствия сжатия данных время их передачи может значительно возрасти, особенно при нестабильном канале. Поэтому предлагаемый акселератор имеет возможность сжимать данные, проходящие через него, с целью повышения скорости их передачи.
Ключевым моментом является наиболее эффективное использование существующих алгоритмов сжатия данных. Эксперименты, проведенные с применением предлагаемого акселератора, показали, что сжимать пакет данных размером до 32 байт бессмысленно, так как это приводит к его увеличению, а до 512 байт нецелесообразно, поскольку при этом время сжатия может оказаться сопоставимым с временем передачи пакета. Поэтому 512 байт – это минимальный размер пакета, при котором следует проводить алгоритм сжатия.
Кроме того, в перспективе предполагается использование адаптивного сжатия пакетов, суть которого в том, чтобы в зависимости от типа данных подбирать наилучший алгоритм сжатия [7].
В заключение отметим, что предложенный программный модуль может быть полезен прежде всего предприятиям, имеющим централизованные системы обработки и управления информацией, в состав которых входят один или несколько серверов, предоставляющих доступ к информации посредством web-сервисов, и множество клиентов, находящихся на большом расстоянии от сервера (серверов). Использование и сочетание механизмов кэширования, компрессии и кодирования позволяют передавать данные значительно быстрее.
Разработанный WAN-акселератор не является универсальным средством. Эффективность его применения в условиях очень частого обновления информации для ответов на сервере и при пере- даче аудио и видео по сети невелика. Его применение целесообразно в случае необходимости ускорения работы клиентских приложений, требующих для своего функционирования частых синхронных запросов к web-сервисам, передающим данные в несжатом виде на базе SOAP-протокола.
Литература
1. Седых С. Аппаратная оптимизация IP-трафика: сохраним и приумножим TCP/IP? URL: http://www.setevoi.ru/cgi-bin/text.pl/magazines/2000/1/64 (дата обращения: 11.10.2012).
2. Introduction to WAN Optimization. URL: http://www.excitingip.com/459/introduction-to-wan-optimization-techniques/ (дата обращения: 11.10.2012).
3. Troelsen A., Pro C# and the .NET 4 Platform, 5th ed. NY, Springer-Verlag, 2010, 1752 p.
4. Optimize WAN and LAN Application Performance with TCP Express. URL: http://www.f5.com/pdf/white-papers/tcpexpress-wp.pdf (дата обращения: 11.10.2012).
5. WAN Optimization. URL: http://www.riverbed.com/us/solutions/wan_optimization/ (дата обращения: 11.10.2012).
6. WinGate: The Comprehensive Internet Management Solution for Windows. URL: http://www.redline-software.com/ eng/support/docs/wingate/ (дата обращения: 11.10.2012).
7. Воробьев И. WAN акселераторы // Storage News. 2008. № 2 (35). С. 24–27.