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