Масштабирование: как управлять связью между приложениями Ruby on Rails? - PullRequest
4 голосов
/ 12 февраля 2011

Я использую Ruby on Rails 3, и у меня есть приложение, которое использует пространства имен для обработки большего количества «внутренних концепций».Под «внутренними понятиями» я подразумеваю, что каждое пространство имен используется для обработки определенного ресурса моего приложения.Например, пространство имен - «пользователи», и оно используется для обработки пользовательских сеансов и авторизаций, другое - «блоги», и оно используется для обработки всех сообщений и комментариев.

Я думаю, что это «удобное» решение, позволяющее избежать многих проблем, но не самое лучшее.

В настоящее время мое приложение RoR состоит из этой структуры файловой системы:

# "users" and "blogs" are namespaces

RAILS_ROOT/app/controllers/users
RAILS_ROOT/app/controllers/blogs
RAILS_ROOT/app/models/users
RAILS_ROOT/app/models/blogs
RAILS_ROOT/app/views/users
RAILS_ROOT/app/views/blogs
...

Я хотел бы переключить пространство имен «пользователи» и «блоги» в двух приложениях RoR с использованием поддоменов , чтобы получить что-то вроде этого:

http://main.com        # This is the main RoR application
http://users.main.com  # This is another RoR application used to handle users
http://blogs.main.com  # This is another RoR application used to handle blogs

В двух словах,Я думаю, что я пытаюсь Уменьшить * мое приложение или, возможно, создать Webservice для каждого приложения RoR, но мои проблемы:

1. С какими проблемами я могу столкнуться?

Я заметил проблемы с поддержанием сеансов (в моем случае я обрабатываю их с помощью куки) между приложениями, но я думаю, что это не единственная проблема.

2. Как обрабатывать связь между тремя приложениями RoR в моем случае?

Я заметил, что могу использовать ActiveResource для обмена информацией, но я должен обратить внимание на такую ​​информацию, как аутентификация пользователя.

  1. Я должен реализовать протокол OpenID / Oauth для поддержания аутентификации пользователя?

  2. Я думаю, что я должен обеспечить информацию аутентификации пользователя с HTTPS-соединением также, если связь происходит между поддоменами. Это правда?

3. Как мне организовать свою работу и ресурсы?

При всем этом существесказал: Я бы не хотел использовать ( абсолютно ) плагинов или гемов, но, если мне нужно, я бы хотел реализовать свой собственный обработчик .

В конце я хотел бы иметь 3 RoR "простых" и разделенных приложения без использования пространств имен в каждом из них, которые могут взаимодействовать между собой:

# "Main" application for http://main.com
ROOT_MAIN/app/controllers/
ROOT_MAIN/app/models/
ROOT_MAIN/app/views/users
...

# "Users" application for http://users.main.com
ROOT_USERS/app/controllers/
ROOT_USERS/app/models/
ROOT_USERS/app/views/users
...

# "Blogs" application for http://blogs.main.com
ROOT_BLOGS/app/controllers/
ROOT_BLOGS/app/models/
ROOT_BLOGS/app/views/users
...

КСТАТИ : это хороший подход к использованию пространств имен, которые я использую?

PS: Если вам нужна какая-то другая информация, дайте мне знать, и я обновлю вопрос.


* С Процесс разработки программного обеспечения O2 : «Масштабирование» относится к концепции добавления большего количества серверов к существующему парку, а не к «Масштабированию», что означает замену существующего(медленные) серверы с более новыми (и более быстрыми) серверами.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2011

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

В Ruby On Rails 3 улучшена поддержка поддоменов.Таким образом, вам не нужно разделять их на три / более приложений RoR.Вы можете поместить весь свой код в одно приложение RoR.И перенаправьте user.abc.com на любой контроллер, такой как «пользователи / сессии», перенаправьте blog.abc.com на контроллер «блоги / блоги».Пространства имен удобны в таких приложениях, как ваше, где они очень быстро ускоряют вашу работу, выделяя контекстно разные части вашего приложения в разных папках и форматах маршрутов.

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

1 голос
/ 12 февраля 2011

Действительно ли ваше приложение настолько велико, что вам нужно использовать несколько приложений для решения различных задач? Возможно, в вашем посте недостаточно подробностей, чтобы передать реальную значимость того, что вы делаете, но кажется, что вы пытаетесь модульно настроить достаточно маленькое приложение, чтобы было бы хорошо без «масштабирования», как вы говорите. Или, может быть, я что-то упускаю?

  1. Я думаю, что это будет непростая проблема, но может быть какой-то способ сохранить данные сеанса в базе данных и поделиться ими так, как вы обрабатываете # 2, или вам придется накатить собственное решение для тот. Я думаю, что самой большой проблемой будет совместное использование ресурсов в вашем приложении, а также, если вы разбиваете управление пользователями на собственное приложение, вам необходимо реализовать свой собственный OpenID / Oauth. Этот пост описывает это с помощью Devise / OAuth.

  2. Вы можете использовать activeresource для подключения к соответствующему API остальных приложений. В этом посте описываются решения одного парня для обмена данными между приложениями rails.

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

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

0 голосов
/ 09 мая 2015

Извините, что ответил так поздно.На самом деле, если вы хотите масштабировать приложение rails, вам не нужно создавать разные приложения для каждого устройства (я имею в виду, поскольку вы пытаетесь разделить пользователей и блоги здесь), вы делаете шаг вперед в процессе масштабирования приложения, которое вы должны сначалаПоместите все отдельные модули в качестве монтируемых движков и требуйте их в качестве основного элемента в вашем основном приложении и монтируйте их в основных маршрутах приложения. Как в вашем случае, блоги могут быть перемещены на отдельный монтируемый механизм. Если в будущем вам потребуется масштабировать больше, чем вы можетеПерейдите далее, чтобы использовать движки в качестве отдельного приложения. Вот ссылка на видео, которое может дать вам представление о том, что я пытаюсь объяснить здесь https://www.youtube.com/watch?v=pm94BsoMGik

...