6

Два вопроса о EC2 ELB:EC2 Проблемы с производительностью ELB

Прежде всего, как правильно запустить тесты JMeter. Я нашел следующее http://osdir.com/ml/jmeter-user.jakarta.apache.org/2010-04/msg00203.html, которое в основном говорит, чтобы установить -Dsun.net.inetaddr.ttl = 0 при запуске JMeter (что легко), а вторая точка, которую он делает, заключается в том, что маршрутизация выполняется за ip не за запрос. Поэтому, помимо запуска фермы экземпляров jmeter, я не вижу, как обойти это. Любые идеи приветствуются, или, возможно, я неправильно читаю объяснение (?)

Кроме того, у меня есть веб-служба, которая делает вызов на стороне сервера другой веб-службе в java (и позади ELB), поэтому Я использую HttpClient, и это MultiThreadedHttpConnectionManager, где я предоставляю несколько больших-иш-маршрутов для размещения значения в диспетчере соединений. И мне интересно, изменит ли это поведение балансировки нагрузки ELB, потому что соединения кэшируются (а также, что все запросы происходят от одного и того же компьютера). Я могу переключаться на использование нового HttpClient каждый раз (вид хромого), но это не оборачивается тем фактом, что все запросы происходят из небольшого числа хостов.

Backstory: Я нахожусь в процессе тестирования службы с использованием ELB на EC2, и трафик не распространяется равномерно (большинство трафика на 1-2 узла, почти нет трафика на 1 узел, никакого трафика на 4-й узел). И поэтому вышеперечисленные проблемы являются возможными виновниками, которых я идентифицировал.

ответ

1

У меня были очень симулятивные проблемы. Одно дело, что ELB плохо масштабируется при пакетной нагрузке. Поэтому, когда вы пытаетесь протестировать его, он не масштабируется немедленно. Для этого требуется много времени, чтобы двигаться вверх. Еще одним недостатком является тот факт, что он использует CNAME для поиска DNS. Только это замедлит вас. Есть больше проблем с производительностью, которые вы можете исследовать.

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

Также, если вы планируете делать SSL с помощью ELB, вы будете страдать больше, потому что я обнаружил, что производительность ниже номинала.

Я надеюсь, что это поможет. Когда дело доходит до этого, AWS сказал мне лично, что тестирование нагрузки ELB действительно не работает, и если вы планируете запускать с большой нагрузкой, вам нужно сказать им, чтобы они могли масштабировать вас раньше времени ,

+0

Я не уверен, что то, что я делаю, считается большой нагрузкой, но как 150-200 QPS для REST api, без SSL. Я не ожидаю, что сам ELB будет масштабироваться (я надеюсь, что 1 ELB сможет обрабатывать 150QPS), но я ожидаю, что он равномерно распределит нагрузку по ящикам без необходимости увеличения времени нарастания. Можете ли вы прокомментировать это? – Kevin

+0

Да. У меня была та же проблема, и я думаю, что нагрузка распространяется только в том случае, если вам это нужно. При этом ELB не кажется последовательным. Я бы снова рекомендовал вам взглянуть на haproxy, у него есть возможность сделать круговой дистрибутив, который будет ближе к тому, что вам нужно. Мне действительно нравятся услуги AWS, но черный ящик ELB слишком сложный для управления IMO. – chantheman

+0

Другое дело, если вы отправляете всю нагрузку с одного IP-адреса, что также может вызвать проблемы с распределением нагрузки. – chantheman

1

Вы не указали, сколько экземпляров jmeter вы используете, но по моему опыту оно должно быть в два раза больше числа AZ, которое вы масштабируете. Даже тогда вы, вероятно, увидите несбалансированные нагрузки - очень необычно видеть, что весы масштабируются точно по вашему заднему флоту.

Вы можете помочь (немного), запустив экземпляры jmeter в разных регионах.

Другим фактором является продолжительность вашего теста. В ELB требуется некоторое время для масштабирования - вы можете вообще сказать, сколько экземпляров работает, выполняя nslookup против имени ELB. Понимайте свои шаблоны масштабирования и создавайте тесты вокруг них. (Так что, если требуется добавить еще один экземпляр в пул ELB, добавьте 25-30-минутную разминку к вашему тесту). Вы также получаете AWS для «предварительного подогрева» пула ELB, если это необходимо.

Если ваш размер пула ELB достаточен для вашего теста и можно проверить, что пул не изменяется во время тестового прогона, вы всегда можете попробовать запустить тесты непосредственно с IP-адресами ELB, то есть вручную балансировать трафик.

Я не уверен, что вы ожидаете, что произойдет со 2-м ярусом вызовов - если вы открываете соединение и повторно используете его, очевидно, что нет возможности масштабировать все экземпляры без закрытия &, открывая соединение. Эти вызовы работают на одном и том же множестве серверов или в другом наборе? Вы можете создать внутренний ELB и использовать эту конечную точку для подключения, но я не уверен, что это поможет в описанном вами сценарии.

Смежные вопросы