Продолжается подписка на наши издания! Вы не забыли подписаться?

Практическое упражнение с набором средств для распределённых решений**
Создание гибких масштабируемых решений с помощью JavaSpaces

Автор: Синг Ли (westmakaha@yahoo.com)
Wrox Press, июль, 2003.

На Web-уровне приложений J2EE, там, где находятся серверы приложений, состояние приложений часто хранится в форме серверных сессий. Если придать этим сессиям определенный вид и реплицировать их в группе серверов, можно создать масштабируемый и высокодоступный кластер для исполнения Web-приложений и Web-сервисов, созданных с помощью Java. В первой статье этой серии (Практическое упражнение с набором средств для распределённых решений, ТКС 3’2003) разбиралось, как это сделать с помощью JavaGroups.

Во второй статье мы рассмотрим несколько отличающийся подход к масштабированию Web-приложений и Web-сервисов на серверных кластерах. Технология, о которой пойдет речь, называется JavaSpaces, программная служба, входящая в семейство технологий Jini. JavaSpaces дает возможность использования более высокоуровневого подхода к дизайну распределенных систем в целом (и кластерных решений, в частности), уменьшая сложность дизайна и увеличивая адаптивность. С помощью реализации модели распределенной разделяемой памяти мы сможем сосредоточиться на совместном использовании данных сессии в кластере серверов (вместо репликации, рассмотренной в предыдущей статье).

Три основные операции при создании распределенных систем

Концептуально JavaSpaces – это распределенные хранилища, в которые можно поместить Java-объекты, или вхождения (entries). Их пространство может одновременно использоваться несколькими пользователями (клиентами). Пользователи – это, как правило, другие узлы сети или независимые виртуальные машины Java (JVM). После помещения Java-объекта в это пространство (операцией write) любой пользователь сможет прочитать его контент, изъяв объект (операцией take) или оставив в неприкосновенности (операцией read).


Рисунок 1. Основные операции JavaSpaces.

В этих трех простых операциях (write, take и read) заключается вся суть JavaSpaces (рисунок 1). Их можно использовать для создания распределенных, массивно-параллельных или кластерных конфигураций сети.

На рисунке 1 механизм согласования шаблонов JavaSpaces дает клиентам возможность выборочно читать или изымать объекты из соотвтетствующего пространства.

ПРИМЕЧАНИЕ

Поиск по шаблону в JavaSpaces

Методы read, take, readIfExists, takeIfExists и notify используют механизм поиска по шаблонам для определения вхождения JavaSpaces, с которым предстоит работать. Точнее, шаблон – это частично или полностью заполненное вхождение. Тип вхождения должен описывать тип искомого объекта или подкласс.

Суть JavaSpaces

В первой статье этой серии речь шла о работе с группой процессов, отслеживании членства в группе, а также координации, отправке и приеме сообщений. JavaSpaces позволяет создать распределенную систему, не зная о сообщениях, группах или количестве членов. На самом деле, при эксклюзивном использовании операций read, write и take распределенное приложение JavaSpaces может быть полностью однопоточным – без всяких параллелизмов! Другими словами, с JavaSpaces при дизайне кластерных систем можно работать на очень высоком уровне абстракции. Два ключевых преимущества работы на таком высоком уровне:

Эти достоинства не помешали бы любой программной системе, не только традиционно сложным распределенным приложениям. Разумеется, общая сложность проблемы распределенных вычислений никуда не девается. Что меняется – так это уровень обработки этой сложности. Теперь большинство сложных проблем решается специалистами только один раз.

Применение JavaSpaces

Физически JavaSpace – это Java-интерфейс, реализованный интегрированным сервисом Jini. Этот интерфейс, net.jini.space.JavaSpace, – единственный способ доступа клиента JavaSpaces к функциональности этого сервиса. Сервис JavaSpaces – это удаленный сервис, а приложение работает с локальным Jini-прокси, вызывая интерфейс JavaSpaces «локально», в виртуальной машине приложения (см. таблицу 1).

...

Заключение

Использование технологий JavaSpaces и Jini дает возможность высокоуровневого дизайна кластерных систем. Используя три базовые операции (read, take и write), мы создали модель распределенной разделяемой памяти для совместного использования серверных сессий приложений в кластере. Поддержка транзакций и лизинга в JavaSpaces позволяет обойти частичные сбои и сосредоточиться на механизме совместного использования сессий.

У каждого распределенного приложения есть собственные уникальные требования, и достаточно сложно – если не невозможно – создать API, удовлетворяющее потребностям всех приложений. Мы рассмотрели различные требования, присущие совместно используемым сессиям на отказоустойчивых кластерах с горячим резервированием, и кластерных конфигурациях с распределением нагрузки. Адаптивно работая на высоком уровне, JavaSpaces позволяют создавать решения, удовлетворяющие различные приложения с минимальными изменениями кода. Наше приложение-«покупательская корзина» для нормальной работы нуждается в оповещениях о записи в сессию. JavaSpaces снова приходит на помощь, благодаря поддержке удаленных оповещений. Изменение приложения не потребовало изменения дизайна и позволило обойтись минимальными изменениями кода.

На рисунке 7 показан непрерывный спектр возможностей дизайна, от концептуальных сверху до физических – внизу.


Рисунок 7.

В верхней части спектра дизайн решения существенно проще, так как можно работать с объектами и компонентами, лежащими ближе к решаемой проблеме. Например, можно работать на основе объекта «session». В нижней части спектра находятся детали реализации (такие, как «отправить этот пакет по сети»). Работа на низком уровне дает больший контроль и гибкость, но от разработчика потребуется больше работать над дизайном, кодированием и тестированием. Работа на высоком уровне позволяет создавать решения быстрее и фокусироваться на реальных проблемах, но заставляет в большей степени полагаться на реализацию базовой технологии.

Разработчики кластерных решений могут выбрать технологию из любой части спектра. JavaSpaces располагаются достаточно высоко, а JavaGroups, описанные в предыдущей статье - существенно ниже. В следующей (последней) статье этой серии мы рассмотрим технологию, расположенную еще выше, чем JavaSpaces, и увидим, как она поможет нам сделать больше с меньшим объемом кода при разработке кластерных решений для Web-уровня.

Ссылки

  1. ftp://www6.software.ibm.com/software/developer/library/j-cluster2.zip – исходный код и конфигурационные файлы.
  2. http://www.jini.org/ – официальный Web-сайт Jini-сообщества.
  3. http://www.jini.org/downloads/ – последний релиз Jini и JavaSpaces с документацией.
  4. http://archives.java.sun.com/archives/javaspaces-users.html – архив рассылки по JavaSpaces.
  5. http://www.gigaspaces.com/ – коммерческая реализация JavaSpaces.
Прочитать статью полностью вы можете в печатной версии журнала

Copyright © 1994-2016 ООО "К-Пресс"