Pergunta

Atualmente estamos usando 4 janelas cpu caixa com RAM de 8GB com MySQL 5.x instalado no mesma caixa. Estamos usando servidor de aplicação Weblogic para a nossa aplicação. Estamos direcionando para 200 usuários simultâneos para o nosso aplicativo (obviamente não para o módulo mesmo / tela). Então, qual é o número ideal de conexões devemos configurado no pool de conexão (min e número max) (Nós estamos utilizando o WebLogic mecanismo de conexão pooling AS')?

Foi útil?

Solução

Há uma resposta muito simples para esta pergunta:

O número de conexões no pool de conexão deve ser igual ao número do exec tópicos configurado no WebLogic .

A lógica é muito simples: Se o número de ligações é menor do que o número de tópicos, alguns dos fios talvez à espera de uma conexão tornando assim o pool de conexão um gargalo. Assim, ele deve ser igual, pelo menos, o número dos fios exec (tamanho do pool de threads).

Outras dicas

Será que você realmente quer dizer 200 concorrente usuários ou apenas 200 usuários logados? Na maioria dos casos, um usuário do navegador não vai ser capaz de fazer mais do que 1 solicitação de página por segundo. Assim, 200 usuários se traduz em 200 transações por segundo. Esse é um número bastante elevado para a maioria das aplicações.

De qualquer maneira, como um exemplo, vamos com 200 transações por segundo. Diga cada extremidade da frente (navegador) tx leva 0,5 segundos para completa e dos 0,5 segundos, 0,25 são gastos na base de dados. Assim, você precisaria de 0,5 * 200, ou 100 ligações no conjunto thead WebLogic e 0,25 * 200 = 50 conexões no pool de conexão DB.

Para ser seguro, gostaria de definir os tamanhos do conjunto de rosca máximo a pelo menos 25% maior do que o esperado para permitir picos de carga. Os mínimos pode ser uma pequena fração do max, mas a desvantagem é que ele pode levar mais tempo para alguns usuários, porque uma nova conexão teriam de ser criado. Neste caso, 50 - 100 conexões não é que muitos para um DB de modo que é provavelmente um bom número inicial

.

Note que para descobrir o que são os seus tempos médios de resposta da transação, junto com o seu tempo médio de consulta DB, você vai ter que fazer um teste de desempenho porque seus tempos em carga provavelmente não vão ser as vezes que você vê com um único usuário.

Dimensionamento pool de conexão não é uma coisa simples de se fazer. Você precisa basicamente:

  • métricas para investigar o uso da conexão
  • mecanismos de failover para quando não houver conexão disponível

FlexyPool objetivos para ajudá-lo descobrir nosso o tamanho certo pool de conexão.

Você pode verificar os seguintes artigos:

Você deve perfil dos diferentes fluxos de trabalho esperados para descobrir. Idealmente, o pool de conexão também irá ajustar dinamicamente o número de conexões ao vivo com base no uso recente, como é bastante comum para carga a ser uma função da hora do dia atual no seu alvo área geográfica.

Comece com um número pequeno e tentar chegar a um número razoável de usuários simultâneos, em seguida, pôr em marcha acima. Eu acho que é provável que você vai achar que o seu mecanismo de pool de conexão não é tão instrumental em sua escalabilidade como o resto do software.

O pool de conexão deve ser capaz de crescer e Shink com base nas necessidades reais. Registrar os números necessários para fazer uma análise sobre o sistema de execução, quer através de declarações madeireiras ou através da vigilância JMX. Considere a criação de alertas para cenários como "pico detectado: mais de X novas entradas tiveram que ser alocados em segundos Y", "conexão estava fora da piscina para mais de X segundos", que irá permitir que você dê atenção aos problemas de desempenho antes que eles se problemas reais.

Isso é algo que precisa ser testado e determinado numa base individual -. É praticamente impossível dar uma resposta precisa para suas circunstâncias , sem intimamente estar familiarizado com eles

É difícil obter dados concretos para isso. Também é dependente de uma série de fatores que você não mencionam -

  • 200 usuários simultâneos, mas quanto de sua atividade irá gerar consultas de banco de dados? 10 consultas por carregamento da página? 1 consulta apenas no login? etc etc.

  • Tamanho das consultas eo db obviamente. Algumas consultas executar em milissegundos, alguns em minutos.

Você pode monitorar mysql para assistir as consultas ativas atuais com "show processlist". Isso pode lhe dar uma melhor noção de quanto a atividade está realmente acontecendo no db sob carga de pico.

Com base na minha experiência em sistemas financeiros de transação, se você deseja manipular, por exemplo, 1K pedidos por segundos , e você tem de CPU 32, Você precisa ter votações 1000/32 conexão aberta com o seu banco de dados.

Aqui está a minha fórmula:

RPS / cpu_count

Se a maioria dos casos, o seu motor de banco de dados será capaz de lidar com seus pedidos, mesmo em muito menor número, mas suas conexões estará no modo de espera se o número é baixo.

Eu acho que é muito importante mencionar que seu banco de dados deve ser capaz de lidar com essas transações (com base na sua velocidade de disco, configuração de banco de dados e de energia do servidor).

Boa sorte.

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