ВЕЛИКИЙ ОПТИМИЗАТОР

Продолжаем серию статей, посвященных профессиям в IT-сфере. Работа над проектом включает множество специальностей, и у каждого человека есть свой круг задач. Однако картина не была бы полной, не упомяни мы о Performance Optimization Engineer (инженер по оптимизации производительности ПО).

Главное-производительность!

Важной характеристикой качества любого программного продукта, как и любого продукта вообще, является его производительность. Для информационных систем под производительностью понимают количество полезной работы выполненной системой по отношению к затраченному на это времени и ресурсам. Чем сложнее информационная система, тем продуманнее должны быть методики и подходы к обеспечению ее надлежащего уровня. Оптимизация производительности программного обеспечения (Software Performance Engineering) является неотъемлемой частью разработки ПО. Оно включает в себя совокупность ролей, процессов, умений, задач, практик, инструментов и аналитических результатов, соответствующих  каждой из фаз жизненного цикла информационной системы, направленных на то, чтобы разрабатываемое, внедряемое и сопровождаемое приложение отвечало предъявляемым к нему требованиям в данной части. Хочу подчеркнуть, что объектом применения является информационная система в целом, а не только алгоритмические или математические способы  кодирования отдельного метода либо процедуры.

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

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

Что касается компании EPAM Systems, то она, как минимум, находится на уровне 2. Кроме того, для некоторых заказчиков наши сотрудники работают как offshore команда в  структурах относящиеся к более высоким уровням.  

Правильная организация Software Performance Engineering позволяет бизнесу достичь следующих целей:

  • — Увеличить его эффективность за счет гарантии, что система сможет обрабатывать транзакции в пределах установленного временного интервала.
  • — Предотвратить сбои или простои информационной системы, обусловленные ее недостаточной производительностью.
  • — Избежать задержек с развертыванием системы в промышленную эксплуатацию из-за ее недостаточной эффективности.
  • — Предупредить необходимость переделки частей или компонентов системы вследствие позднего выявления проблем с производительностью.
  • — Не нести дополнительных издержек на отладку и настройку системы.
  • — Избежать приобретения «излишнего» оборудования.
  • — Уменьшить стоимость обслуживания системы во время ее промышленной эксплуатации за счет сокращения затрат на поиск и устранение дефектов, связанных с производительностью.

Процесс оптимизиции

В зависимости от объема и сложности проекта, в нем может участвовать как один специалист, так и команда из нескольких человек.

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

Нагрузочное тестирование — подход, применяемый для  имитации на тестовом стенде систем, предназначенных для массового использования. Позволяет получить количественные оценки производительности системы, оценить используемые ресурсы, а также выявить возможные «узкие места».

Профайлинг — метод, применяемый для исследования поведения программы/системы на основе информации, собираемой во время ее работы.

Оптимизация — это процесс модификации системы с целью улучшения некоторых аспектов ее работы либо уменьшения количества используемых ресурсов.

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

  • Планирование — определение целей, критериев, условий. Определение времени и ресурсов, согласование с другими активностями в проекте, выбор стратегии и инструментов.
  • — Подготовка тестового стенда и разработка скриптов для автоматизированного тестирования.
  • Выполнение тестов, мониторинг и сбор как статистической, так и аналитической информации
  • Анализ полученных результатов, поиск проблем и узких мест, обсуждение их с командой разработчиков, менеджером проекта, с заказчиками.
  • — Поиск возможностей оптимизации, настройка системы, проверка изменений и исправлений. Углубленное исследование компонентов системы с помощью профайлеров.
  • — Подготовка отчетной и аналитической информации для менеджмента проекта, для разработчиков, а также для последующего применения в рамках Software Performance Engineering.

Приведу показательный пример. Клиент пришел с готовым продуктом, разработанным сторонним исполнителем. Наши сотрудники провели исследование системы, которое показало, что для эффективной производительности системы необходимо 20 дорогостоящих серверов (промышленного уровня). Затем разработчики, основываясь на нашем анализе, целенаправленно вносили изменения в продукт. Состояние производительности отслеживалось в ходе всего цикла разработки. Специалист POE выезжал на площадку заказчика на этапе предварительного развертывания системы на арендованном оборудовании, участвовал в ее настройке на месте, а также в разрешении выявленных проблем. В результате мы получили подтверждение, что достаточно будет 4-х машин. Еще две машины оставили в резерве для обучения персонала и тестирования. Вот так отдел POE существенно сэкономил бюджет заказчика, и в очередной раз доказали, что EPAM Systems производит только качественные продукты.

Хочу все оптимизировать

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

  • — сертифицированные курсы/тренинги разработанные производителями специализированного ПО и их партнерами;
  • — ряд американских и индийских вузов предлагают курсы, своего рода «повышения квалификации», для освоения методик, процессов и, отчасти, инструментов;
  • — специализированные конференции и симпозиумы.

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

Практика показывает, что наиболее успешными специалистами в области оптимизации производительности становятся те, у кого была возможность воспринимать разрабатываемые или внедряемые системы «в целом» и «в перспективе» — системные администраторы, DBA, специалисты служб поддержки.

Как может выглядеть идеальный специалист в области Software Performance Engineering?  На взгляд признанных «гуру», список выглядит примерно так:

Технические навыки

— специалист должен обладать широкими общими знаниями о концепциях, технологиях и тенденциях развивающихся в IT. Это включает как опыт инсталляций различных типов операционных (Windows, Linux и т.д.) систем и продуктов «с нуля», так и развертывания сетей и коммуникаций. То есть, при необходимости, он должен суметь построить собственный Test Environment (испытательный стенд).

— Основы сетей и коммуникаций. Специалист должен понимать модель OSI, стек TCP/IP, то, как функционируют DNS, DHCP, WINS, Маршрутизаторы/Коммуникаторы/Хабы и прочее оборудование. В работе часто приходится применять анализаторы сетевого трафика (sniffers) для определения узких мест, поэтому нужно разбираться, что именно анализируется.

Протоколы — как минимум необходимо уметь легко создавать тестовые скрипты для протоколов применяющихся в конкретном проекте. В идеале, нужно иметь в своем арсенале несколько наиболее распространенных протоколов, таких как HTTP, Com, Winsock, Citrix. Невозможно предсказать, с чем придется столкнуться в каждом новом проекте.

— Если быть откровенным, то не требуется быть специалистом экстракласса по написанию кода. Достаточно быть способным, глядя на код HTML, ASP, JSP, Java или любого другого, понять идеи и способы реализации логики. В реальной жизни приходится больше иметь дела с проблемами скриптов для автоматизированного тестирования, чем с определением узких мест в коде, но, безусловно, чем лучше понимание кода, тем больше чудес в нем можно обнаружить.

— СУБД/SQL (запросы, хранимые процедуры, индексы, администрирование, и прочее.). Базы данных всегда располагаются в первых строчках списка источников проблем с производительностью в сложных системах.

— Способность видеть «всю картину» — должен понимать свою роль в жизненном цикле создания программного продукта. Необходимо разбираться, чем занимаются разработчики, менеджеры проекта, бизнес аналитики, тестировщики и как с ними взаимодействовать. К сожалению, существует масса специалистов, которые отказываются даже взглянуть за пределы своей технической специализации и понять, как их работа влияет на всю команду.

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

Не-технические навыки

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

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

— Хороший инженер всегда консультант, даже если клиент «внутренний». Если он не станет относиться к каждому, как клиенту, то будет обречен на постоянные сражения с командой разработчиков.

— Для организации эффективной работы необходимо обладать хорошими коммуникативными способностями. Независимо от реального качества разрабатываемого продукта, Performance Optimization Engineer  должен строить свою работу с остальной командой таким образом, чтобы она воспринимала его как опору, а не как «шлагбаум».

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

Рынок труда в области Software Performance Engineering характеризуется постоянным неудовлетворенным спросом. Причем это имеет место не только у нас, но и в мире — не хватает квалифицированных специалистов. Это относится как к компаниям  производящим ПО, так и к тем, кто специализируется на сервисах и консалтинге.

С точки зрения карьерного роста есть несколько возможностей. Количество, многообразие задач, а также развитие технологий совершенствовать собственный уровень знаний, становясь все более ценным сотрудником. Сложные и объемные проекты могут потребовать организации команды специалистов — здесь появляется возможность реализовать себя в качестве менеджера. Если же от работы в области Оптимизация Производительности нет полного удовлетворения, все-таки, всегда присутствует возможность переключиться на смежные специализации — администрирование систем, техническую поддержку, функциональное тестирование и QA.

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

Ресурсы

Я советую познакомиться со специализированными инструментами.

Freeware и open-source продукты:

Коммерческие продукты:

Литература:

  • — "Performance Testing Guidance for Web Applications", (J.D. Meier, Carlos Farre, Prashant Bansode, Scott Barber, Dennis Rea)
  • — "Integrated Approach to Web Performance Testing: A Practitioner s Guide" (B. M. Subraya, ISBN: 1-59140-785-0 ),
  • — "Performance Evaluation and Benchmarking" ("Lizy Kurian John, Lieven Eeckhout " ISBN: 0-8493-3622-8)

Полезные ресурсы  в Сети:

Вместо заключения

Развитие IT индустрии связано с постоянным поиском и внедрением новых продуктов, технологий. Да и от имеющиеся систем, как правило, не спешат отказываться, стремясь интегрировать их с новыми разработками. Все это требует от специалистов применения системного подхода, умения быстро адаптироваться, расширять свой технический кругозор и арсенал применяемых инструментов. Если ваше кредо — исследователь и есть стремление быть одним из немногих, то поле для деятельности на данный момент практически необъятное.

Об авторе:

Олег Богачук
1992 — закончил БГУИР, АСОИиУ
1992 — 1999 работал программистом в компаниях Newbridge Systems, Экософт, CompIT Systems
1999 -программист, EPAM Systems
2000 — Performance Optimization Engineer, EPAM Systems
04.22.08 "Мой Компьютер", (c) EPAM Systems