Распределённые объекты

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
На иллюстрации показана связь между распределенными объектами, находящимися на разных машинах.

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

Распределенные объекты были популярны в конце 1990-х — начале 2000-х годов, но с тех пор вышли из моды[1].

Термин также может в целом относиться к одному из расширений базовой концепции объекта, используемого в контексте распределенных вычислений, например, реплицированных объектов или живых распределенных объектов.

  • Реплицированные объекты — это группы программных компонентов (реплик), которые запускают распределенный многосторонний протокол для достижения высокой степени согласованности между своими внутренними состояниями и скоординированно отвечают на запросы. Обращение к группе реплик вместе как к объекту отражает тот факт, что взаимодействие с любым из них демонстрирует одно и то же внешне видимое состояние и поведение.
  • Живые распределенные объекты (или просто живые объекты)[2] обобщают концепцию реплицированного объекта на группы реплик, которые могут внутренне использовать любой распределенный протокол, что, возможно, приводит только к слабой согласованности между их локальными состояниями. Живые распределенные объекты также могут быть определены как запущенные экземпляры распределенных многосторонних протоколов, рассматриваемые с объектно-ориентированной точки зрения как сущности, которые имеют различную идентичность и могут инкапсулировать распределенное состояние и поведение.

Локальные и распределенные объекты[править | править код]

  • Локальные и распределенные объекты обладают многими отличиями[3][4]. Вот некоторые из них:
  • Жизненный цикл: создание, миграция и удаление распределенных для распределённых объектов отличается от локальных объектов.
  • Ссылки: ссылки на распределённые объекты сложнее простых указателей на адреса памяти, которых может быть достаточно в локальной системе.
  • Задержка запроса: запрос распредёленного объекта на несколько порядков медленнее, чем вызов локального метода.
  • Активация объекта: распределённые объекты не всегда могут быть доступны для обслуживания запроса объекта в любой момент времени.
  • Параллелизм: распределённые объекты могут выполняться параллельно.
  • Связь: для запросов распределённых объектов доступны различные примитивы связи.
  • Отказ: распределённые объекты имеют гораздо больше точек отказа, чем типичные локальные объекты.
  • Безопасность: распределённость делает их уязвимыми для атак.

Примеры[править | править код]

  • Возможности RPC межплатформенного протокола сериализации Cap’n Proto представляют собой протокол работы с распределёнными объектами. Вызовы методов распределенных объектов могут быть выполнены (в цепочке, в одном сетевом запросе, если это необходимо) через ссылки / возможности интерфейса[5].
  • Распределенные объекты реализованы в Objective-C с использованием API Cocoa с использованием класса NSConnection и вспомогательных объектов.
  • Распределенные объекты используются в Java RMI.
  • CORBA позволяет создавать распределенные смешанные объектные системы.
  • DCOM — это технология для распределенных объектов на платформе Microsoft.
  • DDObjects — это фреймворк для распределенных объектов с использованием Borland Delphi.
  • Jt — это фреймворк для распределенных компонентов, использующий парадигму обмена сообщениями.
  • JavaSpaces — это спецификация Sun для распределенной разделяемой памяти
  • Pyro — это фреймворк для распределенных объектов, использующий язык программирования Python.
  • Распределённый Ruby (DRb) — это фреймворк для распределенных объектов, использующий язык программирования Ruby.

Примечания[править | править код]

  1. Microservices and the First Law of Distributed Objects. martinfowler.com. Дата обращения: 24 октября 2021. Архивировано 24 октября 2021 года.
  2. Krzysztof Ostrowski, Ken Birman, Danny Dolev, Jong Hoon Ahnn. Programming with Live Distributed Objects // Proceedings of the 22nd European conference on Object-Oriented Programming. — Berlin, Heidelberg: Springer-Verlag, 2008-07-07. — С. 463–489. — ISBN 978-3-540-70591-8. — doi:10.1007/978-3-540-70592-5_20.
  3. W. Emmerich (2000) Engineering distributed objects, John Wiley & Sons Ltd.
  4. Samuel C. Kendall, Jim Waldo, Ann Wollrath, and Geoff Wyant. 1994. A Note on Distributed Computing. Technical Report. Sun Microsystems, Inc., Mountain View, CA, USA.
  5. Cap'n Proto: RPC Protocol. capnproto.org. Дата обращения: 24 октября 2021. Архивировано 18 марта 2015 года.