Почему CORBA потеряла популярность?

Я никогда не слышал, чтобы кто-нибудь говорил о CORBA иначе, как насмешливо, что странно, учитывая, что 10 с лишним лет назад это были колени пчелы. Почему CORBA отпала от благодати? Было ли это просто потому, что реализации были плохими, или было что-то более фундаментальное?


person MrEvil    schedule 01.10.2010    source источник
comment
В статье в Википедии есть раздел, посвященный его проблемам и критике: en.wikipedia.org/wiki/Common_Object_Arquest_Brocture< а>   -  person oadams    schedule 01.10.2010
comment
См. stackoverflow.com/questions/1226050/is-corba-legacy   -  person John Saunders    schedule 01.10.2010
comment
В вопросе is-corba-legacy не рассматриваются причины, по которым он стал наследием.   -  person MrEvil    schedule 01.10.2010
comment
Как упоминал Сэм, вы можете объединить DCOM и CORBA и понять, почему они не могут конкурировать с SOAP.   -  person James Black    schedule 01.10.2010
comment
Голосование за повторное открытие, чтобы я мог проголосовать за закрытие перехода к программистам :)   -  person    schedule 14.10.2010
comment
Вы явно этого не пережили.   -  person thecoshman    schedule 17.01.2014


Ответы (2)


Это не просто CORBA, это RPC в целом. Это включает в себя такие вещи, как DCOM, Java-RMI, .NET Remoting и все другие.

Проблема в том, что распределенные вычисления фундаментально отличаются от локальных вычислений. RPC пытается притвориться, что этих различий не существует, и делает удаленные вызовы похожими на локальные. Но чтобы построить хорошую распределенную систему, вам нужно иметь дело с этими различиями.

Билл Джой, Том Лайон, Л. Питер Дойч и Джеймс Гослинг определили 8 заблуждений распределенных вычислений, то есть вещей, которые новички в распределенном программировании считают правдой, но которые на самом деле ложны, что обычно приводит к провал проекта или значительное увеличение затрат и усилий. RPC - идеальное воплощение этих заблуждений, потому что он основан на тех же неверных предположениях:

  1. Сеть надежная.
  2. Задержка нулевая.
  3. Пропускная способность бесконечна.
  4. Сеть безопасна.
  5. Топология не меняется.
  6. Есть один админ.
  7. Транспортные расходы нулевые.
  8. Сеть однородная.

Все это верно для локальных вычислений.

Возьмем, к примеру, надежность: если вы вызываете метод локально, то сам вызов всегда завершается успешно. Конечно, сам вызываемый метод может иметь ошибку, но фактический вызов метода всегда будет успешным. И результат всегда будет возвращен, или, если метод не удастся, будет сигнализироваться об ошибке.

В распределенной системе это неверно: акт вызова самого метода сам может потерпеть неудачу. Т.е. с вашей стороны похоже, что вы вызвали метод, но на самом деле вызов потерялся в сети и так и не дошел до метода. Или метод успешно принял вызов и выполнил операцию, но результат потерялся на обратном пути к вам. Или метод не удался, но ошибка потерялась.

Аналогично задержке: локально вызов метода практически бесплатный. самому методу может потребоваться произвольное время для вычисления ответа, но вызов бесплатный. Звонок по сети может занять сотни миллисекунд.

Вот почему почти все проекты RPC, включая CORBA, потерпели неудачу.

Обратите внимание, что наоборот работает нормально: если вы просто притворитесь, что все вызовы являются удаленными вызовами, тогда худшее, что может случиться, - это то, что вы потеряете немного производительность, и ваше приложение содержит код обработки ошибок, который никогда не будет использоваться. Так, например, работает Erlang.

В Erlang процессы всегда имеют отдельные кучи и отдельные сборщики мусора, как если бы они работали на разных машинах на разных континентах, даже если эти процессы выполняются на одной виртуальной машине на одном и том же процессоре по одному и тому же адресу. Космос. Если вы передаете данные из одного процесса в другой, эти данные всегда копируются, как если бы процессы находились на разных машинах. Вызовы всегда выполняются как отправка асинхронных сообщений.

Так что сделать локальные и удаленные вызовы одинаковыми не проблема. Сделать их похожими на местные вызовы.

В CORBA проблема на самом деле несколько более запутанная. На самом деле они действительно заставляли локальные вызовы выглядеть как удаленные вызовы, но поскольку CORBA была разработана комитетом, удаленные вызовы были невероятно сложными, потому что они должны были уметь обрабатывать некоторые невероятно абсурдные требования. И эта сложность была навязана всем, даже для местных звонков.

Опять же, по сравнению с Erlang, сложность намного ниже. В Erlang отправка сообщения процессу не сложнее, чем вызов метода в Java. Интерфейс в основном тот же, различаются только ожидания: ожидается, что вызовы методов в Java будут мгновенными и синхронными, в Erlang ожидается, что отправка сообщений будет асинхронной и будет иметь видимую задержку. Но на самом деле их использование не более сложное, чем простой вызов локальной процедуры.

Другое отличие состоит в том, что Erlang различает вызовы функций, которые могут происходить только внутри процесса и, следовательно, всегда локальны, и отправку сообщений, которые происходят между процессами и считаются всегда удаленными, даже если это не так. В CORBA все вызовы методов считаются удаленными.

person Jörg W Mittag    schedule 01.10.2010
comment
+1 Хороший ответ; Теперь я понимаю, почему некоторые разработчики так смутно относятся к .NET Remoting. Однако, если вы готовы согласиться с присущими ему ограничениями, .NET Remoting может стать достойным точечным решением для определенных проблем. Я не уверен, что смешивать это с CORBA и DCOM справедливо. - person Robert Harvey; 01.10.2010
comment
Причина, по которой они потерпели неудачу, частично связана с проприетарным протоколом (и поэтому их сложно использовать с брандмауэрами) и (в случае CORBA) частично потому, что они были разработаны комитетом и ужасно раздуты. И здесь SOAP является показательным примером. Но концепция упрощения сетевых вызовов - не настоящая проблема. - person gbjbaanb; 08.05.2012
comment
Я понимаю проблемы, но какая у нас альтернатива? Если вам не нужны такие огромные xml-накладные расходы, которые вы получаете с SOAP или XMLRPC, и если вы хотите программировать на C (не C ++), какую технологию вы тогда используете? - person Alex; 13.11.2014
comment
Это совершенно неверный ответ. В любом подобном решении вам нужно создать код, который имеет дело с сетевыми ошибками. Неправда, что Корба делает вид, что вызовы функций передаются по сети. По любой сетевой проблеме вы получите исключение, и ваша задача как программиста - справиться с такими случаями. Единственный способ, которым ваш ответ является действительным, - это когда разработчик приложения Corba делает вид, что в нем нет сети, но это означает любую связь программного обеспечения по сети. На самом деле различные XML-решения для сетевой коммуникации имеют высокие накладные расходы (из-за XML-текста) и высокую нагрузку на обработку. - person BJovke; 14.06.2016
comment
@BJovke Не могли бы вы ответить лучше? Я понимаю, что вопросы закрыты, но мне любопытно узнать вашу аргументацию. - person johnildergleidisson; 14.05.2020
comment
@johnildergleidisson Извините за поздний ответ. В основном все сводится к слишком сложному и слишком медленному развитию. Есть много вариантов для правильной настройки, в библиотеке есть свои типы и другие базовые объекты, дублирующие части стандартной библиотеки. Есть слишком сложный подсчет ссылок на объекты. Поддержка упала, и никто из крупных игроков не использует Corba. Есть альтернативы. Например, любой механизм обмена сообщениями в сочетании с буферами протокола Google делает то же самое. - person BJovke; 22.05.2020

Технологии распределенных объектов, такие как CORBA и DCOM, имели проблемы с детализацией - реализации, как правило, были слишком «болтливыми», чтобы хорошо работать в сети - и, как правило, утечка деталей реализации, что делало решение хрупким.

Ориентация на услуги получила известность как реакция на эти опасения.

person Sam    schedule 01.10.2010
comment
Можете ли вы расширить свой ответ о преимуществах Service Orientation по сравнению с CORBA? - person Thufir; 26.02.2015
comment
В модели SOA ваши вызовы через границы сети более явны и обычно инкапсулируют всю единицу работы в один вызов службы. Интерфейс службы также легче абстрагироваться от базовой реализации, чтобы можно было вносить изменения в реализацию, не нарушая работу клиентов. - person Sam; 26.02.2015
comment
Неправильный. слишком болтливый ???? Это зависит исключительно от разработчика, насколько болтливым он хочет, чтобы его программное обеспечение на основе Corba было, а не от самой библиотеки. Утечка деталей реализации? То же самое для любого сетевого протокола, не имеющего шифрования. Вы уже давно можете использовать SSL в Corba. Различные библиотеки сетевого взаимодействия, в основном основанные на XML, имеют высокую полезную нагрузку и накладные расходы на обработку, но позволяют ленивым программистам создавать грязный код, а новичкам - рекламировать себя как экспертов. - person BJovke; 14.06.2016