Configuração de servidor para 100 usuários

Configuração de servidor para 100 usuários

Tenho um problema relacionado a qual servidor aproximar para o seguinte cenário (uma situação real):

Tenho um servidor onde serão armazenados alguns vídeos que poderão ser acessados ​​através de uma aplicação web rodando neste servidor. Haverá cerca de 100 usuários (simultâneos) que irão utilizá-lo (geralmente através de tablets ou telefones, mas PCs também serão incluídos).

Você pode me dar algumas ideias sobre como construir a configuração de hardware para este servidor? O sistema operacional rodando nele será Linux.

Desde já, obrigado.


EDITAR I:

O servidor web que utilizo é o Apache HTTP, mas é muito provável que atue como proxy para um Javaservidor (instalado nesta máquina, é claro).

Outras aplicações que serão executadas neste servidor serão:

  • um pedido de autenticação
  • um pedido de administração.

Este servidor também funcionará continuamente (24 horas por dia, 7 dias por semana).

Responder1

Pela sua descrição, parece que o principal caso de uso do servidor será transmitir vídeos para 100 clientes.

Diante disso, os dois subsistemas mais importantes para o servidor serão:

  1. A conexão de rede
  2. O sistema de armazenamento

Para dimensioná-los em termos de desempenho, você precisa saber quanta largura de banda você precisa - isso depende da qualidade do vídeo que você irá veicular. Supondo que o vídeo seja de 1 MB/s, para 100 usuários, tanto a rede quanto os sistemas de armazenamento devem ser capazes de fornecer 100 MB/s (800 Mb/s para a rede) de dados.

Se a largura de banda da rede for maior do que um único link pode suportar e você não puder aumentar a velocidade do link (ou seja, migrar de 1 GbE para 10 GbE/40 GbE), você poderá adicionar mais links e agregá-los na camada 2 ou usar vários Endereço IP (um por link) e distribuir as conexões pela aplicação. Além disso, você deve se certificar de que o caminho de dados do servidor para os clientes pode lidar com a capacidade, não faz sentido o servidor ser capaz de entregar 10 Gbps se houver um gargalo em outro lugar da rede!

Para o sistema de armazenamento, você precisa ter certeza de que ele pode lidar com a largura de banda e o número de IOPS (IOs por segundo) para atender os dados. Pelo nosso cálculo acima, você precisará de 100 MB/s de leituras de streaming, mas como tem 100 usuários, o sistema de armazenamento deve ser capaz de lidar com pelo menos 100 IOPS. Se você espera que os usuários naveguem pelos vídeos, precisará de muito mais para manter o desempenho. Embora os discos rígidos possam oferecer um bom desempenho de streaming quando não há contenção, eu consideraria os SSDs quando o número de acessos simultâneos aumentar.

Além dessas caracterizações básicas de desempenho, você também precisa considerar a confiabilidade das conexões de rede e dos sistemas de armazenamento. O que acontece em caso de falhas de link ou de disco rígido? Se quiser continuar fornecendo serviço, você deve ter vários links e configuração de armazenamento resiliente (através de RAID ou replicação de dados em nível de aplicativo/sistema de arquivos).

A RAM do sistema de armazenamento ajudará você a armazenar os vídeos em cache e a aliviar um pouco a carga do sistema de armazenamento; portanto, se você espera que muitas pessoas assistam ao mesmo vídeo, mais RAM geralmente ajudará. Mas se o tamanho do conjunto de trabalho (os dados comumente acessados) for maior que a quantidade de RAM do sistema, não se surpreenda se não notar uma grande melhoria.

Como a maior parte do sistema entregará dados via IO, você provavelmente não precisará de muita energia da CPU e, portanto, qualquer CPU moderna com vários núcleos deve ser suficiente. Embora você deva tomar cuidado para que, se tiver várias CPUs em uma arquitetura NUMA, você não sobrecarregue a interconexão da CPU.

Depois de ter o hardware, você deve compará-lo para ter certeza de que oferece desempenho inteligente. Para o sistema de armazenamento eu recomendo ofioferramenta, ela permite testar especificamente cenários como leituras de streaming com 100 leitores simultâneos.

Considerando tudo o que disse acima, você deve conversar com seu fornecedor preferido e ver qual configuração ele recomenda. Se você tornar seus requisitos parte da RFP (especialmente se incluir requisitos rígidos, como a capacidade de fornecer um perfil de IO específico), será mais fácil resolver quaisquer falhas de desempenho posteriormente.

Ao projetar esses sistemas, tente pensar em como os dados se movem pelo sistema e onde estarão as limitações.

Por fim, certifique-se de projetar o sistema com capacidade excedente para poder lidar com o crescimento e os picos de tráfego.

Responder2

É difícil fornecer a configuração exata do servidor dependendo do número de usuários simultâneos, pois também depende do seu código e da otimização do banco de dados. Basicamente, você precisa realizar o benchmarking para seu aplicativo e servidor, portanto, muitas ferramentas de código aberto estão disponíveis para fazer isso, como

Você também pode fazer Benchmarking Completo e Stack Benchmarking

Ferramentas como

  1. ab
  2. http_load
  3. banco de dados
  4. referência unix

etc estão disponíveis.

Responder3

Você pode me dar algumas ideias sobre como construir a configuração de hardware para este servidor? O sistema operacional rodando nele será Linux.

sim. use o tamanho duplo.</irony>

não, impossível a partir deste estágio. você pode usar uma máquina ou mot de 4 núcleos e 4 GB de RAM, isso realmente depende do que você fará com ela. se você apenas servir downloads do sistema de arquivos, uma máquina pequena seria adequada, mas quando se trata de java et al ... benchmark!


para ser mais específico, você também deve ser mais específico.

  • qual servidor web?
  • o servidor é apenas para download?
  • software adicional baseado na web, como cms, etc.?
  • pilha LAMP completa?
  • 24 horas por dia, 7 dias por semana, necessário?

eu sugeriria o nginx se o objetivo principal for entregar vídeos e atuar como um proxy reverso para seu aplicativo java. é muito mais leve que o Apache e lida com mais conexões simultâneas enquanto precisa de menos recursos do sistema.

para sua seção de download, tente evitar os aplicativos da web e servir seus arquivos diretamente de seu proxy reverso; isso diminuirá o desempenho geral necessário.

observe que o nginx possui alguns módulos excelentes para atuar como um servidor estático para vídeos


sobre 24 horas por dia, 7 dias por semana: você precisagarantiroperações 24 horas por dia, 7 dias por semana? então você precisará de uma configuração de failover.

informação relacionada