2015-03-31 2 views
3

Мы разместили сайт в AWS EC2 типа c4.8xlarge. Это довольно большая система с большим объемом памяти и вычислительными ресурсами. Тысячи пользователей пытались получить доступ к системе в течение 2-х часового таймфрейма в эти выходные. Хотя он не разбился, он немного замедлился и не смог выполнить ожидаемый уровень. Анализ статистики показал, что ограниченная пропускная способность сети является основной причиной замедления. Использование процессора оставалось ниже 6%, но NetworkIn и NetworkOut, похоже, достигли максимума в 60 МБ и 200 МБ соответственно в течение этого периода времени. Хотя я не ожидаю от сети, некоторые чтения в Интернете, по-видимому, указывают на то, что весь трафик, проходящий через один сетевой адаптер, может быть основной причиной ограниченной пропускной способности сети. Это правда? Хостинг сайта на другом типе экземпляра EC2 поможет увеличить пропускную способность сети? Вот как показатели networkIn и networkOut выглядели как при большой нагрузке.Как увеличить пропускную способность сети AWS EC2?

networkIn and networkOut metrics chart

+3

Почему только один экземпляр? Можете ли вы масштабировать горизонтально? –

+0

Я мог и могу быть. Я понимаю риски, связанные с одним экземпляром, но приложение имеет небольшую ценность для бизнеса, и это приемлемые риски. Это раз в год. Масштабирование по горизонтали в соответствии с ограничениями на процессор или память или хранилище понятно, но для этого требуется просто увеличить пропускную способность, похоже на облом. 200MB NetworkIn и 60MB NetworkOut кажется слишком низким, возможно, я ошибаюсь. И я даже не уверен, если это в секунду. AWS CloudWatch не указывает это четко. –

+0

Хотя ваш экземпляр имеет сетевой интерфейс 10 Гбит, его неясно, что он должен быть способен достичь этой производительности от ec2 до интернета или если производительность ограничена межсетевой связью. На протяжении всего времени вы получаете около 1,8 Гбит/с с накладными расходами. Включили ли вы расширенные сети? http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html – datasage

ответ

-1

Да Amazon имеет концепцию ENI - Эластичный сетевой интерфейс. Пока вы можете добавить дополнительный экземпляр в экземпляр; он по-прежнему является логическим интерфейсом. Предоставление и доступность сетевого канала сильно зависит от выбранного вами типа экземпляра. У Amazon есть несколько типов/семейств экземпляров, таких как R, I, C, D, G - оптимизированы в памяти, IO, Compute, Dense Storage, GPU соответственно. Вы можете увидеть, можете ли вы сжать макс. из них.

Независимо от того, что когда-либо вы выбираете как тип экземпляра, вы по существу достигли порога и не смогли бы масштабироваться за определенную точку. Масштабируемость особенно уникальна по сравнению с другими факторами масштабируемости, такими как Memory/CPU.

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

+0

Спасибо. Любые другие мысли, основанные на моих комментариях выше? –

+0

Как бы несколько экземпляров помогли, если вам еще нужно пройти балансировку нагрузки с аналогичными ограничениями или даже с меньшей пропускной способностью? (Предполагая, что вы все равно будете использовать экземпляр ec2, как ваш балансировщик нагрузки с чем-то вроде haproxy, установленным). – stepanian

+0

Хотя это не бедро, масштабирование - жизнеспособное решение. ** Весь этот сайт и весь Stack Exchange ** работает только на [25 серверах] (http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25- серверы-и-i.html). Они заявили, что они могут работать только с одним веб-сервером, а их серверы имеют спецификации, очень похожие на c4.8xlarge (но с лучшим хранилищем). Я серьезно сомневаюсь, что они достигли предела вертикального масштабирования здесь, вероятно, это проблема конфигурации или кода, а не аппаратное ограничение. – BobMcGee

5

Если вы ограничены полосой пропускания, этот график станет плоским, когда вы достигнете предела. Кроме того, как отмечали другие, только 1 Мбайт/с и 3 МБ/с, и я могу сделать больше, чем на t2.micro для внешнего интернета.

Что делает система с каждым запросом? Вот список вещей, на которые я бы посмотрел, в порядке:

  • Threading: существуют ли узкие места в вашем приложении, где только один поток может получить доступ к ресурсу? Это снизит загрузку процессора, но приведет к точному отображению шаблона.
  • Плохие шаблоны параллелизма в вашем приложении или сервере. Загрузите тест и найдите его медленнее и медленнее, поскольку соединения увеличиваются, но ничего не делают.
  • Индивидуальный процессор: один процессор загружен до 100%, в то время как другие в основном не работают? (с 30+ ядрами, насыщенный процессор будет давать вам только 3% использования ЦП). Один простаивающий CPU + другие в режиме ожидания обычно означает проблему параллелизма, возможно, при обработке соединения.
  • Что такое использование памяти? Вы используете своп вообще? (это ОЧЕНЬ плохой знак, если это так, и вызовет проблему). Если использование памяти чрезмерно, часто происходит сбой в хранении в памяти или в пулах потоков обработчиков избыточного размера.
  • Диск-входы/выходы или внешние сетевые запросы: читаете или пишете с каждым запросом? vmstat сообщит, если вы тратите много времени на ожидание обслуживания I/O. Если это так, я бы посмотрел на журнал прежде всего.
    • В примерах c4.8xlarge используется только EBS, если хранилище магнитное и вы записываете журналы доступа, вы получаете несколько сотен записей в секунду. SSD общего назначения дает вам 3 IO/s на базу GB, но может лопнуть до 3000, пока у них не закончится IO-кредитов.
    • ОС будет пытаться объединить записи, но с тысячами одновременных

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

0

Ваш NetworkIn и Out на самом деле> 50 МБ/с. Если ваш процессор и память остались в разумных пределах, ваш экземпляр в порядке. Вы также должны проверить журнал соединений в своей базе данных (при условии, что вы используете RDB с вашей системой), замедление фактически может быть вызвано медленным ответом на вашу базу данных, что заставляет веб-сервер реагировать медленнее.

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

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