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

Объектные пространства — это парадигма разработки распределенных вычислительных приложений. Она характеризуется существованием логических сущностей, называемых объектными пространствами . Все участники распределенного приложения совместно используют объектное пространство . Поставщик услуги инкапсулирует услугу в виде объекта и помещает его в объектное пространство . Затем клиенты услуги обращаются к объектному пространству , узнают, какой объект предоставляет необходимую услугу, и получают запрос, обработанный этим объектом.
Парадигма объектных пространств как вычислительная концепция была предложена в 1980-х годах Дэвидом Гелернтером в Йельском университете . Гелернтер разработал язык под названием Linda для поддержки концепции глобальной координации объектов.
Пространство объектов можно рассматривать как виртуальное хранилище, используемое поставщиками и пользователями сетевых сервисов, которые сами по себе абстрагированы в виде объектов. Процессы взаимодействуют друг с другом, используя эти общие объекты, обновляя состояние объектов по мере необходимости.
После размещения объекта в пространстве объектов его необходимо зарегистрировать в каталоге объектов этого пространства . Затем любой процесс может идентифицировать объект в каталоге объектов , используя поиск по свойствам, где свойство, определяющее критерии поиска объекта, — это его имя или другое свойство, однозначно его идентифицирующее. Если необходимый объект еще не присутствует в пространстве объектов , процесс может дождаться его размещения в нем .
Объекты, помещенные в объектное пространство, являются пассивными, то есть их методы не могут быть вызваны, пока объекты находятся в объектном пространстве . Вместо этого процесс, осуществляющий доступ, должен извлечь объект из объектного пространства в свою локальную память, использовать предоставляемую объектом услугу, обновить состояние объекта и поместить его обратно в объектное пространство .
Эта парадигма по своей сути обеспечивает взаимное исключение . Поскольку после обращения к объекту он должен быть удален из объектного пространства и возвращен обратно только после освобождения. Это означает, что ни один другой процесс не может получить доступ к объекту, пока он используется одним процессом, что обеспечивает взаимное исключение.
JavaSpaces — это спецификация сервиса, предоставляющая механизм распределенного обмена объектами и координации (который может быть или не быть постоянным) для объектов Java . Она используется для хранения состояния распределенной системы и реализации распределенных алгоритмов . В JavaSpace все партнеры по обмену данными (узлы) взаимодействуют и координируют свои действия, совместно используя состояние.
JavaSpaces можно использовать для масштабируемости за счет параллельной обработки, а также для обеспечения надежного хранения объектов посредством распределенной репликации, хотя она не выдержит полного отключения электроэнергии, как жесткий диск; многие считают ее надежной, пока электроснабжение стабильно. Распределение также может осуществляться на удаленные серверы; однако это редкость, поскольку JavaSpaces обычно используются для приложений с низкой задержкой и высокой производительностью, а не для надежного кэширования объектов.
Наиболее распространенный шаблон проектирования программного обеспечения в JavaSpaces — это шаблон «мастер-рабочий». Мастер передает единицы работы в «пространство», а рабочие считывают, обрабатывают и записывают их обратно в пространство. В типичной среде существует несколько «пространств», несколько мастеров и много рабочих; рабочие обычно проектируются как универсальные, то есть они могут брать любую единицу работы из пространства и обрабатывать задачу.
JavaSpaces является частью технологии Java Jini , которая сама по себе не имела коммерческого успеха. Об этом говорит сайт https://intellect.icu . [ 1 ] За прошедшие годы технология нашла и удержала новых пользователей, и некоторые поставщики предлагают продукты на основе JavaSpaces. JavaSpaces остается нишевой технологией, в основном используемой в финансовой сфере и телекоммуникационной отрасли, где она продолжает сохранять преданных поклонников. Анонс Jini/JavaSpaces вызвал немалый ажиотаж, хотя соучредитель Sun и главный архитектор Jini Билл Джой прямо заявил, что эта мечта о распределенных системах совершит « квантовый скачок в мышлении ». [ 2 ]
Следующий пример демонстрирует приложение, созданное с использованием JavaSpaces. Сначала создается объект, который будет использоваться совместно в объектном пространстве . В терминологии JavaSpace такой объект называется Entry . Здесь Entry используется для инкапсуляции сервиса, который возвращает строку "Hello World!" и отслеживает количество его использований. Сервер, предоставляющий этот сервис, создает объектное пространство , или JavaSpace . Затем Entry записывается в JavaSpace . Клиент считывает запись из JavaSpace и вызывает ее метод для доступа к сервису, обновляя при этом счетчик использования. Обновленная запись Entry записывается обратно в 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);
}
}
Tuple space действительно похоже одновременно на:
Но есть важные отличия.
1. Есть “данные в хранилище”
("enemy", "orc", 100)
2. Есть “запрос”
("enemy", ?, ?)
Это напоминает SQL:
SELECT * FROM enemies WHERE type = 'orc';
Tuple space похож на:
Потому что:
1. В БД программисты делают “запрос и получаешь копию”
SELECT → данные остаются в таблице
2. В Tuple Space ты “забираешь и удаляешь” (в in)
in(("enemy", ?, ?)) → данные исчезают из пространства
То есть это больше похоже на:
“взял задачу из общего пула”
В БД:
table enemies(id INT, type TEXT, hp INT)
В Tuple space:
можно класть что угодно:
("enemy", 10)
("chat", "hi")
(42, true, "abc")
Нет строгой структуры.
БД:
Tuple space:
Очень точная аналогия
Tuple space — это:
“БД + очередь задач + шаблонный поиск + возможность забрать данные навсегда”
| Свойство | БД | Кеш | Tuple space |
|---|---|---|---|
| SQL запросы | + | иногда | - |
| строгая схема | + | иногда | - |
| поиск по шаблону |
частично да / зависит от конкретной реализации |
- | + |
| удаление при чтении | - | - | + (in) |
| распределенность |
частично да / зависит от конкретной реализации |
частично да / зависит от конкретной реализации |
+ по дизайну |
| асинхронность процессов |
частично да / зависит от конкретной реализации |
частично да / зависит от конкретной реализации |
основа |
Таким образом
БД = таблица с данными
Кеш = быстрый словарь
Tuple space = “общий стол, где лежат материальные задачи, и любой может взять подходящую”
Исследование, описанное в статье про кортежное пространство, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое кортежное пространство и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Высоконагруженные проекты.Паралельные вычисления. Суперкомпьютеры. Распределенные системы
Из статьи мы узнали кратко, но содержательно про кортежное пространство
Комментарии
Оставить комментарий
Высоконагруженные проекты.Паралельные вычисления. Суперкомпьютеры. Распределенные системы
Термины: Высоконагруженные проекты.Паралельные вычисления. Суперкомпьютеры. Распределенные системы