Чистый код – чистая планета: Практики энергоэффективной разработки

Чистый код – чистая планета: Практики энергоэффективной разработки

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

Все мы знаем примеры, когда компании оптимизируют свои затраты на электроэнергию за счет оптимизации IT-инфраструктуры:

  • Внедрение виртуализации - уменьшение числа физических серверов, что значительно повышает коэффициент использования оборудования.
  • Приобретение энергоэффективного оборудования (например, замена HDD на SSD или покупка блоков питания с высоким коэффициентом энергоэффективности). Использование современных технологий позволяет уменьшить счета за электроэнергию.
  • Оптимизация систем охлаждения и внедрение рециркуляции тепла, вырабатываемого дата-центрами.
  • Перенос части вычислений в публичные облака - крупные провайдеры обычно используют более энергоэффективные дата-центры с оптимизированными системами охлаждения и высоким коэффициентом использования оборудования.

Но что, если внедрение определенных архитектурных практик и подходов к разработке также позволит нам увеличить энергоэффективность разрабатываемых нами программных систем?

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

Практики и подходы энергоэффективного программирования

Какие же подходы и практики позволят нам сделать наш код энергоэффективным?

Первый ответ, который приходит на ум - практики энергоэффективности, которые применяют разработчики программного обеспечения для мобильных устройств и встраиваемого ПО (IoT):

  • Lazy Loading (Ленивая загрузка) - загрузка компонентов и библиотек только тогда, когда они нужны.
  • Кэширование - уменьшение количества вызовов к энергозатратной памяти (HDD) за счет использования более дешевой памяти.
  • Open Only When Necessary - открытие ресурсов (сетевые соединения, файловые дескрипторы, потоки) только тогда, когда они необходимы.
  • Оптимизация сетевых запросов - уменьшение и оптимизация сетевых запросов (как REST HTTP, так и запросов к базам данных) и снижение объема запрашиваемых данных снижает нагрузку на серверы и сетевое оборудование.
  • Batch обработка - группировка мелких операций в одну крупную для снижения накладных расходов.
  • Асинхронная обработка - использование асинхронной и событийно-ориентированной архитектуры позволит заменить постоянные опросы серверов на асинхронные веб-хуки и push-уведомления.
  • Эффективные алгоритмы - использование алгоритмов с меньшей вычислительной сложностью.
  • Ограничение фоновой активности.

Если рассуждать на уровне архитектуры систем, то можно попробовать сформулировать следующие принципы, которые позволят сделать системы энергоэффективными:

  • Внедрение serverless-архитектуры - запускаем приложения тогда, когда они нужны.
  • Настройка динамического масштабирования - увеличиваем количество экземпляров приложения тогда, когда это нужно.
  • Внедрение эффективных и оптимизированных фреймворков - используем низкоуровневые языки программирования и отказываемся от фреймворков, что позволит уменьшить время обработки и нагрузку на сервера (тут, конечно, палка о двух концах).

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

Чистый код - чистое небо!

А вы задумывались на счет энергоэффективности кода и приложения (если, конечно, не работаете над встраиваемым ПО)?

Сталкивались ли с практиками энергоэффективного программирования? Может, у вас в компании есть какие-то KPI/OKR на этот счет?

Немного ссылок с интересными исследованиями:

2 комментария