Хостинг несколько служб rails на одном сервере + архитектура веб-сайта с поддержкой api

Я только что закончил читать книгу Пола Дикса Сервисно-ориентированный дизайн с RoR и хотел бы создать веб-приложение на Rails 3 на основе того, что я только что узнал.

Думаю, я правильно понял базовую архитектуру, но меня блокирует простой вопрос: как мне разместить несколько служб REST на одном сервере?

Вот как я вижу ситуацию на данный момент:

  • ] Создание * сервисных приложений (UserService, XYZFeatureService, ...) на основе Sinatra (я полагаю), которые предоставляют конечные точки REST для доступа к ресурсам
  • Создайте интерфейсное приложение Rails с контроллерами / представлениями / ...который потребляет данные из разных сервисов. Конечные пользователи будут получать к нему доступ, например, через http://www.myapp.com .
  • И, наконец, получите отдельное приложение «API» для обработки вызовов на https://api.myapp.com/* или https://www.myapp.com/api/* для публикации внешнего API, который будет использовать те же службы с возможной аутентификацией, регулированием и т. Д. Поверх него.

Похоже, для вас это хорошее начало?

Что касается реализации, из того, что я прочитал в книге, я планирую создать драгоценные камни для управления взаимодействием между приложением rails и службами (я могу закинуть немного RabbitMQ, но это уже другая история).

Однако, поскольку у меня только один физический сервер, мне интересно, как я собираюсь объединить все эти приложения / службы? Мое первое предположение - запускать каждое приложение-службу на localhost: xxxx, где xxxx - это отдельный непривилегированный порт для каждой службы. Я мог настроить каждый клиентский гем в моем приложении rails для использования этих портов.

Наряду с этим, я бы, вероятно, запустил Apache 2 + Passenger для обслуживания моего интерфейса rails и службы API, используя что-то вроде Rack :: URLMap (или виртуальные хосты при использовании поддомена) для направления запросов вправо. приложение. Должен ли я затем использовать Passenger для запуска моих сервисов в производственной среде?

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

Большое спасибо за ваш вклад!

Обновление

Основные вопросы, на которые я хотел бы получить ответы:

  • Подходит ли описанная архитектура для создания веб-приложения с внешними конечными точками API?
  • Можно ли запускать службы на одном сервер на разных портах?

Спасибо!

6
задан Olivier Lance 26 December 2011 в 00:58
поделиться