Как распределенные сервисы лучше распределенных объектов? - PullRequest
4 голосов
/ 07 апреля 2010

Я не заинтересован в технологии, например CORBA vs Web Services, меня интересуют принципы. Когда мы делаем ООП, почему у нас должно быть что-то настолько процедурное на более высоком уровне? Разве это не так же, как с ООП и реляционными базами данных? Часто службы поддерживаются с помощью генерации кода, кроме стандартного, я думаю, что это потому, что мы новый SOM - сервисный объект отображения Итак, еще раз, каковы причины wervices, а не объектов?

Ответы [ 5 ]

4 голосов
/ 07 апреля 2010

Основное различие между службами распространения и объектами распределения заключается в том, что службы и их операции по определению крупнозернистые, тогда как объекты по умолчанию мелкозернистые.* При выполнении удаленных вызовов задержка сети является фактом, и чем грубее ваш интерфейс, тем лучше.Сервисно-ориентированные шаблоны и практики фокусируются на создании таких интерфейсов.

Итак, подведем итог, проблема не в технологии или протоколе (двоичный или XML), а в сценариях использования.Вы можете создавать «сервисы» в CORBA и выполнять программирование распределенных объектов старой школы в WCF, но первый, кажется, более склонен к объектам, а второй - к сервисам ...

1 голос
/ 07 апреля 2010

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

Его можно сравнить с отношением между обычным ООП на языке общего состояния и языком, использующим модель Actor и без общего состояния (как в Erlang, где у вас много легких процессов, которые ничего не разделяют, но общение только через сообщения). Подход Actor Model гораздо менее сложен и может дать вам преимущества в отношении параллелизма и т. Д.

0 голосов
/ 07 апреля 2010

Почему противопоставление? Концепции распределенных сервисов и распределенных объектов сильно перекрываются, если не полностью (в конце концов, SOAP - это объект протокол доступа). WCF является одним из примеров переключения между «веб-службой» и «удаленным объектом» с помощью одной строки конфигурации.

Разница в основном терминологическая, объясняемая историческими областями применения.

(Шимон написал по существу того же самого слушателя)

0 голосов
/ 07 апреля 2010

Распределенный объект означает что? Две копии одного и того же объекта, который должен быть синхронизирован? двухфазная фиксация для каждого изменения объекта? Комплекс.

Перемещение объекта по сети с места на место? В этом случае вы должны быть уверены, что «право собственности» правильно передано. Как один хост узнает, что другой изменил состояние объекта? Это должно быть - что - скопировать обратно?

Модель "распределенного объекта" быстро становится сложной.

Служба - в самом простом виде - означает, что ровно один хост предлагает услугу и поддерживает состояние. Реляционные базы данных служат примером этой модели услуг на протяжении десятилетий. Как и другие традиционные услуги (например, электронная почта, NIS и т. Д.)

С одним хостом, предлагающим услуги, нет синхронизации между копиями, нет дублирования и очень ограниченная сложность.

«почему у нас должно быть что-то настолько процедурное на более высоком уровне»

У вас нет чего-то процедурного на более высоком уровне.

У вас есть объект (хост, который предлагает услуги) с несколькими методами. Это совершенно объектно-ориентированный.

Это - обычно - Singleton , который делает жизнь очень простой.

0 голосов
/ 07 апреля 2010

ИМХО, разница маленькая на высоком уровне. Но на уровне реализации распределенные объекты, CORBA, Java RMI и т. Д. Оставляют желать лучшего. Я пытался работать с CORBA, а затем и с RMI в реальных производственных системах, и синхронизация версий была кошмаром.

В эти дни я отправляю сообщения и получаю ответы.

...