Снижение эффективности настройки производительности

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

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

Давайте признаем: настройка — весьма увлекательное занятие, которое быстро входит в привычку. Но когда вы тратите время на настройку, тестируете результат и снова возвращаетесь к настройке, процесс может превратиться в бесконечную «дыру», которая поглощает все ваше время и усилия с минимальной отдачей (или вовсе без нее). Бывают редкие прекрасные ситуации, когда изменение простого и очевидного параметра ускоряет работу системы, вы обнаруживаете параметр конфигурации MySQL, который удваивает размер кэша, или после тестирования выясняете, что установка размера окна TCP на уровне ядра ускоряет пересылку данных. Замечательно! Но как показано на рисунке, после каждой такой драгоценной находки количество оставшихся очевидных оптимизаций стремительно уменьшается.

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

Небольшой пример пояснит, чем производительность отличается от мощностей. Допустим, в Сан-Франциско живет мясник, который готовит самую восхитительную ветчину в штате Калифорния. Лавка мясника заключает договор с магазином в Сан-Хосе о поставке товара. Ежедневно ветчина должна доставляться из Сан-Франциско в Сан-Хосе на грузовиках, причем доставка должна занимать не больше часа. Мясник должен определить, сколько грузовиков и какого типа потребуется для доставки ветчины в Сан-Хосе. Спрос на ветчину в Сан-Хосе увеличивается. Делать лучшую ветчину в штате непросто, но таким трудностям можно только позавидовать. Трех имеющихся грузовиков пока хватает, но ожидается, что в ближайшие три месяца объем перевозок может возрасти вдвое. Как решить эту проблему?

  • Заставить грузовики ездить быстрее.
  • Купить дополнительные грузовики.

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

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

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