Problemas básicos do balanceador de carga elástico do AWS

2

Eu tenho uma matriz de instâncias EC2 t1.micro atrás de um balanceador de carga e cada nó pode gerenciar ~ 100 usuários simultâneos antes de começar a ficar instável.

Eu PENSAR que se eu tivesse 2 desses casos, permitiria que minha rede gerenciasse 200 usuários simultâneos ... aparentemente não. Quando eu realmente bato o servidor (blitz.io) com um total de 275 concurrents, ele se comporta da mesma forma como se houvesse apenas um nó. vai de 400ms de tempo de resposta a 1,6 segundos (o que para um único t1.micro é esperado, mas não 6).

Então a questão é: eu simplesmente não estou fazendo algo certo ou o ELB é efetivamente sem valor? Alguém tem alguma sabedoria sobre isso?

AB logs:
Loadbalancer (3x m1.medium)
Document Path:          /ping/index.html
Document Length:        185 bytes

Concurrency Level:      100
Time taken for tests:   11.668 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Non-2xx responses:      50001
Total transferred:      19850397 bytes
HTML transferred:       9250185 bytes
Requests per second:    4285.10 [#/sec] (mean)
Time per request:       23.337 [ms] (mean)
Time per request:       0.233 [ms] (mean, across all concurrent requests)
Transfer rate:          1661.35 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    2   4.3      2      63
Processing:     2   21  15.1     19     302
Waiting:        2   21  15.0     19     261
Total:          3   23  15.7     21     304

Single instance (1x m1.medium direct connection)

Document Path:          /ping/index.html
Document Length:        185 bytes

Concurrency Level:      100
Time taken for tests:   9.597 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Non-2xx responses:      50001
Total transferred:      19850397 bytes
HTML transferred:       9250185 bytes
Requests per second:    5210.19 [#/sec] (mean)
Time per request:       19.193 [ms] (mean)
Time per request:       0.192 [ms] (mean, across all concurrent requests)
Transfer rate:          2020.01 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    9 128.9      3    3010
Processing:     1   10   8.7      9     141
Waiting:        1    9   8.7      8     140
Total:          2   19 129.0     12    3020
    
por C Jones 20.08.2012 / 20:28

4 respostas

6

As microinstâncias não são projetadas para carga sustentada. Eles permitem o estouro da CPU, mas depois de um curto período de tempo (pense em 15 a 30 segundos) com carga pesada eles estarão severamente limitados.

Experimente com uma pequena instância, pelo menos, se você quiser algum tipo de referência útil.

    
por 20.08.2012 / 21:22
1

Verifique se você não selecionou acidentalmente o balanceamento de carga. Isso faria com que o mesmo usuário fosse direcionado para a mesma instância.

As microinstâncias não foram projetadas para sustentar cargas pesadas. Eles são para o estouro da CPU. Posso garantir que as microinstâncias funcionam bem com balanças de carga elásticas.

Não se esqueça de que pode haver outras maneiras de aumentar o tráfego que seu website pode enfrentar. Por exemplo. Verniz

    
por 23.08.2012 / 10:21
1

Verifique a carga nos servidores únicos. O ELB não equilibra igualmente o tráfego para todas as instâncias quando isso vem de um único IP (como no caso de teste AB): ele simplesmente muda de uma instância para outra. A carga final, em seguida, não pode ser o dobro de uma única instância, mas, em média, é melhor do que direcionar todo o tráfego para uma única instância (devido à redução de carga e resposta mais rápida)

    
por 17.12.2012 / 17:50
-2

A questão aqui é o próprio ELB. Algum tempo atrás, fizemos alguns testes de desempenho e descobrimos que o ELB começa a ter grande latência quando há mais de 250 solicitações / segundo. Descobrimos isso quando testamos o ELB, em seguida, fizemos esses testes contra uma das instâncias por trás do ELB - a instância (um tipo de instância m1.large) estava indo bem (embora tivesse alguma carga) com 250 solicitações / segundo, enquanto o ELB com alguns exemplos atrás estava morrendo. Ao mesmo tempo, ao testar o ELB, as instâncias tinham pouca carga.

Minha sugestão é obter uma instância que funcionará como um ballancer de carga (configure o nginx nele de preferência para isso) para as outras instâncias e não use nenhum ELB.

    
por 20.08.2012 / 21:56