Quantas instâncias de rails posso executar em um servidor?

2

Sou um desenvolvedor tentando determinar a melhor maneira de abordar um aplicativo de trilhos. Preciso fornecer algumas opções de implantação e estou tentando minimizar os custos de desenvolvimento e os custos de hospedagem de longo prazo.

Considere um site que permita que vários autores colaborem em um único "trabalho", seja um novo manual técnico ou até um código-fonte. "Usuários" têm permissão para "fazer check-out" de capítulos, fazer modificações e mesclar alterações. Os usuários classificam as modificações uns dos outros com classificações mais altas, permitindo acesso a mais e mais conteúdo. Vamos chamá-lo de "controle de versão social"

Embora seja possível escrever um único aplicativo de trilhos que possa discriminar entre "trabalhos", pode ser mais fácil, de uma perspectiva de codificação, que cada trabalho seja hospedado como seu próprio aplicativo de trilhos. Um aplicativo "mestre" criaria / controlaria cada instância do servidor de trabalhos, permitiria a navegação de trabalhos em busca de autores e seria um hub de relatórios para o proprietário do site. Por enquanto, assuma o mais simples dos esquemas em que cada trabalho usa um URL específico da porta:

Master - http://collabowork.it
My Novel - http://collabowork.it:3001
Some Manual - http://collabowork.it:3002
Another work - http://collabowork.it:3003

Minha pergunta é: quantas instâncias de rails eu poderei rodar em uma única caixa antes que ela fique sobrecarregada? Existe uma maneira de determinar quantas instâncias podem ser executadas em um servidor comum? Existe outra opção que permitiria escalar trabalhos adicionais de forma barata (talvez no EC2 ou algo similar). Como isso não está sendo planejado como um empreendimento lucrativo, qual é a maneira menos dispendiosa de implantar isso (falta de esforço adicional de codificação). Eu gostaria de ter algum tipo de análise de custos antes de oferecer alternativas, mas não sei como começar a dimensionar algo assim.

Quaisquer ideias ou pensamentos são apreciados.

    
por todd 23.11.2010 / 10:35

1 resposta

1

Eu tenho algo muito parecido com o que você tem.

Temos um aplicativo localizado em um diretório. Este aplicativo está configurado para vários clientes diferentes. A única diferença entre cada cliente é o banco de dados que eles usam. Quando configuramos, decidi que ter uma porta diferente para cada cliente não era muito bonita, portanto, adotamos uma abordagem diferente.

Eu sei que o Apache não é muito popular na cena Rails, mas ainda é um excelente software. Usamos o virtualhost baseado em nome do Apache para resolver esse problema junto com o Passenger3. Na nova versão, você pode definir um RailsEnv por virtualhost usando o mesmo diretório do aplicativo. A diretiva é chamada "PassengerAppGroupName".

Você recebe um virtualhost com algo parecido com isto:

<VirtualHost _default_:80>
        ServerName preprod.xxxx.fr
        DocumentRoot /var/xxxx/current/public/
        TimeOut 5000

        # Passenger directives
        PassengerHighPerformance on
        PassengerAppGroupName "preprod"
        RailsEnv preprod
        # Logging
        ErrorLog /var/log/apache2/preprod-error.log
        CustomLog /var/log/apache2/preprod-access.log combined

</VirtualHost>

Acho que este exemplo deve esclarecer as coisas. Essa solução permite separar seus aplicativos usando o host HTTP usado para se conectar a ele.

Para resumir, se os "trabalhos" tiverem a mesma base de código, você pode usar essa solução limpa IMHO.

EDIT: Em termos de desempenho, o Apache / Passenger precisa de 512MB de RAM. Eu achei que qualquer coisa abaixo disso levaria a um mau desempenho, mas YMMV. Eu não acredito que exija mais memória RAM se você adicionar mais host virtual.

    
por 23.11.2010 / 10:50