Назад | Перейти на главную страницу

Основные проблемы с эластичным балансировщиком нагрузки AWS

У меня есть массив экземпляров EC2 t1.micro за балансировщиком нагрузки, и каждый узел может управлять ~ 100 одновременными пользователями, прежде чем он начнет шататься.

Я бы ДУМАЛ, если бы у меня было 2 таких экземпляра, это позволило бы моей сети управлять 200 одновременными пользователями ... очевидно, нет. Когда я действительно хлопаю сервер (blitz.io) с полными 275 одновременными участниками, он ведет себя так же, как если бы был только один узел. время отклика увеличивается с 400 мс до 1,6 секунды (что ожидается для одного t1.micro, но не 6).

Итак, вопрос в том, я просто что-то делаю неправильно или ELB фактически бесполезен? У кого-нибудь есть мудрость по этому поводу?

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

Микроэкземпляры не рассчитаны на длительную нагрузку. Они позволяют перегружать процессор, но через короткий промежуток времени (предположим, 15-30 секунд) при большой нагрузке они будут строго закрыты.

Попробуйте хотя бы на небольшом экземпляре, если вам нужен какой-либо полезный тест.

Проверить нагрузку на отдельные серверы. ELB не равномерно распределяет трафик для всех экземпляров, когда он поступает с одного IP (как в тестовом примере AB): он просто переключается с одного экземпляра на другой. Таким образом, окончательная загрузка не может быть двойной по сравнению с одним экземпляром, но в среднем это в любом случае лучше, чем направление всего трафика на один единственный экземпляр (из-за уменьшения нагрузки и более быстрого ответа)

Убедитесь, что вы случайно не выбрали липкую балансировку нагрузки. Это приведет к тому, что один и тот же пользователь будет перенаправлен на один и тот же экземпляр.

Микроэкземпляры не рассчитаны на большие нагрузки. Они предназначены для разгрузки процессора. Я могу заверить вас, что микро-экземпляры отлично работают с эластичным балансом нагрузки.

Не забывайте, что могут быть другие способы увеличить посещаемость вашего сайта. Например. Лак

Проблема здесь в самом ELB. Некоторое время назад мы провели некоторое тестирование производительности и обнаружили, что у ELB начинается большая задержка, когда количество запросов превышает 250 в секунду. Мы обнаружили это при тестировании ELB, а затем при выполнении этих тестов на одном из экземпляров, стоящих за ELB - экземпляр (тип экземпляра m1.large) работал нормально (хотя и имел некоторую нагрузку) с 250 запросами в секунду, в то время как ELB с несколькими экземплярами позади он умирал. В то же время при тестировании ELB инстансы имели небольшую нагрузку.

Я предлагаю получить экземпляр, который будет действовать как балансировщик нагрузки (желательно настроить для этого nginx) для других экземпляров и не использовать никаких ELB.