Кортежное пространство
Пространство кортежей — это реализация парадигмы ассоциативной памяти для параллельных/распределенных вычислений. Он предоставляет хранилище кортежей , к которым можно обращаться одновременно. В качестве наглядного примера рассмотрим, что существует группа процессоров, которые создают фрагменты данных, и группа процессоров, которые эти данные используют. Производители публикуют свои данные в виде кортежей в пространстве, а потребители затем извлекают из пространства данные, соответствующие определенному шаблону. Это также известно как метафора доски . Пространство кортежей можно рассматривать как форму распределенной общей памяти .
Пространства кортежей были теоретической основой языка Линда , разработанного Дэвидом Гелернтером и Николасом Каррьеро в Йельском университете в 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 .
// An Entry class
public class SpaceEntry implements Entry {
public final String message = "Hello World!";
public Integer count = 0;
public String service() {
++count;
return message;
}
public String toString() {
return "Count: " + count;
}
}
// Hello World! server
public class Server {
public static void main(String[] args) throws Exception {
SpaceEntry entry = new SpaceEntry(); // Create the Entry object
JavaSpace space = (JavaSpace)space(); // Create an Object Space
// Register and write the Entry into the Space
space.write(entry, null, Lease.FOREVER);
// Pause for 10 seconds and then retrieve the Entry and check its state.
Thread.sleep(10 * 1000);
SpaceEntry e = space.read(entry, null, Long.MAX_VALUE);
System.out.println(e);
}
}
// Client
public class Client {
public static void main(String[] args) throws Exception {
JavaSpace space = (JavaSpace) space();
SpaceEntry e = space.take(new SpaceEntry(), null, Long.MAX_VALUE);
System.out.println(e.service());
space.write(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.