Это не официальный сайт wikipedia.org 01.01.2023

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

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

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

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

Распределенные объекты были популярны в конце 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 года.