Рациональная методика назначения приоритетов ключевым операциям
В задачах по оптимизации производительности очень важным моментом является назначение очередности работ по оптимизации. Стандартный подход для этих целей предполагает простановку значений в колонку «Приоритет». Заказчики могут не понимать назначения данной колонки, совершенно справедливо утверждая: «Для нас все одинаково приоритетно».
После этого обычно им нужно объяснить, что работы по оптимизации, как правило, не выполняются параллельно: и из-за ограниченности ресурсов, и из-за взаимного обесценивания работ, и фактически приоритет — это очередность проведения работ и решения проблем по списку ключевых операций. Исходя из этого, рождается какой-то список операций с субъективно назначенными приоритетами, который затем используется в работе, если проектом кто-то управляет, или не используется, если эксперт предоставлен сам себе и имеет собственное представление о том, в какой очередности нужно решать проблемы. Разумеется, не надо считать, что это представление неадекватное, часто оно основано на таких объективных показателях, как минимальная трудоемкость выполнения работ («стратегия быстрых побед») или степень влияния на общий результат, и в целом результат может не пострадать. Плохо в этом то, что управляемость процессом отсутствует — вы запланировали одну очередность для работ, фактически она оказалась другой. Либо вы принудительно можете добиться управляемости процесса, но ошибки при формировании очереди приведут к тому, что до каких-то реально влияющих на результат операций дело или не дойдет вовсе, или дойдет гораздо позже, чем надо бы.
Рецепт предлагается искать в том, чтобы формировать приоритеты на основе объективной информации, рациональным способом. Это позволит как автоматически добиться от эксперта соблюдения очередности проведения работ (рациональное решение послужит надежным обоснованием для людей технического склада), так и избежать смещения важных работ на заведомо дальние сроки.
Способ, который предлагается для этого использовать, описан далее в примере.
На старте работ от заказчика получена таблица ключевых операций, приоритетов и целевого времени. Спустя некоторый срок операции, которые ни разу не были выполнены, из таблицы исключили, и таблица приобрела вид, представленный в таблице 1. В ней мы раскрасили первые три по очередности операции — красным цветом, вторые три — желтым, третьи — зеленым, остальные оставили без цвета. Фактически, это очередность заданий по оптимизации, в случае, если ее придется проводить, и среди этих заданий выделены наиболее приоритетные.
Таблица 1. Первоначальный приоритет операций
Спустя некоторое время была получена статистика по времени выполнения операций за период. Она приведена в Таблице 2. По ней сразу возникли вопросы. Например, реально ли так важна оптимизация в числе первой тройки для Операции_2, которая выполнилась всего 4 раза и имеет ничтожное время выполнения. Наверное, при ничтожных трудозатратах на оптимизацию на эту нестыковку можно было бы не обращать внимания, но трудозатраты на оптимизацию заранее не известны, а трудозатраты на расценку можно нормативно принимать примерно одинаковыми для всех операций, поэтому на самом деле нет никаких объективных оснований даже задачу расценки трудозатрат для нее проводить прежде остальных оставшихся. Это тот самый случай, когда эксперт, на практике, скорее всего, нарушит согласованную очередность, и с точки зрения результата окажется прав, но вот с точки зрения управления — управляемость процесса будет нарушена.
Таблица 2. Первоначальный приоритет и результаты фактического выполнения
Чтобы уйти от явных неувязок назначенных приоритетов с реальными обстоятельствами, потребовалось уточнение приоритетов. После уточнения в качестве приоритетов было предложено взять количество выполнения операций. Это стало первой точкой на пути к методике рационального назначения приоритетов. Статистика, отсортированная по уточненному приоритету, приведена в Таблице 3. По раскраске в двух столбцах слева видно, куда «ушли» первоначально поставленные в голову очереди операции.
Таблица 3. Переназначение приоритета по числу выполнений
К этой таблице на самом деле тоже есть вопросы, они вытекают из очередности в первой тройке: неочевидно, например, почему Операция_14 идет вперед Операции_15 по которой потери времени больше. А значит, можно попробовать в соответствии с рациональным подходом и эту очередность оптимизировать.
Для этого вторым, не менее важным шагом, стало применение основного принципа методики «БАБЛОКС». Этот принцип состоит в том, что ожидание пользователем реакции системы оплачивается его работодателем, а, следовательно, приоритетнее должны быть те операции, которые «обходятся дороже». У нас не было дополнительной информации по распределению заработной платы пользователей по операциям. В этом случае мы приняли ее равной для всех, поэтому множителем величины заработной платы в секунду оказалось возможным пренебречь. Для выявления более дорогих операций достаточно иметь данные о суммарном времени выполнения операций, а по нашей статистике — умножить среднее время операции на число ее выполнений. Статистика, отсортированная по этому новому приоритету, приведена в Таблице 4. По раскраске в трех столбцах слева видно, куда «ушли» первоначально поставленные в голову очереди операции, и куда — операции, назначенные по количеству выполнений.
Таблица 4. Переназначение приоритета по суммарному времени выполнения (по «оплате»)
Принцип подхода БАБЛОКС можно развить, если переформулировать задачу — минимизировать не общую «оплату» ожидания пользователем реакции системы, а «переплату» — т.е. перерасход времени сверх целевого. Вычитая из среднего времени целевое, и умножив эту разность на количество операций, получаем смещенное суммарное время (как и в предыдущей таблице, принимаем издержки по всем операциям равноценными и поэтому на стоимость оплаты секунды работы не умножаем). Бонусом к механизму — близкие к нулю и отрицательные значения смещенного суммарное времени сразу показывают операции, улучшение которых вообще не повлияет на средний результат.
Таблица 5. Переназначение приоритета по смещенному суммарному времени выполнения (по «переплате»)
Для движения дальше информации нет, поэтому можно остановиться.
Дальнейшее движение к новому рациональному решению возможно при поступлении дополнительной информации, а именно:
- расценок трудоемкости выполнения работ по оптимизации каждой из операций;
- расценок выполнения самих операций при выявлении явной и значимой неравномерности «стоимости ожидания» разных категорий пользователей.
В качестве заключительной иллюстрации — в Таблице 6 показано, в каком порядке выполнялись бы работы при жестком требовании сохранять первоначальный приоритет, и какую очередность имели бы операции, реально нуждающиеся в оптимизации и влияющие на результат.
Таблица 6. Сведения об очередности операций, реально нуждающихся в оптимизации и влияющие на результат при первоначальном порядке решения задач
Из этой таблицы в том числе видно, что иррациональное решение, принятое на начальном этапе, может не обеспечить (и в данном конкретном случае не обеспечивает) результата, приемлемого с точки зрения принципа Парето, так как оптимизация первых 20% очереди по первоначальному порядку не закроет 80% операций, которые реально нуждаются в оптимизации по данным собранной статистики.
Мы не считали принятый в отрасли показатель APDEX. Этот показатель является относительным, он не показывает реального влияния отдельной ключевой операции на работу всей системы в привязке к количеству выполненных операций. Поэтому он не может служить ориентиром для рационального назначения приоритетов, более того, сама методика APDEX предполагает, что приоритеты назначаются субъективно. О качестве таких решений как раз и можно судить по таблице 6.
В качестве дополнительной морали к данной статье.
Производительность системы –это процесс, требующий управления. Наивно предполагать, что во всех без исключения случаях достаточно заложить большой запас мощности оборудования, и дальше можно управлением не заниматься. Почти всегда это приводит к последствиям в стиле «тащить бегемота из болота», и чем мощнее «бегемот», тем дальше он «залезет», и тем дороже и тяжелее окажется его «вытаскивать». Организация сбора информации (статистики), принятие решение на основе информации (здесь — переназначение приоритетов, в других случаях — корректировка мощностей) — это элементы схемы оперативного управления, которыми для крупных систем нельзя пренебрегать, а напротив, надо учиться их грамотно и к месту использовать.
Филиппов Евгений