Распределенный объект - Distributed object
В распределенных вычислений , распределенные объекты являются объектами (в смысле объектно-ориентированного программирования ), которые распределены в различных адресных пространствах , либо в различных процессах на том же компьютере, или даже в нескольких компьютеров , соединенных посредством сети , но которые работают вместе обмен данными и вызов методов. Это часто связано с прозрачностью местоположения , когда удаленные объекты выглядят так же, как локальные. Основным методом обмена данными с распределенными объектами является вызов удаленного метода , обычно посредством передачи сообщений: один объект отправляет сообщение другому объекту на удаленной машине или процессу для выполнения некоторой задачи. Результаты отправляются обратно вызывающему объекту.
Распределенные объекты были популярны в конце 1990-х - начале 2000-х годов, но с тех пор вышли из моды.
Термин может также в целом относиться к одному из расширений базовой концепции объекта, используемого в контексте распределенных вычислений, например к реплицированным объектам или живым распределенным объектам .
- Реплицированные объекты - это группы программных компонентов ( реплик ), которые запускают распределенный многосторонний протокол для достижения высокой степени согласованности между своими внутренними состояниями и скоординированно отвечают на запросы. Обращение к группе реплик вместе как к объекту отражает тот факт, что взаимодействие с любым из них демонстрирует одно и то же внешне видимое состояние и поведение.
- Живые распределенные объекты (или просто живые объекты ) обобщаютконцепцию реплицированного объекта на группы реплик, которые могут внутренне использовать любой распределенный протокол, что, возможно, приводит только к слабой согласованности между их локальными состояниями. Живые распределенные объекты также могут быть определены как запущенные экземпляры распределенных многосторонних протоколов, рассматриваемые с объектно-ориентированной точки зрения как сущности, которые имеют различную идентичность и могут инкапсулировать распределенное состояние и поведение.
См. Также набор Интернет-протоколов .
Локальные и распределенные объекты
Локальные и распределенные объекты во многом отличаются. Вот некоторые из них:
- Жизненный цикл: создание, миграция и удаление распределенных объектов отличается от локальных объектов.
- Ссылка: удаленные ссылки на распределенные объекты сложнее простых указателей на адреса памяти.
- Задержка запроса: запрос распределенного объекта на несколько порядков медленнее, чем вызов локального метода.
- Активация объекта: распределенные объекты не всегда могут быть доступны для обслуживания запроса объекта в любой момент времени.
- Параллелизм: распределенные объекты могут выполняться параллельно.
- Связь: для запросов распределенных объектов доступны различные примитивы связи.
- Отказ: распределенные объекты имеют гораздо больше точек отказа, чем типичные локальные объекты.
- Безопасность: распространение делает их уязвимыми для атак.
Примеры
Возможности RPC кросс-платформенного протокола сериализации Cap'n Proto составляют протокол распределенных объектов. Вызовы методов распределенных объектов могут выполняться (в цепочке, в одном сетевом запросе, если необходимо) через ссылки / возможности интерфейса .
Распределенные объекты реализованы в Objective-C с использованием API Какао с классом NSConnection и вспомогательными объектами.
Распределенные объекты используются в Java RMI .
CORBA позволяет создавать распределенные смешанные объектные системы.
DCOM - это платформа для распределенных объектов на платформе Microsoft.
DDObjects - это фреймворк для распределенных объектов с использованием Borland Delphi.
Jt - это структура для распределенных компонентов, использующая парадигму обмена сообщениями.
JavaSpaces - это спецификация Sun для распределенной разделяемой памяти (на основе пространства)
Pyro - это фреймворк для распределенных объектов с использованием языка программирования Python .
Распределенный Ruby (DRb) - это среда для распределенных объектов с использованием языка программирования Ruby .