Технология Клиент-Сервер 2003'3 |
|||||||
|
Синг Ли (westmakaha@yahoo.com) Wrox Press, июль, 2003.
Когда платформа J2EE была «доведена» до ума, она открыла возможность развёртывания серверов в сетевые кластеры для представления Web-сервисов и Web-приложений в Web-слое. Эти серверы, объединённые в локальную сеть, могут являться относительно недорогим кластерным решением. Последним кусочком кластерной головоломки является программное обеспечение. В этих сериях я протестировал три пакета, поставляемых с открытым исходным кодом, в надежде найти высокопроизводительное решение для кластера Web-слоя. Тестирование я начал с пакета JavaGroups.
Распространение электронной коммерции породило необходимость одновременного обслуживания тысяч пользователей. В условиях жесткой конкуренции online-магазин, "падающий" от наплыва покупателей, просто не выживет. В то время как масштабируемые решения для транзакционного слоя J2EE-модели (баз данных, мониторов транзакций, очередей сообщений и т.д.) широко распространены, решения для масштабирования Web-приложений или сервисов на Web-слое только начинают появляться. В этой статье мы рассмотрим популярную open source-среду JavaGroups, которая может быть использована для масштабирования Web-приложений.
Существуют проверенные способы масштабирования Web-слоя. Интуитивно понятно, что для увеличения числа одновременно поддерживаемых сервисом сессий нужно добавить ресурсов серверу приложений. Эти ресурсы могут принимать форму памяти, дискового пространства или более быстрого процессора (рисунок 1).
Рисунок 1. Масштабирование Web-слоя
на одном SMP-сервере.
Однако этот подход рано или поздно упирается в ограничения, накладываемые адресным пространством используемого процессора или ценой SMP-компьютера. Серверные конфигурации с числом процессоров свыше четырех обычно требуют особого аппаратного обеспечения, и их использование быстро становится неоправданно дорогим. Это устанавливает практический верхний предел числа пользовательских сессий, одновременно обслуживаемых Web-слоем односерверного решения.
Кроме того, что число поддерживаемых сессий ограничено, односерверное решение ненадежно по своей природе. Доступность такого решения зависит от работоспособности единственного сервера. Есть технические способы повышения надежности таких решений (серверы с горячей заменой, отказоустойчивые дисковые массивы), но они крайне дороги.
Производители аппаратного обеспечения постепенно поворачиваются к кластерным решениям, как к жизнеспособному решению проблемы масштабируемости. Кластеризация позволяет группе (как правило слабосвязанных) серверов работать как единому серверу. Преимущества кластеров:
Отказоустойчивость.
Высокая доступность сервиса при его одновременной работе на нескольких серверах кластера.
Баланс загрузки с помощью отсылки запросов наименее загруженному серверу кластера.
Кластеры, что называется, "попали в струю" благодаря набору взаимосвязанных факторов:
Технология серверов приложений J2EE достигла уровня зрелости, а ее модель управления состоянием и операционная модель теперь хорошо специфицированы и вполне понятны. С помощью репликации состояния контейнеров Web-слоя в кластере серверов можно реализовать масштабируемое серверное решение.
Цена PC-серверов исторически низка (хотя мощь CPU отдельного сервера продолжает расти), что делает кластеры крайне доступными по цене.
Высокоскоростные LAN-соединения дешевы и широко распространены. В то же время высокоуровневые сетевые API весьма упрощают программирование. Такие сетевые соединения вполне можно использовать в кластерах вместо специализированных средств.
Широкое распространение открытой ОС Linux позволяет пользователям самостоятельно создавать кластерные решения.
Такие связанные через LAN и основанные на дешевых серверах кластеры обычно не имеют гарантий, которыми снабжаются калиброванные, настроенные и разработанные под конкретную задачу фирменные системы, но зато они предлагают крайне эффективное по стоимости решение для масштабируемых систем с высокой доступностью и распределением нагрузки. Рисунок 2 демонстрирует топологию такого решения.
Конечно, "правильное железо" – это только половина истории. Вместо создания собственного сетевого коммуникационного ПО для каждого конкретного случая, правильным представляется поиск некоторого общего "клея", служащего для объединения серверов в кластер. Это растущая область практических исследований, которая собственно и может сделать кластеры дешевых серверов реальностью. Однако прежде, чем разбираться, каким образом JavaGroups может служить таким "клеем", разберем подробнее проблему масштабирования Web-слоя.
Рисунок 2. Масштабирование Web-слоя
с помощью кластера серверов.
Представьте покупателя онлайн-магазина. Он просматривает каталоги и помещает несколько предметов в "корзину". Обычно реализация "корзины" управляет серверной сессией. Ключ к сессии либо хранится клиентским броузером как cookie, либо в виде URL с присоединенным ID сессии. Последовательные запросы от его броузера будут возвращать этот ID, заставляя сервер поддерживать данную сессию. Одновременно пользоваться магазином может множество покупателей, и сервису онлайн-магазина вынужден будет поддерживать все их сессии. Предположим, что все эти сессии не персистентны, а хранятся в памяти соответствующим Web-сервисом.
Проблема с масштабированием заключается в том, что если сайт онлайн-магазина в действительности обслуживается кластером, последовательные запросы одной сессии нужно направлять одной и той же машине (так как сессия хранится именно на этой машине). Если придать сессии некую форму и реплицировать ее по всему кластеру, все серверы кластера смогут принимать запросы всех покупателей.
Разумеется, можно написать собственное сетевое ПО для репликации сессий. Из-за возможности сбоев сетевого оборудования это ПО может оказаться весьма непростым в кодировании, тестировании и поддержке. К счастью, JavaGroups предоставляет готовые решения для репликации сессий в кластере.
Чтобы понять, как работает такая репликация, и почему несколько open source-серверов приложений уже выбрали для этого JavaGroups, давайте рассмотрим JavaGroups подробнее...
Copyright © 1994-2016 ООО "К-Пресс"