Технология Клиент-Сервер 2003'4 |
|||||||
|
На Web-уровне приложений J2EE, там, где находятся серверы приложений, состояние приложений часто хранится в форме серверных сессий. Если придать этим сессиям определенный вид и реплицировать их в группе серверов, можно создать масштабируемый и высокодоступный кластер для исполнения Web-приложений и Web-сервисов, созданных с помощью Java. В первой статье этой серии (Практическое упражнение с набором средств для распределённых решений, ТКС 3’2003) разбиралось, как это сделать с помощью JavaGroups.
Во второй статье мы рассмотрим несколько отличающийся подход к масштабированию Web-приложений и Web-сервисов на серверных кластерах. Технология, о которой пойдет речь, называется JavaSpaces, программная служба, входящая в семейство технологий Jini. JavaSpaces дает возможность использования более высокоуровневого подхода к дизайну распределенных систем в целом (и кластерных решений, в частности), уменьшая сложность дизайна и увеличивая адаптивность. С помощью реализации модели распределенной разделяемой памяти мы сможем сосредоточиться на совместном использовании данных сессии в кластере серверов (вместо репликации, рассмотренной в предыдущей статье).
Концептуально JavaSpaces – это распределенные хранилища, в которые можно поместить Java-объекты, или вхождения (entries). Их пространство может одновременно использоваться несколькими пользователями (клиентами). Пользователи – это, как правило, другие узлы сети или независимые виртуальные машины Java (JVM). После помещения Java-объекта в это пространство (операцией write) любой пользователь сможет прочитать его контент, изъяв объект (операцией take) или оставив в неприкосновенности (операцией read).
В этих трех простых операциях (write, take и read) заключается вся суть JavaSpaces (рисунок 1). Их можно использовать для создания распределенных, массивно-параллельных или кластерных конфигураций сети.
На рисунке 1 механизм согласования шаблонов JavaSpaces дает клиентам возможность выборочно читать или изымать объекты из соотвтетствующего пространства.
ПРИМЕЧАНИЕ Поиск по шаблону в JavaSpaces Методы read, take, readIfExists, takeIfExists и notify используют механизм поиска по шаблонам для определения вхождения JavaSpaces, с которым предстоит работать. Точнее, шаблон – это частично или полностью заполненное вхождение. Тип вхождения должен описывать тип искомого объекта или подкласс. |
В первой статье этой серии речь шла о работе с группой процессов, отслеживании членства в группе, а также координации, отправке и приеме сообщений. JavaSpaces позволяет создать распределенную систему, не зная о сообщениях, группах или количестве членов. На самом деле, при эксклюзивном использовании операций read, write и take распределенное приложение JavaSpaces может быть полностью однопоточным – без всяких параллелизмов! Другими словами, с JavaSpaces при дизайне кластерных систем можно работать на очень высоком уровне абстракции. Два ключевых преимущества работы на таком высоком уровне:
Эти достоинства не помешали бы любой программной системе, не только традиционно сложным распределенным приложениям. Разумеется, общая сложность проблемы распределенных вычислений никуда не девается. Что меняется – так это уровень обработки этой сложности. Теперь большинство сложных проблем решается специалистами только один раз.
Физически JavaSpace – это Java-интерфейс, реализованный интегрированным сервисом Jini. Этот интерфейс, net.jini.space.JavaSpace, – единственный способ доступа клиента JavaSpaces к функциональности этого сервиса. Сервис JavaSpaces – это удаленный сервис, а приложение работает с локальным Jini-прокси, вызывая интерфейс JavaSpaces «локально», в виртуальной машине приложения (см. таблицу 1).
...
Использование технологий JavaSpaces и Jini дает возможность высокоуровневого дизайна кластерных систем. Используя три базовые операции (read, take и write), мы создали модель распределенной разделяемой памяти для совместного использования серверных сессий приложений в кластере. Поддержка транзакций и лизинга в JavaSpaces позволяет обойти частичные сбои и сосредоточиться на механизме совместного использования сессий.
У каждого распределенного приложения есть собственные уникальные требования, и достаточно сложно – если не невозможно – создать API, удовлетворяющее потребностям всех приложений. Мы рассмотрели различные требования, присущие совместно используемым сессиям на отказоустойчивых кластерах с горячим резервированием, и кластерных конфигурациях с распределением нагрузки. Адаптивно работая на высоком уровне, JavaSpaces позволяют создавать решения, удовлетворяющие различные приложения с минимальными изменениями кода. Наше приложение-«покупательская корзина» для нормальной работы нуждается в оповещениях о записи в сессию. JavaSpaces снова приходит на помощь, благодаря поддержке удаленных оповещений. Изменение приложения не потребовало изменения дизайна и позволило обойтись минимальными изменениями кода.
На рисунке 7 показан непрерывный спектр возможностей дизайна, от концептуальных сверху до физических – внизу.
В верхней части спектра дизайн решения существенно проще, так как можно работать с объектами и компонентами, лежащими ближе к решаемой проблеме. Например, можно работать на основе объекта «session». В нижней части спектра находятся детали реализации (такие, как «отправить этот пакет по сети»). Работа на низком уровне дает больший контроль и гибкость, но от разработчика потребуется больше работать над дизайном, кодированием и тестированием. Работа на высоком уровне позволяет создавать решения быстрее и фокусироваться на реальных проблемах, но заставляет в большей степени полагаться на реализацию базовой технологии.
Разработчики кластерных решений могут выбрать технологию из любой части спектра. JavaSpaces располагаются достаточно высоко, а JavaGroups, описанные в предыдущей статье - существенно ниже. В следующей (последней) статье этой серии мы рассмотрим технологию, расположенную еще выше, чем JavaSpaces, и увидим, как она поможет нам сделать больше с меньшим объемом кода при разработке кластерных решений для Web-уровня.
Copyright © 1994-2016 ООО "К-Пресс"