Оценка затрат на основе потребления
В этой статье показано, как оценить затраты на план для планов размещения Flex потребления и потребления.
Функции Azure в настоящее время предлагает эти различные варианты размещения для приложений-функций, причем каждый вариант имеет собственную модель ценообразования плана размещения:
Планирование | Description |
---|---|
План потребления Flex | Вы оплачиваете время выполнения на экземплярах, на которых выполняются функции, а также все всегда готовые экземпляры. Экземпляры динамически добавляются и удаляются на основе количества входящих событий. Это рекомендуемый динамический план масштабирования, который также поддерживает интеграцию виртуальной сети. |
Премиум | Предоставляет те же функции и механизм масштабирования, что и план потребления, но с улучшенной производительностью и интеграцией виртуальной сети. Стоимость зависит от выбранной ценовой категории. Подробнее см. в статье План Функций Azure ценовой категории “Премиум”. |
Выделенный (Служба приложений) (уровень "Базовый" или выше) |
Если нужно работать на выделенных виртуальных машинах или в изоляции, использовать настраиваемые образы или избыточные возможности плана службы приложений. Использует обычное выставление счетов для плана службы приложений. Стоимость зависит от выбранной ценовой категории. |
Приложения-контейнеры | Создание и развертывание контейнерных приложений-функций в полностью управляемой среде, размещенной приложениями контейнеров Azure, которая позволяет запускать функции вместе с другими микрослужбами, API, веб-сайтами и рабочими процессами в качестве размещенных в контейнере программ. |
Потребление | Оплачивается только время выполнения приложения-функции. В этот план входит бесплатное предоставление разрешения для каждой подписки. |
Всегда следует выбрать вариант, который лучше всего поддерживает требования к функциям, производительности и затратам для выполнения функций. Дополнительные сведения см. в статье Масштабирование и размещение Функций Azure.
В этой статье рассматриваются планы потребления и потребления Flex, так как в этих планах выставление счетов зависит от активных периодов выполнения внутри каждого экземпляра.
Устойчивые функции также может выполняться в обоих этих планах. Дополнительные сведения о затратах при использовании устойчивых функций см. в статье Выставление счетов за устойчивые функции.
Затраты на основе потребления
Способ вычисления затрат на основе потребления, включая бесплатные гранты, зависит от конкретного плана. Сведения о самых текущих затратах и предоставлении предоставления см. на странице цен на Функции Azure.
Существует два режима, с помощью которых затраты определяются при запуске приложений в плане потребления Flex. Каждый режим определяется на основе каждого экземпляра.
Режим выставления счетов | Description |
---|---|
По запросу | При выполнении в режиме спроса плата взимается только за время выполнения кода функции на доступных экземплярах. В режиме спроса не требуется минимальное количество экземпляров. Счета выставляются за: • Общий объем памяти, подготовленной в то время как каждый экземпляр по запросу активно выполняет функции (в ГБ-секундах), минус бесплатный грант ГБ в месяц. • Общее количество выполнений, минус бесплатное предоставление (число) выполнений в месяц. |
Всегда готов | Можно настроить один или несколько экземпляров, назначенных определенным типам триггеров (HTTP/Durable/Blob) и отдельным функциям, которые всегда доступны для обработки запросов. Если у вас есть все готовые экземпляры, вам выставляются счета за: • Общий объем памяти, подготовленной во всех всегда готовых экземплярах, известных как базовый (в ГБ-секундах). • Общий объем памяти, подготовленной в течение каждого всегда готового экземпляра , активно выполняет функции (в ГБ-секундах). • Общее количество выполнений. В всегда готовых выставления счетов нет бесплатных грантов. |
Актуальные сведения о ценах на выполнение, всегда готовых базовых затрат и бесплатных грантах по запросу см. на странице Функции Azure цен.
Эта схема представляет, как затраты по запросу определяются в этом плане:
В дополнение к времени выполнения при использовании одного или нескольких всегда готовых экземпляров вы также оплачиваете по более низкой базовой ставке для количества всегда готовых экземпляров, которые вы обслуживаете. Время выполнения для всегда готовых экземпляров может быть дешевле, чем время выполнения экземпляров с выполнением по запросу.
Внимание
В этой статье цены по запросу используются для понимания примеров вычислений. Всегда проверяйте текущие затраты на странице цен Функции Azure при оценке затрат, которые могут возникнуть при выполнении функций в плане потребления Flex.
Рассмотрим приложение-функцию, состоящее только из триггеров HTTP и приведенных ниже основных фактов:
- Триггеры HTTP обрабатывают 40 постоянных запросов в секунду.
- Триггеры HTTP обрабатывают 10 одновременных запросов.
- Параметр размера памяти экземпляра —
2048 MB
. - Всегда готовые экземпляры не настроены, что означает, что приложение может масштабироваться до нуля.
В такой ситуации цены зависят от типа работы, выполняемой во время выполнения кода. Рассмотрим два сценария рабочей нагрузки:
Связанная с ЦП рабочая нагрузка. В рабочей нагрузке, привязанной к ЦП, нет преимуществ параллельной обработки нескольких запросов в одном экземпляре. Это означает, что вы лучше распределяете каждый запрос в свой собственный экземпляр, чтобы запросы выполнялись как можно быстрее без заполнения. В этом сценарии необходимо задать низкое параллелизм триггера
1
HTTP. С 10 одновременными запросами приложение масштабируется до устойчивого состояния примерно 10 экземпляров, и каждый экземпляр постоянно активно обрабатывает один запрос за раз.Так как размер каждого экземпляра составляет около 2 ГБ, потребление для одного постоянно активного экземпляра составляет
2 GB * 3600 s = 7200 GB-s
, что по предполагаемой частоте выполнения по запросу (без каких-либо бесплатных грантов) в$0.1152 USD
час на экземпляр. Так как приложение, привязанное к ЦП, масштабируется до 10 экземпляров, общее время выполнения составляет$1.152 USD
ежечасную частоту.Аналогичным образом плата за выполнение по запросу (без каких-либо бесплатных грантов) 40 запросов в секунду равна
40 * 3600 = 144,000
или 0,144 миллиона выполнений в час. Итоговый (бесплатный) почасовой стоимости выполнения составляет то0.144 * $0.20
, что в$0.0288
час.В этом сценарии общая почасовая стоимость выполнения по запросу на 10 экземпляров
$1.152 + $0.0288 = $1.1808 USD
составляет.Связанная с операцией ввода-вывода рабочая нагрузка. В рабочей нагрузке, связанной с операцией ввода-вывода, большая часть времени приложения тратится на ожидание входящего запроса, что может быть ограничено пропускной способностью сети или другими вышестоящими факторами. Из-за ограниченных входных данных код может обрабатывать несколько операций одновременно без негативных последствий. В этом сценарии предполагается, что можно обрабатывать все 10 одновременных запросов на одном экземпляре.
Поскольку расходы на потребление основаны только на памяти каждого активного экземпляра, вычисление платы за потребление просто
2 GB * 3600 s = 7200 GB-s
, что по предполагаемой частоте выполнения по запросу (без каких-либо бесплатных грантов) в$0.1152 USD
час для одного экземпляра.Как и в сценарии, связанном с ЦП, плата за выполнение по запросу (без бесплатных грантов) 40 запросов в секунду равна
40 * 3600 = 144,000
или 0,144 миллиона выполнений в час. В этом случае общий (бесплатный) почасовой стоимости выполнения0.144 * $0.20
, которая составляет$0.0288
час.В этом сценарии общая почасовая стоимость выполнения по запросу для одного экземпляра
$0.1152 + $0.0288 = $0.144 USD
.
Другие связанные затраты
При оценке общей стоимости выполнения функций в любом плане помните, что среда выполнения Функций Azure использует несколько других служб Azure, каждая из которых оплачивается отдельно. При оценке цен на приложения-функции все триггеры и привязки, которые вы интегрируете с другими службами Azure, требуют создания и оплаты этих других служб.
Для функций, выполняемых в плане потребления, общая стоимость — это стоимость выполнения функций, а также стоимость пропускной способности и других служб.
При оценке суммарных затрат для приложения-функции и связанных службы используйте Калькулятор цен Azure.
Связанные затраты | Description |
---|---|
Учетная запись хранения | Для каждого приложения-функции требуется связанная учетная запись хранения Azure общего назначения, которая оплачивается отдельно. Эта учетная запись используется внутри среды выполнения Функций Azure, но ее также можно использовать для триггеров и привязок службы хранилища. Если у вас нет учетной записи хранения, она будет создана для вас при создании приложения-функции. Дополнительную информацию см. в статье Требования учетных записей хранения. |
Application Insights | Функции Azure используют Application Insights для обеспечения высокопроизводительного мониторинга приложений-функций. Хотя это и не является обязательным, следует включить интеграцию Application Insights. Включено бесплатное предоставление данных телеметрии за каждый месяц. Дополнительные сведения см. на странице цен для Azure Monitor. |
Пропускная способность сети | Вы можете нести расходы на передачу данных в зависимости от направления и сценария перемещения данных. Дополнительные сведения см. на странице Цены для пропускной способности. |
Поведение, влияющее на время выполнения
Следующее поведение функций может повлиять на время выполнения:
Триггеры и привязки. Время, затрачиваемое на чтение входных данных из привязок функций и запись выходных данных в них, учитывается как время выполнения. Например, если функция использует выходную привязку для записи сообщения в очередь службы хранилища Azure, то время выполнения включает время, затраченное на запись сообщения в очередь, и это время учитывается при вычислении стоимости функции.
Асинхронное выполнение. Время, в течение которого функция ожидает результаты выполнения асинхронного запроса (
await
в C#), входит во время выполнения. Вычисление ГБ-с основано на времени начала и окончания функции и на использовании памяти за этот период. Что происходит в течение этого времени с точки зрения загрузки ЦП, на результат вычислений не влияет. Вы можете сократить затраты во время асинхронных операций с помощью Устойчивые функции. Время, потраченное на ожидание в функциях оркестратора, не учитывается при вычислении времени выполнения.
Просмотр данных, связанных с затратами
В счете можно просмотреть связанные с затратами данные Всего выполнений — функции и Время выполнения — функции, а также фактические оплачиваемые затраты. Однако эти данные счета представляют собой ежемесячное агрегирование данных за время, за которое выставляется счет.
Метрик уровня приложения-функции
Чтобы лучше понять затраты на функции, можно использовать Azure Monitor для просмотра метрик, связанных с затратами, которые в настоящее время создаются приложениями-функциями.
Используйте Обозреватель метрик Azure Monitor для просмотра в графическом формате данных, связанных с затратами на применение приложений-функций в плане "Потребление".
На портале Azure перейдите к своему приложению-функции.
На панели слева прокрутите вниз до раздела Мониторинг и выберите элемент Метрики.
В параметре Метрика выберите Function Execution Count (Число выполнений функций) и Сумма для параметра Агрегирование. В результате в диаграмму будет добавлена сумма числа выполнений за выбранный период.
Выберите Добавить метрику и повторите шаги 2–4, чтобы добавить в диаграмму Function Execution Units (Единицы выполнения функции).
Полученная диаграмма содержит итоговые результаты для обеих метрик выполнения за выбранный интервал времени, в данном случае равный двум часам.
Так как число единиц выполнения значительно превышает число выполнений, на диаграмме отображаются только единицы выполнения.
На этой диаграмме показано общее количество 1,11 млрд Function Execution Units
, потребленное за два часа и измеряемое в МБ-миллисекундах. Чтобы преобразовать в ГБ-секунды, разделите на 1024000. В этом примере приложение-функция потребило 1110000000 / 1024000 = 1083.98
ГБ-с. Можно взять это значение и умножить его на текущую цену времени выполнения, приведенную на странице цен для Функций Azure. В результате вы узнаете стоимость этих двух часов при условии, что все бесплатно предоставляемое время вычисления уже использовано.
Метрики уровня функции
Единицы выполнения функции — это сочетание времени выполнения и использования памяти, что делает эту метрику сложной для понимания использования памяти. Данные памяти не являются метрикой, доступной в настоящее время в Azure Monitor. Но, если нужно оптимизировать использование памяти приложением, можно использовать данные счетчиков производительности, собранные Application Insights.
Включите Application Insights в приложении-функции, если это еще не сделано. Если эта интеграция включена, можно запросить эти данные телеметрии на портале.
Для получения данных Azure Monitor можно использовать Обозреватель метрик Azure Monitor на портале Azure или интерфейсы REST API.
Определение используемого объема памяти
В разделе Мониторингвыберите Журналы (Аналитика), затем скопируйте следующий запрос телеметрии и вставьте его в окно запроса, после чего нажмите Выполнить. Этот запрос возвращает общий объем использованной памяти для выбранного времени.
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
Результаты должны выглядеть, как показано ниже:
Метка времени [UTC] | name | значение |
---|---|---|
12.09.2019, 1:05:14.947 | байт исключительного пользования | 209 932 288 |
12.09.2019, 1:06:14.994 | байт исключительного пользования | 212 189 184 |
12.09.2019, 1:06:30.010 | байт исключительного пользования | 231 714 816 |
12.09.2019, 1:07:15.040 | байт исключительного пользования | 210 591 744 |
12.09.2019, 1:12:16.285 | байт исключительного пользования | 216 285 184 |
12.09.2019, 1:12:31.376 | байт исключительного пользования | 235 806 720 |
Определение длительности
Azure Monitor отслеживает метрики на уровне ресурсов, что для функций соответствует уровню приложений-функций. Интеграция Application Insights обеспечивает предоставление метрик для каждой функции. Ниже приведен пример запроса аналитики для получения средней длительности выполнения функции:
customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name | averageDurationMilliseconds |
---|---|
QueueTrigger AvgDurationMs | 16.087 |
QueueTrigger MaxDurationMs | 90.249 |
QueueTrigger MinDurationMs | 8.522 |