Почему бизнес переплачивает за серверы и как увеличить производительность без роста бюджета

Данил Редько

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

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

— Данил, давайте начнем с базового вопроса. Почему компании чаще всего решают проблему нагрузки через увеличение серверных мощностей?

— Потому что это самый очевидный и управляемый инструмент. Когда система перестает справляться, бизнесу нужно быстрое решение. Увеличение ресурсов – понятный шаг: он прогнозируем, его легко заложить в бюджет, и он дает быстрый эффект. Но здесь есть важный нюанс. Такое решение не требует анализа причин проблемы. Оно работает на уровне симптома, а не на уровне архитектуры. И именно поэтому в ряде случаев компании начинают масштабировать не производительность, а неэффективность.

— То есть проблема может быть не в объеме ресурсов?

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

— Можно ли увеличить производительность без роста инфраструктуры?

— Да, у нас был проект, связанный с обработкой данных о муниципальной инфраструктуре в Северной Америке. Система автоматически собирала и обрабатывала документы – в основном PDF-файлы: бюджеты, отчеты, планы развития. На момент моего подключения она обрабатывала около 200 тысяч документов в месяц. Перед командой стояла задача выйти на 2 миллиона – то есть увеличить объем примерно в 10 раз. Первое предложение было вполне логичным: масштабировать воркеры пропорционально нагрузке. Это означало рост инфраструктурных затрат с примерно 10 до 100 тысяч долларов в месяц.

— Почему вы решили не идти по этому пути сразу?

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

— В чем именно это выражалось?

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

— Как вы решили эту проблему?

— Мы пересмотрели архитектуру обработки. Во-первых, разделили задачи по типу и сложности, чтобы избежать конкуренции между разными классами нагрузки. Во-вторых, добавили приоритизацию, чтобы короткие задачи не блокировались длинными. Также внедрили батчинг для легких операций – это позволило повысить эффективность обработки без увеличения числа воркеров. По сути, мы не увеличивали ресурсы, а начали использовать их более рационально.

— Какой результат это дало?

— Пропускная способность системы увеличилась примерно в 10 раз. Она стала обрабатывать порядка 2 миллионов документов в месяц без увеличения инфраструктуры. При этом бюджет остался на прежнем уровне – около 10 тысяч долларов. Если сравнивать с первоначальным планом, это позволило избежать роста расходов примерно на 90 тысяч долларов ежемесячно.

— Насколько типична такая ситуация для индустрии?

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

— Как компаниям понять, что пора не масштабироваться, а оптимизировать?

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

— Вы работаете с системами под пиковые нагрузки. Там этот подход также применим?

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

— Какой главный вывод вы бы сформулировали для бизнеса?

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

Василий Черный