Dimensionando um aplicativo de processamento de vídeo no EC2?

1

Estou abordando a necessidade de dimensionar um aplicativo de processamento de vídeo que seja executado no EC2.

Até agora, a configuração é uma máquina:

Frontend do Backbonejs Rails 3.2 Postgresql Resque + S3 para armazenamento

O fluxo do aplicativo é o seguinte:

1) Solicitação do frontend. Envie um vídeo. 2) Armazenando vídeo 3) Pesquisando APIs externas. 4) Processamento / codificação de vídeos. 5) Publicar no frontend.

Eu posso separar o backend e o frontend sem problemas, mas quando se trata de distribuir o backend entre vários servidores, estou um pouco intrigado. Eu provavelmente posso chegar a uma solução temporária (como apenas duplicar aplicativos fazendo várias instâncias), mas desde que eu realmente não tenho experiência em administração do sistema backend, pode haver alguns erros fundamentais. Também prefiro ter algo que é escalável . Gostaria de saber se alguém pode dar algum feedback sobre o seguinte plano:

A) Máquina Frontend. Apenas frontend, fala com o backend via REST Api. B) Servidor backend (BS), banco de dados principal. Obtém solicitação de 1), postagens para 2) salva uploads para 3) C) armazenamento S3. D) Servidor para consulta de APIs. Basicamente apenas os trabalhadores de Resque, que postam informações de volta para 2) E) Servidor para codificação de vídeo. Processa os vídeos enviados em 3) e os envia de volta.

Então eu terei:

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

Tudo isso supostamente se comunicará por meio de solicitações HTTP.

Meu motivo para isso é que a parte de processamento de vídeo é realmente o mais intensivo em recursos e eu apenas executaria o aplicativo barebones que aceita solicitações e começa a processá-las.

Perguntas:

1) Nesta configuração eu terei o banco de dados principal em B) e todos os outros servidores se comunicarão com ele via solicitações HTTP (e armazenam duplicatas de bancos de dados também, eu acho ... por razões de segurança). É a abordagem certa ou eu deveria ter um banco de dados que todos se conectem a (como então?)

2) É uma boa ideia separar as consultas da API da parte de processamento de vídeo? Logicamente, eles são muito próximos (o processamento é determinado pelo resultado de consultas da API), mas o Processamento de Vídeo em termos de recursos é mais intensivo.

3) o que devo usar para distribuir chamadas entre aplicativos de back-end com base no carregamento?

    
por Stpn 28.09.2012 / 21:52

0 respostas