У меня есть массив экземпляров 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.