Распределенный объект
В вычислениях распределенных распределенные объекты [ нужна ссылка ] — это объекты (в смысле объектно-ориентированного программирования ), которые распределены по разным адресным пространствам либо в разных процессах на одном компьютере, либо даже на нескольких компьютерах, подключенных через сеть , но которые работают вместе, совместно используя данные и вызывая методы. Это часто предполагает прозрачность местоположения , когда удаленные объекты выглядят так же, как локальные объекты. Основным методом связи распределенных объектов является вызов удаленного метода , обычно путем передачи сообщений: один объект отправляет сообщение другому объекту на удаленной машине или процессе для выполнения некоторой задачи. Результаты отправляются обратно вызывающему объекту.
Распределенные объекты были популярны в конце 1990-х и начале 2000-х годов, но с тех пор вышли из моды. [1]
Этот термин также может обычно относиться к одному из расширений базовой концепции объекта, используемой в контексте распределенных вычислений, например, к реплицируемым объектам или живым распределенным объектам .
- Реплицированные объекты — это группы программных компонентов ( реплики ), которые запускают распределенный многосторонний протокол для достижения высокой степени согласованности между их внутренними состояниями и которые отвечают на запросы скоординированным образом. Совместное обращение к группе реплик как к объекту отражает тот факт, что взаимодействие с любой из них раскрывает одно и то же внешне видимое состояние и поведение.
- Живые распределенные объекты (или просто живые объекты ) [2] обобщить концепцию реплицируемого объекта на группы реплик, которые могут внутренне использовать любой распределенный протокол, что, возможно, приведет лишь к слабой согласованности между их локальными состояниями. Живые распределенные объекты также можно определить как работающие экземпляры распределенных многосторонних протоколов, рассматриваемые с объектно-ориентированной точки зрения как сущности, имеющие отдельную идентичность и способные инкапсулировать распределенное состояние и поведение.
См. также набор протоколов Интернета .
Локальные и распределенные объекты
[ редактировать ]Локальные и распределенные объекты различаются во многих отношениях. [3] [4] Вот некоторые из них:
- Жизненный цикл: создание, миграция и удаление распределенных объектов отличается от локальных объектов.
- Справка: Удаленные ссылки на распределенные объекты более сложны, чем простые указатели на адреса памяти.
- Задержка запроса: запрос распределенного объекта на несколько порядков медленнее, чем вызов локального метода.
- Активация объекта. Распределенные объекты не всегда могут быть доступны для обслуживания запроса объекта в любой момент времени.
- Параллелизм: распределенные объекты могут выполняться параллельно.
- Связь: для запросов распределенных объектов доступны различные примитивы связи.
- Сбой. Распределенные объекты имеют гораздо больше точек сбоя, чем типичные локальные объекты.
- Безопасность: распространение делает их уязвимыми для атак.
Примеры
[ редактировать ]Возможности RPC кросс-платформенного протокола сериализации Cap'n Proto представляют собой протокол распределенных объектов. Вызовы методов распределенных объектов могут быть выполнены (при необходимости объединены в один сетевой запрос) через ссылки/ возможности интерфейса . [5]
Распределенные объекты реализуются в Objective-C с использованием Cocoa API с классом NSConnection и вспомогательными объектами.
Распределенные объекты используются в Java RMI .
CORBA позволяет создавать распределенные системы смешанных объектов.
DCOM — это платформа для распределенных объектов на платформе Microsoft.
DDObjects — это платформа для распределенных объектов с использованием Borland Delphi.
Jt — это платформа для распределенных компонентов, использующая парадигму обмена сообщениями.
JavaSpaces — это спецификация Sun для распределенной общей памяти (пространственной).
Pyro — это фреймворк для распределенных объектов, использующий язык программирования Python .
Distributed Ruby (DRb) — это платформа для распределенных объектов, использующая язык программирования Ruby .
См. также
[ редактировать ]Ссылки
[ редактировать ]- ↑ Микросервисы и первый закон распределенных объектов , Мартин Фаулер, 13 августа 2014 г.
- ^ Островски К., Бирман К., Долев Д. и Анн Дж. (2008). «Программирование с использованием живых распределенных объектов», Труды 22-й Европейской конференции по объектно-ориентированному программированию , Пафос, Кипр, 7–11 июля 2008 г., Дж. Витек, редактор, Конспекты лекций по информатике , том. 5142, Springer-Verlag, Берлин, Гейдельберг, 463-489, http://portal.acm.org/citation.cfm?id=1428508.1428536 .
- ^ В. Эммерих (2000) Проектирование распределенных объектов, John Wiley & Sons Ltd.
- ^ Сэмюэл К. Кендалл, Джим Уолдо , Энн Уолрат и Джефф Вайант. 1994. Заметки о распределенных вычислениях. Технический отчет. Sun Microsystems, Inc., Маунтин-Вью, Калифорния, США.
- ^ «Капитан Прото: Протокол RPC» .