Интерфейс Java Backend и Rails

У меня есть запуск, предполагающий создание бэкэнда Java и интерфейса Rails. Бэкэнд Java будет заботиться о создании слоя кэширования для базы данных и предлагать другие дополнительные услуги. Интерфейс Rails будет главным образом для создания инструментов webapp и мониторинга.

Какие стартапы/компании используют эту настройку? Каковы некоторые проблемы с точки зрения скорости разработки, развертывания, масштабируемости и интеграции?

(Что было бы полезно для меня - это личный опыт или неформальные тематические исследования.Я бы хотел, чтобы ответы на приоритеты рассматривались с альтернативами, такими как Grails или JRuby, если это не будет большой частью уравнения)

Спасибо!

Ответ 1

Я никогда не делал никаких рельсов, но вот мои мысли. Почему бы просто не использовать Grails? Я проделал огромную разработку Grails и хорошо работает для быстрого прототипирования. Он также предлагает всю мощь Java, Spring и Hibernate. Вместо того, чтобы общаться с двумя разными технологиями, вы можете воспользоваться тем фактом, что Grails использует Spring и Hibernate под обложками для работы с кешированием, а также любые другие требования, которые эти технологии поддерживают. Если у вас есть Java-разработчики, Grails не следует тяжело подбирать. История плагина Grails достойна. Все они хранятся в центральном месте и их легко получить, но качество отличается в зависимости от автора плагина. Вы также должны помнить, что, поскольку Grails использует Groovy, который синтаксически похож на Java и работает на JVM, очень просто использовать существующий Java-код, включая множество доступных библиотек Java. Я не знаю этого наверняка, но я полагаю, что для использования с Java существует намного больше библиотек, и там для Grails доступны для языка Ruby и Rails. Я не могу сделать вызов использования ресурсов для вас, но мой вопрос будет состоять в том, сколько людей у ​​вас есть с опытом проектирования систем Rails, которые используют Java на задней панели со всеми gotchas, которые будут вместе с этим? Вы можете обнаружить, что у вас нет никого, кто умеет отлаживать, когда что-то пойдет не так в связи между двумя технологиями.

Ответ 2

Я использовал аналогичную пару для одного из моих проектов, но вместо RoR я использовал Python. Я не думаю, что там большая разница.

В общем, в этом типе программирования нет ничего конкретного. Две важные вещи, о которых вы должны заботиться:

  • хорошая модульность;
  • хорошо продуманный протокол между RoR и Java.

Прежде всего, речь идет о точном разложении функций между частями системы. У нас есть некоторые проблемы из-за того, что мы не понимаем, какая часть работы должна выполняться Java, а какая часть - Python. В общем, вы должны связать все функции, которые находятся близко друг к другу, и вещь, которая далеко должна быть подключена в очень немногих местах. Я думаю, вы знаете правила хорошей модульности, но в случае составления разных языков это нужно продумывать гораздо более тщательно. Вы также можете быть заинтересованы в создании нескольких различных Java-сервисов (например, один для кэширования базы данных и другого для всех остальных), чтобы иметь возможность свободно их комбинировать или даже использовать в других проектах позже.

Во-вторых, речь идет о связи между вашими частями. Я вижу два способа общения: через базу данных и через чистый сетевой протокол. Первые нужны сетевым коммуникациям, поэтому мы использовали чистый сетевой протокол, без какого-либо другого способа подключения частей.
Мы много экспериментировали с SOAP, но это дало сотни ошибок: этот протокол вполне нормально подключать сервисы, написанные на одном языке (id Java для Java), но ужасно для подключения сервисов на разных языках - автоматические инструменты для генерации WSDL дали разные результаты для Java и Python, а ручное создание схемы было сложным и трудоемким.
Таким образом, мы использовали REST. Он использует все функции протокола HTTP, такие как все четыре основных метода HTTP (POST, GET, PUT, DELETE), коды ошибок и многое другое, поэтому он охватывает почти все, что вам может понадобиться. Единственное ограничение с REST заключается в том, что он не может содержать состояние, поэтому вам может понадобиться реализовать собственный механизм сеансов.
Если вам не очень нравится REST и искать какой-то реальный пример, см. API-интерфейс Facebook и для реализации сервисов REST в Java вы можете использовать Restests.

Ответ 3

Возможно, я заявляю здесь очевидное, но самый большой результат здесь - это тот факт, что вы объединяете две технологии. Мало того, что развитие будет медленнее - Rails и все фреймворки Java ожидают полного приложения Ruby/Java, но для других проблем, которые вы упомянули (развертывание, масштабируемость, интеграция), существующие инструменты и решения не будут работать или, по крайней мере, не очень хорошо.

Если у вас есть веская причина объединить эти два, продолжайте, но ожидайте больше времени на эти проблемы, чем с помощью одного технологического решения. Если вы этого не сделаете, выберите Rails или Java.

Ответ 4

Я настоятельно рекомендую вам рассмотреть возможность использования интерфейса и бэкэнд в той же JVM по соображениям производительности.

Для Rails JRuby может запускать Rails, и вы можете использовать его в контейнере Java EE, обеспечивая быструю связь между компонентами.

Наличие нескольких архитектурных объектов, которые не выполняются в одном и том же процессе, требует от вас сетевой связи, которая занимает гораздо больше времени, чем просто передача ссылки на объект (я не ожидаю, что вы захотите использовать общую память).

Ответ 5

Twitter.com предположительно использует бэкэнд Java и Rails для своего веб-интерфейса. Вот некоторые ресурсы:

http://www.radicalbehavior.com/5-question-interview-with-twitter-developer-alex-payne/

http://blog.adsdevshop.com/2008/05/02/twitter-is-not-abandoning-rails/

http://twitter.com/#!/ev/status/801530348

В частности, они используют Scala на бэкэнд (который компилируется в Java-байтовый код):

http://www.artima.com/scalazine/articles/twitter_on_scala.html

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

Если проблема сегментирования экспертизы касается вас, я бы предложил запустить JRuby of Rails. Теперь он очень зрелый - и работает лучше, чем Rails на Ruby 1.8.x.

Ответ 6

Мы использовали Ruby on Rails для front-end и Core-Java SOAP Api для бэкэнд. Он работал очень хорошо.

Основная проблема заключается не в производительности, а в людях. Очень сложно нанимать опытных людей в Ruby on Rails для всего, вместо этого вы нанимаете несколько или можете легко форматировать, чтобы просто изучить интерфейс Rails.

В качестве начальной точки зрения, это лучшая стратегия. Многие считают, что ROR лучше всего подходит для стартапов... но очень немногие знали об этом, потому что в большинстве MNC мы используем Java, поэтому есть давление, чтобы изучить Rails и Code, или нанять очень мало разработчиков ROR. Таким образом, вместо этого вы можете использовать ROR для интерфейса (только немногие люди делают это, или это легко учиться) и используют опытных разработчиков Java для обновлений БД и бизнес-логики.