Распределённые объекты
В распределенных вычислениях распределенные объекты — это объекты (в смысле объектно-ориентированного программирования), которые распределены по разным адресным пространствам, либо в разных процессах на одном компьютере, либо даже на нескольких компьютерах, подключенных через сеть, но которые работают вместе, обмениваясь данными и вызывая методы друг друга. Упор на распределённость объектной архитектуры часто связывают с прозрачностью их местоположения, когда удаленные объекты с точки зрения обращающегося к ним программного кода выглядят так же, как локальные. Основным методом обмена данными с распределенными объектами является вызов удаленного метода, как правило, посредством передачи сообщений: один объект отправляет сообщение другому объекту на удаленной машине или процессу для выполнения некоторой задачи. Результаты отправляются обратно вызывающему объекту.
Распределенные объекты были популярны в конце 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.
ПримечанияПравить
- ↑ Microservices and the First Law of Distributed Objects (неопр.). martinfowler.com. Дата обращения: 24 октября 2021. Архивировано 24 октября 2021 года.
- ↑ 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.
- ↑ W. Emmerich (2000) Engineering distributed objects, John Wiley & Sons Ltd.
- ↑ 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.
- ↑ Cap'n Proto: RPC Protocol (неопр.). capnproto.org. Дата обращения: 24 октября 2021. Архивировано 18 марта 2015 года.