Введение

Тупловое пространство — это реализация парадигмы ассоциативной памяти для параллельных/распределённых вычислений. Оно предоставляет хранилище туплов, к которому можно обращаться одновременно. В качестве иллюстративного примера рассмотрим ситуацию, когда есть группа процессоров, производящих фрагменты данных, и группа процессоров, использующих эти данные. Производители размещают свои данные в пространстве в виде туплов, а потребители извлекают из пространства данные, соответствующие определённому шаблону. Это также известно как метафора "доски объявлений". Тупловое пространство можно рассматривать как форму распределённой общей памяти. Тупловые пространства стали теоретической основой языка Linda, разработанного Дэвидом Гелернтером и Николасом Каррьеро в Йельском университете в 1986 году. Реализации тупловых пространств также были разработаны для Java (JavaSpaces), Lisp, Lua, Prolog, Python, Ruby, Smalltalk, Tcl и .NET Framework.

Пространства объектов

Object Spaces – это парадигма разработки распределённых вычислительных приложений. Она характеризуется существованием логических сущностей, называемых пространствами объектов. Все участники распределённого приложения совместно используют пространство объектов. Поставщик услуги инкапсулирует услугу в виде объекта и помещает его в пространство объектов. Клиенты услуги затем обращаются к пространству объектов, выясняют, какой объект предоставляет необходимую услугу, и выполняют запрос, обслуживаемый этим объектом. Парадигма пространств объектов была предложена в 1980-х годах Дэвидом Гелернтером в Йельском университете. Гелернтер разработал язык Linda для поддержки концепции глобальной координации объектов. Пространство объектов можно рассматривать как виртуальное хранилище, совместно используемое поставщиками и потребителями сетевых услуг, которые сами представлены в виде объектов. Процессы взаимодействуют друг с другом, используя эти общие объекты, – обновляя состояние объектов по мере необходимости. Объект, при помещении в пространство, должен быть зарегистрирован в каталоге объектов в этом пространстве. Любой процесс может затем идентифицировать объект в каталоге объектов, используя поиск по свойствам, где свойством, определяющим критерии поиска объекта, является его имя или другое уникальное свойство. Процесс может дождаться помещения объекта в пространство объектов, если требуемый объект ещё не присутствует. Объекты, помещённые в пространство объектов, являются пассивными, то есть их методы нельзя вызвать, пока объекты находятся в пространстве объектов. Вместо этого, процесс, обращающийся к объекту, должен извлечь его из пространства объектов в свою локальную память, использовать предоставляемую объектом услугу, обновить состояние объекта и поместить его обратно в пространство объектов. Эта парадигма по своей сути обеспечивает взаимное исключение, поскольку после доступа к объекту он удаляется из пространства объектов и возвращается в него только после освобождения. Это означает, что ни один другой процесс не может получить доступ к объекту, пока он используется другим процессом, тем самым гарантируя взаимное исключение.

JavaSpaces (пространства Java)

JavaSpaces – это спецификация сервиса, обеспечивающая распределенный обмен объектами и механизм координации (который может быть как постоянным, так и непостоянным) для объектов Java. Она используется для хранения состояния распределенной системы и реализации распределенных алгоритмов. В JavaSpace все взаимодействующие компоненты (узлы) общаются и координируют свои действия посредством обмена состоянием. JavaSpaces может использоваться для достижения масштабируемости за счет параллельной обработки, а также для обеспечения надежного хранения объектов посредством распределенной репликации, хотя это не переживет полное отключение электропитания, подобно диску; многие считают его надежным, пока электропитание стабильно. Распределение может осуществляться и в удаленные локации, однако это встречается редко, поскольку JavaSpaces обычно применяются в приложениях, требующих низкой задержки и высокой производительности, а не для надежного кэширования объектов. Наиболее распространенным программным шаблоном, используемым в JavaSpaces, является шаблон «Мастер-Рабочий». Мастер распределяет единицы работы в "пространство", которые считываются, обрабатываются и возвращаются в пространство рабочими узлами. В типичной среде существует несколько "пространств", несколько мастеров и множество рабочих; рабочие узлы обычно разрабатываются как универсальные, то есть они могут принимать любую единицу работы из пространства и выполнять задачу. JavaSpaces является частью технологии Java Jini, которая сама по себе не добилась коммерческого успеха. Однако технология нашла новых пользователей и сохранила их на протяжении многих лет, и некоторые поставщики предлагают продукты на основе JavaSpaces. JavaSpaces остается нишевой технологией, в основном используемой в финансовой сфере и телекоммуникационной отрасли, где она по-прежнему имеет преданных сторонников. Объявление о Jini/JavaSpaces вызвало большой ажиотаж, хотя соучредитель Sun и главный архитектор Jini Билл Джой прямо заявил, что эта мечта о распределенных системах потребует "квантового скачка в мышлении".