Pergunta

Ao escrever um servidor personalizado, quais são as melhores práticas ou técnicas para determinar o número máximo de usuários que podem se conectar ao servidor a qualquer momento?

Eu presumiria que os recursos do hardware do computador, a capacidade da rede e o protocolo do servidor seriam fatores importantes.

Além disso, você acha que é uma boa prática limitar o número de conexões de rede a um determinado número máximo de usuários?Ou o servidor não deveria limitar o número de conexões de rede e deixar o desempenho diminuir até que o tempo de resposta fosse extremamente alto?

Foi útil?

Solução

Dan Kegel reuniu aqui um resumo de técnicas para lidar com grandes quantidades de conexões de rede a partir de um único servidor: http://www.kegel.com/c10k.html

Outras dicas

Em geral, os servidores modernos podem lidar com um grande número de conexões simultâneas.Trabalhei em sistemas com mais de 8.000 soquetes TCP/IP abertos simultaneamente.

Você precisará de uma interface de manutenção de alta qualidade para lidar com esse tipo de carga, confira evento libe ou libev.

Essa é uma boa pergunta e definitivamente é situacional.Qual é o seu computador?Você tem uma máquina de 4 soquetes com Quad Core Xeons, 128 GB de RAM e conectividade Fibre Channel (como o par de Dell R900 que acabamos de comprar)?Ou você está rodando em um p3 550 com 256 MB de RAM e modem de 56K?Quanta carga cada conexão coloca no seu servidor?Que tipo de resposta é aceitável?

Estas são as perguntas que você precisa responder.Acho que a melhor maneira de encontrar a resposta é por meio de testes de carga.Crie um teste de unidade dos caminhos esperados (e talvez alguns inesperados) que seu código executará em seu servidor.Encontre uma estrutura de teste de carga que permitirá simular 10, 100, 1.000, 10.000 usuários executando essas tarefas ao mesmo tempo.

Isso lhe dirá quantas conexões seu computador pode suportar.

A grande vantagem do cenário de teste de carga/unidade é que você pode definir expectativas de tempo de resposta em seus testes de unidade e aumentar a carga até sair do tempo de resposta.Se você tiver um requisito de suporte a um número X de usuários com Y segunda resposta, poderá demonstrá-lo com seus testes de carga.

Um dos maiores contratempos em conexões de alta simultaneidade são, na verdade, os roteadores envolvidos.Roteadores voltados para usuários domésticos geralmente têm uma pequena tabela NAT, impedindo que o roteador realmente atenda as conexões do servidor.

Certifique-se de pesquisar também a configuração do seu roteador/infraestrutura de rede.

Acho que você não deve limitar o número de conexões que seu servidor permitirá - apenas capture e trate adequadamente quaisquer exceções que possam ocorrer ao aceitar e fechar conexões e você estará bem.Você deve deixar esse tipo de programação de nível inferior para as camadas subjacentes do sistema operacional - dessa forma, você pode portar seu servidor com mais facilidade, etc.

Isso realmente depende do seu sistema operacional.

Diferentes sabores de Unix suportarão um número "ilimitado" de identificadores/soquetes de arquivos, outros têm valores altos, como 32768.

Um limite de usuário típico é 8.192, mas geralmente pode ser definido para um valor mais alto.

Acho que o Windows é mais limitante, mas a versão do servidor pode ter limites mais altos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top