Кортежное пространство
Пространство кортежей — это реализация парадигмы ассоциативной памяти для параллельных/распределенных вычислений. Он предоставляет хранилище кортежей , к которым можно обращаться одновременно. В качестве наглядного примера рассмотрим, что существует группа процессоров, которые создают фрагменты данных, и группа процессоров, которые эти данные используют. Производители публикуют свои данные в виде кортежей в пространстве, а потребители затем извлекают из пространства данные, соответствующие определенному шаблону. Это также известно как метафора доски . Пространство кортежей можно рассматривать как форму распределенной общей памяти .
Пространства кортежей были теоретической основой языка Линда , разработанного Дэвидом Гелернтером и Николасом Карьеро в Йельском университете в 1986 году.
Реализации пространств кортежей также были разработаны для Java ( JavaSpaces ), Lisp , Lua , Prolog , Python , Ruby , Smalltalk , Tcl и .NET Framework .
Пространства объектов [ править ]
Пространства объектов — это парадигма разработки приложений распределенных вычислений . Он характеризуется существованием логических сущностей, называемых пространствами объектов . Все участники распределенного приложения совместно используют пространство объектов . Поставщик службы инкапсулирует службу как объект и помещает ее в пространство объектов . Затем клиенты службы получают доступ к пространству объектов , выясняют, какой объект предоставляет необходимую услугу, и обрабатывают запрос этим объектом.
Пространства объектов как вычислительная парадигма были выдвинуты в 1980-х годах Дэвидом Гелернтером из Йельского университета . Гелернтер разработал язык под названием Linda для поддержки концепции глобальной координации объектов.
Пространство объектов можно рассматривать как виртуальный репозиторий, совместно используемый поставщиками и пользователями сетевых сервисов, которые сами по себе абстрагируются как объекты. Процессы взаимодействуют друг с другом, используя эти общие объекты, обновляя состояние объектов по мере необходимости.
Объект, помещенный в пространство, должен быть зарегистрирован в каталоге объектов в пространстве объектов . Любые процессы могут затем идентифицировать объект из Каталога объектов , используя поиск свойств, где свойством, определяющим критерии поиска объекта, является его имя или какое-либо другое свойство, которое однозначно идентифицирует его. Процесс может выбрать ожидание размещения объекта в пространстве объектов , если необходимый объект еще не присутствует.
Объекты, помещенные в пространство объектов, являются пассивными, т. е. их методы не могут быть вызваны, пока объекты находятся в пространстве объектов . Вместо этого процесс доступа должен извлечь его из пространства объектов в свою локальную память, использовать сервис, предоставляемый объектом, обновить состояние объекта и поместить его обратно в пространство объектов .
Эта парадигма по своей сути обеспечивает взаимное исключение . Поскольку после доступа к объекту его необходимо удалить из пространства объектов и поместить обратно только после его освобождения. Это означает, что ни один другой процесс не может получить доступ к объекту, пока он используется одним процессом, тем самым обеспечивая взаимное исключение.
JavaSpaces [ править ]
JavaSpaces — это спецификация службы, обеспечивающая распределенный механизм обмена и координации объектов (который может быть постоянным, а может и не быть постоянным) для Java объектов . Он используется для хранения состояния распределенной системы и реализации распределенных алгоритмов . В JavaSpace все партнеры по коммуникации (одноранговые узлы) общаются и координируют свои действия посредством совместного использования состояния.
JavaSpaces можно использовать для достижения масштабируемости за счет параллельной обработки, а также для обеспечения надежного хранения объектов посредством распределенной репликации, хотя оно не выдержит полного сбоя питания, как диск; Многие считают его надежным, пока надежно питание. Распространение также может осуществляться в отдаленные места; однако это случается редко, поскольку JavaSpaces обычно используются для с малой задержкой высокопроизводительных приложений , а не для надежного кэширования объектов.
Наиболее распространенным шаблоном программного обеспечения , используемым в JavaSpaces, является шаблон Master-Worker. Мастер передает единицы работы в «пространство», а рабочие считывают, обрабатывают и записывают их обратно в пространство. В типичной среде имеется несколько «пространств», несколько мастеров и множество рабочих; рабочие обычно проектируются как универсальные, т. е. они могут взять любую единицу работы из пространства и обработать задачу.
JavaSpaces является частью технологии Java Jini , которая сама по себе не имела коммерческого успеха. [1] За прошедшие годы эта технология нашла и удержала новых пользователей, и некоторые поставщики предлагают продукты на основе JavaSpaces. JavaSpaces остается нишевой технологией, которая в основном используется в сфере финансовых услуг и телекоммуникаций, где она продолжает иметь верных последователей. Объявление о Jini/JavaSpaces вызвало немало шума, хотя соучредитель Sun и главный архитектор Jini Билл Джой прямо заявил, что эта мечта о распределенных системах потребует « квантового скачка в мышлении ». [2]
Пример использования [ править ]
В следующем примере показано приложение, созданное с использованием JavaSpaces. объект, который будет использоваться в пространстве объектов Сначала создается . В терминологии JavaSpace такой объект называется записью . Здесь запись используется для инкапсуляции службы, возвращающей сообщение Hello World! строка и отслеживает, сколько раз она использовалась. Сервер, предоставляющий эту услугу, создаст пространство объектов или JavaSpace . запись Затем записывается в JavaSpace . Клиент считывает запись из JavaSpace и вызывает свой метод для доступа к службе, обновляя при этом счетчик использования. Обновленная запись записывается обратно в JavaSpace .
// Класс Entry public class SpaceEntry реализует Entry { public Final String message = "Hello World!" ; общедоступное целых чисел число = 0 ; публичная строковая служба () { ++ count ; ответное сообщение ; } Public String toString () { return «Count:» + count ; } }
// Привет, мир! сервер public class Server { public static void main ( String [] args ) выбрасывает Exception { SpaceEntry запись = new SpaceEntry (); // Создание объекта Entry JavaSpace space = ( JavaSpace ) space (); // Создать пространство объектов // Зарегистрируйте и запишите запись в пространство пространства . запись ( запись , ноль , Аренда . НАВСЕГДА ); // Пауза на 10 секунд, а затем извлекаем запись и проверяем ее состояние. Нить . сон ( 10 * 1000 ); SpaceEntry e = пробел . читать ( запись , ноль , Long . MAX_VALUE ); Система . вне . печатьln ( е ); } }
// Клиент public class Client { public static void main ( String [] args ) выдает исключение { JavaSpace space = ( JavaSpace ) space (); SpaceEntry e = пробел . take ( новый SpaceEntry (), null , Long . MAX_VALUE ); Система . вне . println ( e.service ( ) ; ) космос . напишите ( e , null , Lease . FOREVER ); } }
Книги [ править ]
- Эрик Фриман , Сюзанна Хупфер , Кен Арнольд : Принципы, шаблоны и практика JavaSpaces. Аддисон-Уэсли Профессионал, 1 июня 1999 г., ISBN 0-201-30955-6
- Фил Бишоп, Найджел Уоррен: JavaSpaces на практике. Эддисон Уэсли, 2002 г., ISBN 0-321-11231-8
- Макс К. Гофф: Сетевые распределенные вычисления: подходы и заблуждения , 2004, Прентис Холл, ISBN 0-13-100152-3
- Синг Ли и др.: Профессиональное программирование серверов Java , 1999, Wrox Press, ISBN 1-86100-277-7
- Стивен Холтер: Пример JavaSpaces , 2002, PTR Prentice Hall, ISBN 0-13-061916-7
Интервью [ править ]
- Гелернтер, Дэвид (2009). «Повелитель облаков» . Джон Брокман, редактор и издатель Рассел Вайнбергер, ассоциированный издатель Edge Foundation, Inc.
- Хейсс, Дженис Дж. (2003). «Компьютерное зрение: разговор с Дэвидом Гелернтером» . Сеть разработчиков Sun (SDN).
- Веннерс, Билл (2003). «Проектировать так, как будто программисты — это люди (интервью с Кеном Арнольдом)» . java.net.
Статьи [ править ]
- Брогден, Уильям (2007). «Как веб-сервисы могут использовать JavaSpaces» . SearchWebServices.com . Проверено 18 апреля 2007 г.
- Брогден, Уильям (2007). «Грид-вычисления и веб-сервисы (Beowulf, BOINC, Javaspaces)» . SearchWebServices.com . Проверено 20 марта 2007 г.
- Уайт, Том (2005). «Как построить вычислительную ферму» . java.net . Проверено 21 мая 2005 г.
- Оттингер, Джозеф (2007). «Понимание JavaSpaces» . на стороне сервера . Проверено 31 января 2007 г.
- Ангерер, Бернхард; Эрлахер, Андреас (2005). «Слабосвязанная коммуникация и координация в промежуточном программном обеспечении Java следующего поколения» . java.net . Проверено 3 июня 2006 г.
- Ангерер, Бернхард (2003). «Космическое программирование» . onjava.com . Проверено 19 марта 2003 г.
- Спой, Ли (2003). «Высокоэффективная кластеризация веб-уровня, часть 2: Создание адаптивных масштабируемых решений с помощью JavaSpaces» . Разработчики IBM.
- Мамуд, Кусай Х. (2005). «Начало работы с технологией JavaSpaces: за пределами традиционных парадигм распределенного программирования» . Сеть разработчиков Sun (SDN).
- Фриман, Эрик; Хупфер, Сюзанна (20 ноября 1999 г.). «Освободите место для Javaspaces, часть 1 (из 5)» . JavaWorld . Проверено 17 июля 2020 г.
- Леффлер, доктор. Джеральд (2004). «JavaSpaces и их место во вселенной Enterprise Java, Модель обмена объектами: представление JavaSpaces» . разработчик.com . Проверено 1 февраля 2004 г.
- Аранго, Маурисио (2009). «Координация в параллельных событийно-ориентированных системах» . blogs.sun.com.
- Немлекар, Милинд (2001). «Масштабируемые распределенные пространства кортежей» . НЦГУ, кафедра ЕЭК.
См. также [ править ]
- Космическая архитектура
- Линда (координационный язык)
- Кен Арнольд , ведущий инженер по JavaSpaces в Sun Microsystems
- Rinda , аналог Ruby в JavaSpaces.
Ссылки [ править ]
- ^ Ли Гомес: « Прогнозы Sun Microsystems для системы Jxta звучат знакомо ». The Wall Street Journal , 4 июня 2001 г.
- ^ Роб Гут: « Больше, чем просто красивое имя: Sun Jini открывает новый мир распределенных компьютерных систем ». SunWorld , август 1998 г. [15 января 2006 г.]
Источники [ править ]
- Гелернтер, Дэвид . «Генеративная коммуникация в Линде» . Транзакции ACM по языкам и системам программирования , том 7, номер 1, январь 1985 г.
- Распределенные вычисления (первое переиздание в Индии, 2004 г.), М. Л. Лю
Внешние ссылки [ править ]
- «TupleSpace» на c2.com
- «Спецификация JavaSpace» на jini.org.