Назад | Перейти на главную страницу

Масштабирование приложения для обработки видео на EC2?

Я приближаюсь к необходимости масштабировать приложение видеопроцессора, работающее на EC2.

Пока что установка - одна машина:

Backbonejs frontend Rails 3.2 Postgresql Resque + S3 для хранения

Поток приложения выглядит следующим образом:

1) Запрос от фронтенда. Загрузите видео. 2) Хранение видео 3) Запрос внешних API. 4) Обработка / кодирование видео. 5) Публикация в веб-интерфейсе.

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

А) Фронтенд-машина. Просто интерфейс, общается с сервером через своего рода REST Api. Б) Backend server (BS), основная база данных. Получает запрос из 1), отправляет в 2) сохраняет загрузки в 3) C) хранилище S3. D) Сервер для запросов API. По сути, это просто рабочие Resque, которые отправляют информацию обратно на 2) E) Сервер для кодирования видео. Обрабатывает видео, загруженные на 3), и загружает их обратно.

Итак, у меня будет:

A)frontend
          \       
           \      
            B)MAIN_APP/DB ----- C)S3 Storage (Files)
             /          \              /
            /            \            /
D)ExternalAPI_queries    E)Video_Processing
   (redundant DB)           (redundant DB)

Все это якобы будет общаться друг с другом через HTTP-запросы.

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

Вопросы:

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

2) Это хорошая идея - отделить запросы API от части обработки видео? Логически они очень близки (обработка определяется результатом запросов API), но с точки зрения ресурсов Обработка видео всегда более интенсивна.

3) что мне использовать для распределения вызовов между серверными приложениями в зависимости от нагрузки?