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

Используйте балансировщик нагрузки как виртуальную машину или «голое железо»

Мы используем приложение, в котором одновременно работают около 300 пользователей. Теперь все виртуализировано: 1 виртуальная машина как балансировщик нагрузки, 2 виртуальные машины как веб-сервер (на этом хосте ESXi есть еще +25 других виртуальных машин) и 1 сервер (голый металл) как SQL Server. У нас возникли проблемы с производительностью, и мы решили купить физическое оборудование, чтобы повысить ее производительность.

Я не уверен, как мы можем улучшить производительность ?:

Пользователи подключаются к серверу через веб-интерфейс / настольное приложение.

Спасибо за помощь, drewo

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

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

По моему опыту, более половины проблем с производительностью можно было более или менее легко решить с помощью правильной настройки, а не путем увеличения аппаратных ресурсов. Большинство разработчиков и слишком много поставщиков не имеют возможности или ресурсов для тестирования своих приложений и серверной части базы данных с тем же объемом данных и такой же нагрузкой, что и в производственной среде, и они делают предположения и конструктивные решения, которые тоже не масштабируются. хорошо на практике.

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

Обратите внимание, что анализ производительности и настройка - это не только искусство, но и наука.

Очень распространенные проблемы приложений, которые можно легко решить и которые часто дают значительные преимущества:

  • отсутствующие индексы в базе данных
  • пул соединений и кеширование запросов
  • настройка лимитов памяти, количества подключений, сокетов и параллельных потоков приложений

Недостатки в дизайне приложения, которые труднее устранить, связаны с тем, что слишком много логики обработки данных находится во внешнем интерфейсе приложения, а запросы к базе данных слишком просты, несвязаны и возвращают слишком много данных (например, с SELECT * from GrowingDataSet ) - в вашем мониторинге симптомы могут быть самыми разными, например, высокая нагрузка на дисковый ввод-вывод на сервере базы данных - высокое потребление памяти на сервере приложений - перегруженные сетевые ссылки - каждый из которых может использоваться для поддержки различных решений о покупке оборудования (обновление на твердотельные накопители на сервере базы данных - увеличьте оперативную память на сервере приложений - обновите сеть), вероятно, ничего из этого не требуется, когда приложение начинает применять лучшую логику и разбиение на страницы в запросах.

Некоторые фрагменты информации, на которые вы должны найти ответ, прежде чем выбирать путь вперед:

Использование ЦП для затронутых ВМ

  • С точки зрения гостевой операционной системы, часто ли использование ЦП превышает 80% и / или показывает плато, а не всплески использования? Вероятно, у вашей виртуальной машины не хватает ЦП. Добавьте больше виртуальных ЦП (но подумайте о возможных проблемах с лицензированием).
  • Некоторые виртуальные ЦП на ваших серверах загружены значительно меньше, чем другие? У вас может быть проблема масштабирования в вашем приложении, когда простое добавление большего количества виртуальных ЦП в одну виртуальную машину (или на физическую машину) не поможет.
  • Сделайте CPU ready раз указывают, что хост был перегружен? Иногда вы видите практическое правило: вам нужно менее 5% среднего времени готовности, но мой опыт показывает, что даже это слишком много для системы, в которой вы действительно работаете. Обратите внимание, что если вы используете vCenter, указанное время готовности в миллисекундах с момента последнего обновления графика. В режиме реального времени график обновляется каждые 20 секунд (= 20000 мс), поэтому средний процент на ЦП для виртуальной машины можно рассчитать по формуле (indicated_ready_time * 100 / 20000) / number_of_vcpu.

Использование RAM

(Всегда следует проверять из гостевой операционной системы)

  • Обычно выше 80%? Добавьте памяти.
  • Признаки утечки памяти? Исправьте приложение или будьте готовы к перезапуску / перезагрузке чаще.
  • Признаки сильного обмена? Проверьте наличие проблем с конфигурацией. Добавьте памяти.
  • У вас есть ключевые приложения / процессы, которые «необъяснимо» используют менее 4 ГБ памяти? Возможно, их потребуется перестроить или перенастроить для использования 64-битной адресации.

Также проверьте производительность диска и сети на предмет проблем с задержкой.

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

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

Главный случай для виртуальных машин заключается в том, что ими проще управлять, проще создавать резервные копии и легче переносить их в случае сбоя системы. Они позволяют лучше использовать ваше оборудование при условии, что им фактически не требуются все ресурсы, которые вы можете им использовать, а если вы используете паравиртуализированные сетевые интерфейсы, связь между машинами на одном хосте будет настолько быстрой, насколько может управлять ЦП, а не ограничены скоростью физического сетевого интерфейса.

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