Огромное количество операций очереди класса 2 с функцией Durable

Я создал свою первую большую функцию Durable в Azure, она выполняет около 12 функций действий для каждой страницы документа. На днях обработал максимум 5000 страниц. Я понимаю, что каждое действие помещает элемент в рабочие элементы Q, поэтому теоретически я написал 60 тыс. Сообщений очереди, которые также необходимо было прочитать, так что это 120 тыс. Действий.

Хранилище GPv2 LRS в Северной Европе стоит 0,003 фунта стерлингов / 10 тыс. Действий класса 2 Q

Таким образом, это 12 * 0,003 фунта стерлингов = 3,6 пенса, однако моя подписка показывает действия класса 2 Q стоимостью более 90 пенсов, что эквивалентно операциям 3M Q или 600 действиям Q на страницу. Это было значительно больше, чем мои вычислительные затраты по плану потребления за тот же период, которые составляли 29 пенсов за рассматриваемый день. Я ценю, что есть и другие сообщения, которые нужно поместить в Q, но я не ожидал такого количества!

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

Ценю любую информацию, так как я люблю надежные функции, но стоимость хранения начинает становиться непомерно высокой! Я собираюсь перейти на v1, чтобы сократить расходы, но все же хотел бы понять это, чтобы знать, является ли это просто стоимостью функций или я делаю что-то неэффективное в своих функциях.

НАИБОЛЕЕ ПОЛЕЗНОЕ ОБНОВЛЕНИЕ 3

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

Примерная обработка между 10:31 и 10:43, за это время я увидел из файла журнала:

203 PutMessage (which makes sense)
203 DeleteMessage

7868 GetMessage - all from the workitems queue

26445 GetMessages - all from the control queues, breakdown was
control-00 - 6217
control-01 - 6375
control-02 - 5134
control-03 - 8719

В остальном я оставил приложение бездействующим (по плану потребления), и каждый час я вижу примерно:

3500 - GetQueueMetadata - 700 against each Q, control 00-03 and workitems
3500 - PeekMessage - 700 against each Q, control 00-03 and workitems

(Возможно, здесь отсутствовал окончательный журнал, я думаю, что он опрашивает каждый из 5 Q с каждым типом сообщения каждые 10 секунд, так что будет 3600 Q действий в час, не уверен, почему ему нужно опросить Qs элемента управления и рабочего элемента, если ничего не отправлено в обработку?)

Мне кажется, что происходит чрезмерное количество запусков GetMessage и GetMessages, в то время как функция на самом деле что-то делает, просматривая журналы, я могу предоставить журналы, если это поможет диагностировать проблему.

(если это актуально, количество экземпляров увеличилось с 0 до 8 к моменту его завершения, интересно, есть ли корреляция между экземплярами и обилием Q-запросов)

ОБНОВЛЕНИЕ 1

Итак, я выполнил следующее, которое, как я надеюсь, даст мне все вызовы функций за рассматриваемый день:

let start = datetime(2018-06-12T00:00:00);
traces
| where timestamp > start and timestamp < start + 24h
| where message startswith "function started" 
| summarize count()

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

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

Q Транзакции

Кажется, смехотворное количество чтения Q? Просто чтобы проверить, я тоже посмотрел, и объем сообщений на Q и 25K кажется примерно правильным:

Сообщения

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

NB: Глядя на графики, я замечаю, что данные за 13-е кажутся более разумными, я не думаю, что изменил что-либо существенное, кроме возможного включения выборки для анализа приложений, поскольку это генерировало много данных!

ОБНОВЛЕНИЕ 2. Вчера в новой учетной записи хранения v1 наблюдаются аналогичные огромные числа обработанных 8-килобайтных страниц.

введите здесь описание изображения


person Simon    schedule 13.06.2018    source источник


Ответы (2)


Такой порядок значений для очередей кажется немного странным.

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

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

person Chris Gillum    schedule 15.06.2018
comment
Обновлено с некоторыми дополнительными данными - person Simon; 15.06.2018

Не уверен, что вы двинулись дальше.

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

Можно попробовать обновить до v1.7 если еще не сделали. Посмотрите, решит ли это проблему.

person Madushan    schedule 03.12.2018
comment
Спасибо, я подписался на репозиторий git для надежных функций, поэтому я видел, как это происходит, спасибо. - person Simon; 05.12.2018