Рекомендации по оптимизации затрат на код

Применяется к этой рекомендации по оптимизации затрат Azure Well-Architected Framework:

CO:11 Оптимизация затрат на код. Оцените и измените код в соответствии с функциональными и нефункциональными требованиями с меньшими или дешевыми ресурсами.

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

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

Определения

Термин Определение
Инструментирование кода Практика добавления фрагментов кода или библиотек в код, который собирает данные и отслеживает производительность кода во время выполнения.
Параллелизм Выполнение нескольких процессов одновременно.
Сериализация данных Процесс преобразования объектов данных в формат, который можно сохранить или передать, а затем восстановить их в исходной форме при необходимости.
Горячие пути Критические или часто выполняемые разделы программы, требующие высокой производительности и низкой задержки.

Ключевые стратегии проектирования

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

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

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

Инструментирование кода

Инструментирование кода — это практика добавления фрагментов кода или библиотек, которые собирают данные и отслеживают производительность кода во время выполнения. Она позволяет разработчикам собирать сведения о ключевых метриках, таких как потребление ресурсов (использование ЦП или памяти) и время выполнения. Инструментируя код, разработчики могут получать аналитические сведения о горячих путях кода, выявлять узкие места производительности и оптимизировать код для повышения эффективности и экономичности.

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

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

Компромисс. Средства мониторинга кода, скорее всего, увеличат затраты.

Определение и оптимизация горячих путей

Инструментируя код, можно измерить потребление ресурсов путями кода. Эти измерения помогают определить горячие пути. Горячие пути оказывают значительное влияние на производительность и использование ресурсов. Это критически важные или часто выполняемые разделы программы, для которых требуется высокая производительность и низкая задержка.

Чтобы определить горячие пути, рассмотрите следующие задачи:

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

  • Измерение производительности. Используйте средства профилирования или платформы тестирования производительности для измерения времени выполнения и потребления ресурсов путями кода. Это измерение помогает выявить узкие места и области для улучшения.

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

    Ознакомьтесь с рекомендациями по производительности, которые относятся к языку программирования, с которым вы работаете. Оцените код на соответствие этим рекомендациям, чтобы определить области для улучшения. Удалите все ненужные операции в пути кода, которые могут повлиять на производительность.

  • Удаление ненужных вызовов функций: проверьте код. Определите все функции, которые не являются необходимыми для требуемой функциональности и могут негативно повлиять на производительность. Например, если вызов функции выполняет проверку, которая произошла ранее в коде, можно удалить этот ненужный вызов функции.

  • Минимизация операций ведения журнала. Ведение журнала может быть полезно для отладки и анализа, но чрезмерное ведение журнала может повлиять на производительность. Оцените необходимость каждой операции ведения журнала и удалите все ненужные вызовы ведения журнала, которые не являются критически важными для анализа производительности.

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

  • Сокращение ненужной обработки данных. Проверьте код на наличие ненужных операций обработки данных, таких как избыточные вычисления или преобразования. Исключите эти ненужные операции, чтобы повысить эффективность кода.

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

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

    Минимизируя выделение ресурсов, можно повысить эффективность памяти и общую производительность. Используйте соответствующие стратегии управления памятью и сборки мусора для языка программирования.

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

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

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

Оценка использования параллелизма

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

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

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

    Определите компоненты кода или операции, которые можно выполнять асинхронно. Определите язык программирования или платформу, которую вы используете, и изучите асинхронную модель программирования, которую она поддерживает, например async/await в .NET или обещания в JavaScript.

    Реструктурируйте код для использования асинхронных программных конструкций, включив неблокировку выполнения задач. Отделяйте длительные операции или операции с интенсивным вводом-выводом от потока выполнения main с помощью асинхронных методов или обратных вызовов. Используйте асинхронные API или библиотеки, которые предоставляет язык программирования или платформа для обработки асинхронных рабочих процессов.

  • Многопоточность. При многопоточности одновременно выполняется несколько потоков одного процесса.

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

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

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

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

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

Использование правильных пакетов SDK

Для оптимизации затрат выберите пакеты SDK, предназначенные для оптимизации использования ресурсов и повышения производительности. Важно оценить функции и возможности каждого пакета SDK. Рассмотрите совместимость с языком программирования и средой разработки.

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

  • Тестирование производительности. Сравните использование ресурсов и производительность пакетов SDK с помощью тестирования производительности. Выберите пакет SDK, который лучше всего соответствует вашим потребностям с точки зрения оптимизации ресурсов и повышения производительности. Интегрируйте выбранный пакет SDK в базу кода, следуя предоставленной документации и рекомендациям.

  • Мониторинг использования ресурсов и оптимизация кода. Мониторинг использования ресурсов с помощью реализованного пакета SDK. Собирайте аналитические сведения из мониторинга и анализа для оптимизации кода.

Выбор подходящей операционной системы

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

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

  • Оцените свои требования. Ознакомьтесь с конкретными потребностями рабочей нагрузки, включая используемые языки программирования и платформы. Рассмотрите любые зависимости или интеграцию с другими системами.

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

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

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

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

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

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

Оптимизация обхода по сети

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

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

Оптимизация сетевых протоколов

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

Рассмотрите следующие рекомендации:

  • Выберите эффективные протоколы. Выберите протоколы, которые известны своей эффективностью с точки зрения скорости передачи данных и минимизации затрат. Например, рассмотрите возможность использования таких протоколов, как HTTP/2 и HTTP/1.1. Эти протоколы предназначены для повышения производительности за счет уменьшения задержки и оптимизации передачи данных. Для использования этих протоколов используйте библиотеки и платформы в приложении.

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

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

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

Минимизация сетевых издержек

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

Рассмотрим следующие методы:

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

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

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

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

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

    Формат сериализации Описание
    Буферы протоколов (protobuf) Формат двоичной сериализации, обеспечивающий эффективное кодирование и декодирование структурированных данных. Он использует типизированные файлы определения для определения структур сообщений.
    MessagePack Формат двоичной сериализации для компактной передачи по проводу. Он поддерживает различные типы данных и обеспечивает быструю сериализацию и производительность десериализации.
    Нотация объектов JavaScript (JSON) Широко используемый формат сериализации данных, удобный для восприятия и удобный для работы. JSON основан на тексте и имеет широкую кроссплатформенную поддержку.
    Двоичный JSON (BSON) Формат двоичной сериализации, аналогичный JSON, но предназначенный для эффективной сериализации и десериализации. BSON включает дополнительные типы данных, недоступные в JSON.

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

Оптимизация доступа к данным

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

Использование механизмов кэширования

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

Рассмотрим следующие механизмы кэширования:

  • Использование внешнего кэша. Одним из популярных решений для кэширования является сеть доставки содержимого. Это помогает свести к минимуму задержку и сократить обход по сети за счет кэширования статического содержимого ближе к потребителям.

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

  • Использование кэширования в памяти. Помимо внешних решений кэширования, рассмотрите возможность реализации кэширования в памяти в приложении. Кэширование в памяти может помочь использовать неактивные вычислительные ресурсы и увеличить плотность выделенных ресурсов.

Оптимизация трафика базы данных

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

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

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

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

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

  • Используйте платформу объектно-реляционного сопоставления (ORM): Используйте функции ORM, такие как отложенная загрузка, кэширование и пакетная обработка, чтобы оптимизировать получение данных и свести к минимуму кругоходы базы данных. Используйте платформы ORM, такие как Entity Framework для C# или Hibernate для Java.

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

Упорядочение данных

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

Ниже приведены некоторые методы эффективной организации данных.

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

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

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

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

Оптимизация архитектуры

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

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

Использование шаблонов проектирования

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

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

Шаблоны проектирования помогают оптимизировать код следующими способами:

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

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

  • Масштабируемость и производительность. Шаблоны проектирования помогают при проектировании масштабируемых и высокопроизводительных систем. Такие шаблоны, как шаблон Cache-Aside, могут повысить производительность за счет кэширования часто используемых данных, чтобы уменьшить потребность в дорогостоящих вычислениях или внешних вызовах.

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

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

Изменение конфигураций

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

Рефакторинг архитектуры

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

Изменение размеров ресурсов

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

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

Компромисс. Переделка кода и архитектуры может не соответствовать текущим расписаниям проекта и привести к скольжному сбою в планировании и стоимости.

Упрощение azure

Код инструментирования. Azure предоставляет средства мониторинга и ведения журнала, такие как Azure Monitor, Application Insights и Log Analytics. Эти средства можно использовать для отслеживания и анализа производительности и поведения кода в режиме реального времени.

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

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

Оптимизация обхода по сети. Различные службы Azure поддерживают высокоскоростные сетевые протоколы, такие как HTTP/2 и QUIC , для эффективного взаимодействия между службами и приложениями.

Службы Azure, такие как База данных Azure для PostgreSQL — гибкий сервер, поддерживают пул подключений.

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

Что касается сериализации данных, Azure поддерживает различные форматы сериализации, включая JSON и XML. Выберите подходящий формат сериализации в зависимости от размера данных, требований к производительности и требований к взаимодействию.

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

  • Индексирование и оптимизация запросов: Службы Azure, такие как база данных Azure SQL и Azure Cosmos DB, предоставляют возможности индексирования для оптимизации производительности запросов. Выбрав правильную стратегию индексирования и оптимизируя запросы, можно повысить общую эффективность извлечения данных.

  • Объектно-реляционное сопоставление (ORM). Azure поддерживает платформы ORM, такие как Entity Framework. Эти платформы упрощают доступ к данным и сопоставление между объектно-ориентированным кодом и реляционными базами данных или базами данных NoSQL.

  • Оптимизация хранимых процедур: Для создания и оптимизации хранимых процедур можно использовать службы Azure, такие как Azure SQL Database. Хранимые процедуры могут повысить производительность за счет сокращения круговых путей сети и предварительной компиляции инструкций SQL.

  • Секционирование и сегментирование: Azure предлагает возможности секционирования и сегментирования в таких службах, как Azure Cosmos DB и Azure SQL Database. Секционирование можно использовать для распределения данных между несколькими узлами для оптимизации масштабируемости и производительности.

  • Сжатие данных: Службы Azure поддерживают такие методы сжатия данных, как GZIP и DEFLATE.

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

Контрольный список для оптимизации затрат

Ознакомьтесь с полным набором рекомендаций.