Мы разместили сайт в AWS EC2 типа c4.8xlarge. Это довольно большая система с большим объемом памяти и вычислительными ресурсами. Тысячи пользователей пытались получить доступ к системе в течение 2-х часового таймфрейма в эти выходные. Хотя он не разбился, он немного замедлился и не смог выполнить ожидаемый уровень. Анализ статистики показал, что ограниченная пропускная способность сети является основной причиной замедления. Использование процессора оставалось ниже 6%, но NetworkIn и NetworkOut, похоже, достигли максимума в 60 МБ и 200 МБ соответственно в течение этого периода времени. Хотя я не ожидаю от сети, некоторые чтения в Интернете, по-видимому, указывают на то, что весь трафик, проходящий через один сетевой адаптер, может быть основной причиной ограниченной пропускной способности сети. Это правда? Хостинг сайта на другом типе экземпляра EC2 поможет увеличить пропускную способность сети? Вот как показатели networkIn и networkOut выглядели как при большой нагрузке.Как увеличить пропускную способность сети AWS EC2?
ответ
Да Amazon имеет концепцию ENI - Эластичный сетевой интерфейс. Пока вы можете добавить дополнительный экземпляр в экземпляр; он по-прежнему является логическим интерфейсом. Предоставление и доступность сетевого канала сильно зависит от выбранного вами типа экземпляра. У Amazon есть несколько типов/семейств экземпляров, таких как R, I, C, D, G - оптимизированы в памяти, IO, Compute, Dense Storage, GPU соответственно. Вы можете увидеть, можете ли вы сжать макс. из них.
Независимо от того, что когда-либо вы выбираете как тип экземпляра, вы по существу достигли порога и не смогли бы масштабироваться за определенную точку. Масштабируемость особенно уникальна по сравнению с другими факторами масштабируемости, такими как Memory/CPU.
Измените свою архитектуру и вместо того, чтобы иметь большой или большой экземпляр, есть несколько средних или больших экземпляров позади и ELB.
Спасибо. Любые другие мысли, основанные на моих комментариях выше? –
Как бы несколько экземпляров помогли, если вам еще нужно пройти балансировку нагрузки с аналогичными ограничениями или даже с меньшей пропускной способностью? (Предполагая, что вы все равно будете использовать экземпляр ec2, как ваш балансировщик нагрузки с чем-то вроде haproxy, установленным). – stepanian
Хотя это не бедро, масштабирование - жизнеспособное решение. ** Весь этот сайт и весь Stack Exchange ** работает только на [25 серверах] (http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25- серверы-и-i.html). Они заявили, что они могут работать только с одним веб-сервером, а их серверы имеют спецификации, очень похожие на c4.8xlarge (но с лучшим хранилищем). Я серьезно сомневаюсь, что они достигли предела вертикального масштабирования здесь, вероятно, это проблема конфигурации или кода, а не аппаратное ограничение. – BobMcGee
Если вы ограничены полосой пропускания, этот график станет плоским, когда вы достигнете предела. Кроме того, как отмечали другие, только 1 Мбайт/с и 3 МБ/с, и я могу сделать больше, чем на t2.micro для внешнего интернета.
Что делает система с каждым запросом? Вот список вещей, на которые я бы посмотрел, в порядке:
- Threading: существуют ли узкие места в вашем приложении, где только один поток может получить доступ к ресурсу? Это снизит загрузку процессора, но приведет к точному отображению шаблона.
- Плохие шаблоны параллелизма в вашем приложении или сервере. Загрузите тест и найдите его медленнее и медленнее, поскольку соединения увеличиваются, но ничего не делают.
- Индивидуальный процессор: один процессор загружен до 100%, в то время как другие в основном не работают? (с 30+ ядрами, насыщенный процессор будет давать вам только 3% использования ЦП). Один простаивающий CPU + другие в режиме ожидания обычно означает проблему параллелизма, возможно, при обработке соединения.
- Что такое использование памяти? Вы используете своп вообще? (это ОЧЕНЬ плохой знак, если это так, и вызовет проблему). Если использование памяти чрезмерно, часто происходит сбой в хранении в памяти или в пулах потоков обработчиков избыточного размера.
- Диск-входы/выходы или внешние сетевые запросы: читаете или пишете с каждым запросом? vmstat сообщит, если вы тратите много времени на ожидание обслуживания I/O. Если это так, я бы посмотрел на журнал прежде всего.
- В примерах c4.8xlarge используется только EBS, если хранилище магнитное и вы записываете журналы доступа, вы получаете несколько сотен записей в секунду. SSD общего назначения дает вам 3 IO/s на базу GB, но может лопнуть до 3000, пока у них не закончится IO-кредитов.
- ОС будет пытаться объединить записи, но с тысячами одновременных
Это не невозможно, но очень маловероятно, что вы могли бы быть упираются на сетевом уровне с созданием соединения или пакетов в секунду, если ваши запросы очень маленькие.
Ваш NetworkIn и Out на самом деле> 50 МБ/с. Если ваш процессор и память остались в разумных пределах, ваш экземпляр в порядке. Вы также должны проверить журнал соединений в своей базе данных (при условии, что вы используете RDB с вашей системой), замедление фактически может быть вызвано медленным ответом на вашу базу данных, что заставляет веб-сервер реагировать медленнее.
Кроме того, вы должны запустить вашу систему с помощью нагрузочного устройства AWS и установки и автоскалера с триггером в сети. Таким образом, вторичный экземпляр запускается, чтобы помочь в временном увеличении нагрузки в сети. Если основной причиной является увеличение соединения в вашей базе данных, тогда балансировка нагрузки не поможет в решении этой проблемы. Вместо этого вы хотите улучшить настройку кеша, поэтому на пользователя или пользователя на ваш сайт меньше нагрузки на пользователя.
- 1. Рассчитать пропускную способность сети
- 2. Как увеличить пропускную способность WebSocket
- 3. Как увеличить пропускную способность соединения для pgbouncer?
- 4. Как увеличить пропускную способность сообщения Faye
- 5. Как увеличить пропускную способность конвейера в nodejs?
- 6. Как вычислить латентность и пропускную способность сети
- 7. AWS EC2 или ELB issue
- 8. Как увеличить пропускную способность на сервере NodeJS с помощью кластера?
- 9. Как увеличить пропускную способность Boost ASIO, клиентское приложение UDP
- 10. Как узнать пропускную способность сети, используемую в данный момент времени?
- 11. Как определить пропускную способность сети для вызова сервера?
- 12. Как определить пропускную способность/скорость сети с помощью javascript?
- 13. Как надежно измерять пропускную способность сети, используемую процессом
- 14. проверить пропускную способность пользователя
- 15. Как установить пропускную способность DynamoDB
- 16. Как iperf вычислить пропускную способность
- 17. Вычислить пропускную способность
- 18. Как ограничить пропускную способность работников в imap_under?
- 19. Модуль ядра, чтобы получить дрожание сети и пропускную способность?
- 20. Java: измерять пропускную способность сети для определенного сегмента кода
- 21. Увеличение сети IO на EC2
- 22. Какую пропускную способность сети следует ожидать от GCE?
- 23. OSX на пропускную способность сети приложений через nettop
- 24. Увеличьте пропускную способность узла node.js http server
- 25. Как увеличить видеопамять на экземпляре AWS EC2?
- 26. Измерять пропускную способность журнала транзакций?
- 27. Как медленный запуск TCP увеличивает пропускную способность?
- 28. Измерьте пропускную способность в datanode
- 29. Прочитайте пропускную способность в DynamoDB
- 30. Низкая пропускная способность AWS Kinesis
Почему только один экземпляр? Можете ли вы масштабировать горизонтально? –
Я мог и могу быть. Я понимаю риски, связанные с одним экземпляром, но приложение имеет небольшую ценность для бизнеса, и это приемлемые риски. Это раз в год. Масштабирование по горизонтали в соответствии с ограничениями на процессор или память или хранилище понятно, но для этого требуется просто увеличить пропускную способность, похоже на облом. 200MB NetworkIn и 60MB NetworkOut кажется слишком низким, возможно, я ошибаюсь. И я даже не уверен, если это в секунду. AWS CloudWatch не указывает это четко. –
Хотя ваш экземпляр имеет сетевой интерфейс 10 Гбит, его неясно, что он должен быть способен достичь этой производительности от ec2 до интернета или если производительность ограничена межсетевой связью. На протяжении всего времени вы получаете около 1,8 Гбит/с с накладными расходами. Включили ли вы расширенные сети? http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html – datasage