Поделиться через


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

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

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

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

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

Определения

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

Основные стратегии проектирования

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

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

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

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

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

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

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

Компромисс: средства мониторинга кода, скорее всего, повышают затраты.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выбор правильной операционной системы

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

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

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

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

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

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

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

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

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

Оптимизация сетевого трафика

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

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

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

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

Рассмотрим следующие предложения:

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

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

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

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

Минимизация затрат на сеть

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Настройка параметров кэширования: настройка параметров кэширования, таких как время жизни (TTL), для оптимизации преимущества кэширования при минимизации потенциальных недостатков. Настройка соответствующего 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, такие как База данных SQL Azure и Azure Cosmos DB, предоставляют возможности индексирования для оптимизации производительности запросов. Выбрав правильную стратегию индексирования и оптимизируя запросы, вы можете повысить общую эффективность извлечения данных.

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

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

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

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

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

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

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