Я приближаюсь к необходимости масштабировать приложение видеопроцессора, работающее на 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) что мне использовать для распределения вызовов между серверными приложениями в зависимости от нагрузки?