OSGi в распределенных инфраструктурах

Мы работаем над инфраструктурой на основе OSGi для обработки потоковых данных. Конкретные задачи обработки выполняются отдельными компонентами OSGi. Теперь нам нужна возможность распределить эти компоненты по разным машинам, а значит, нам нужен какой-то механизм связи между компонентами / контейнерами OSGi.

В ходе моего исследования я столкнулся с различными потенциальными решениями: R-OSGi, Apache CXF для распределенной OSGi, Eclipse Communication Framework.

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

Мои центральные вопросы:

  • Существуют ли подробные руководства / пошаговые руководства по настройке инфраструктуры ECF в Феликсе? (из моего исследования я обнаружил, что поддержка Felix была добавлена ​​недавно)
  • Есть ли какие-либо решения, кроме трех, перечисленных выше, которые я мог бы пропустить?
  • Есть ли причина принимать Apache CXF вместо ECF?

1 ответ

Решение

Первый вопрос - есть ли подробное руководство по настройке ECF с Феликсом - я не знаю ответа на него, хотя можно использовать поисковую систему, чтобы найти комбинации этих терминов.

Проблема заключается в том, что ECF использует инфраструктуру Equinox и иногда непреднамеренно полагается на пакеты, которые не являются общедоступными из-за транзитивных зависимостей (особенно API времени выполнения, который использует Equinox для непубличной отладки). Это, в свою очередь, означает, что ECF зависит от целого ряда других компонентов, которые должны быть доступны, и именно этот набор, как правило, не очень хорошо определен во время выполнения Felix.

Вы пропустили Service Fabric компании Paremus, которая является коммерческим облачным решением OSGi. Я не уверен, что вы были специально сосредоточены на open source или нет; но если вы включаете коммерческие лицензии, то они имеют очень надежную архитектуру для удаленных сервисов.

Наконец, вопрос Apache CXF over ECF - если вы используете Felix, я бы сказал, что работать с Apache CXF, вероятно, проще, чем с ECF. Это происходит главным образом из-за того, что зависимость установлена ​​и она работает, в сочетании с тем фактом, что ECF не может быть протестирован на Felix и поэтому может предполагать определенные аспекты среды выполнения Equinox (которая включает, например, делегирование родительского загрузчика классов среды выполнения, чтобы забрать вещи на загрузке classpath). Это на самом деле не вина ECF, а скорее артефакт работы экосистемы Eclipse.

Если вы хотите общаться с не-OSGi средами выполнения, у Apache CXF есть преимущество в том, что они могут генерировать WDSL для взаимодействия с другими языками. Я считаю, что вы можете сделать то же самое в ECF с немного большим количеством работы. Решение CXF, вероятно, будет более многословным, чем соответствующее решение ECF (WSDL всегда есть), но если вы не используете большие объемы запросов, это вряд ли будет иметь существенное значение.

Другие вопросы по тегам