Я много работаю над производительностью и масштабируемость, и я обнаружил, что:
Каждая загрузка приложения уникальна
Общие ответы, такие как «добавить больше оперативной памяти», получить другой сервер, «сделать у», «попробовать х», часто приносят разочарование и переходят к сложным настройкам.
Мера правильных вещей
Одна из самых больших проблем заключается в определении того, какие критерии важны. Это часто требует шага назад, и вы должны поставить себя на место вашего клиента. Иногда упрощенный дизайн сайта меняется и приводит к огромным преимуществам для веб-посетителя. Вот почему мне нравятся такие инструменты, как YSlow! которые сосредоточены больше на опыте конечного пользователя, а не на уровне сервера. Как только вы решите, какой эталонный тест для вашего сайта, вы можете приступить к настройке. Тестами могут быть общее время загрузки страницы, общий размер страницы, эффективность кэширования, задержка сайта и т. Д. Вы должны выбрать тот, который имеет смысл для вашего приложения.
Гайки и болты
Когда вы отслеживаете правильные ориентиры, начинайте с очень низкого уровня. Мне нравится использовать sysstat. Вы можете получить массу информации от sysstat и помочь разобраться, какая система может ограничивать общую производительность приложения. Как правило, я сводлю проблемы производительности в:
- Сетевой стек
- стек памяти
- диск io
- прикладной уровень
- ос слой
Используя sysstat и другие инструменты, вы можете начать разбивать волосы и найти систему, которая ограничивает производительность.
Например, я видел сбой высоконагруженных серверов из-за того, как было настроено их приложение. Плохое кэширование, отсутствие заголовков expires для статического контента, использование HTTP и файловых включений и т. Д. - все это способствовало снижению производительности приложения. Исправление этих проблем приложения не требовало никаких изменений оборудования. В других случаях я видел, что диски максимально загружены, несмотря на тонны кеширования. Переход на более быстрые диски устранил проблему.
Промыть и повторить
Часто во время настройки приложения вы устраняете одно узкое место, чтобы найти только другое. Вот почему я рекомендую пытаться контролировать то, что вы настраиваете.
Например, скажем, вы исправили проблему с дисковым вводом-выводом, но ваше приложение все еще работает медленно. Вы можете подумать, что потратили впустую свои усилия, но в результате вы попадаете в другое узкое место. Внимательно наблюдая за дисковым вводом-выводом, вы можете быть уверены, что улучшаете дисковый ввод-вывод, даже если ваши важные мониторы производительности приложений не меняются.
Получите правильные инструменты
Убедитесь, что вы используете правильные инструменты для работы. Мониторинг, тестирование, бенчмаркинг, профилирование и другие методы оптимизации имеют множество инструментов. Найдите инструмент, который лучше всего соответствует вашей ситуации.
Эмпирические правила
Хотя каждое приложение уникально, я нахожу несколько стандартных отправных точек:
- базы данных памяти любят память
- Диск все, кроме рейда 10 может убить производительность базы данных
- неправильные оптимизации - большие значения не приводят к большой производительности
- приложение - обвинять сервер в плохом дизайне приложения
Ваши следующие шаги
Если вы не найдете своего узкого места, добавление сервера может не сильно помочь. Для решения дискового ввода-вывода вам может понадобиться другой сервер или SAN. Если у вас есть узкое место оперативной памяти, другой сервер решит проблему только в том, что он добавляет больше оперативной памяти. Довольно дорогостоящий шаг по сравнению с простым добавлением ОЗУ на существующий сервер.
Быстрая починка
За развертывание. Я должен был сделать это, когда оказалось, что проблема в стеке приложений. В основном загружаются на ЦП, ОЗУ и дисковый ввод-вывод (RAID 10, 15K SCSI или SSD). Займитесь большим количеством оборудования, а затем начните настройку. Это держит вас на плаву, пока вы не решите проблемы.