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


Рекомендации по разработке фоновых заданий

Применяется к следующей рекомендации контрольного списка по достижению надежности Well-Architected в Power Platform:

RE:05 Повысьте устойчивость вашей рабочей нагрузки, внедрив обработку ошибок и обработку временных сбоев. Встройте в решение возможности обработки сбоев компонентов и временных ошибок.

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

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

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

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

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

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

Типы фоновых заданий

Вот несколько примеров фоновых заданий:

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

  • Пакетные задания, такие как ночное обновление данных или запланированная обработка.

  • Длительные рабочие процессы, такие как выполнение заказов или подготовка служб и систем.

  • Рабочие процессы, требующие асинхронной совместной работы, например утверждения.

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

Триггеры

Запустите фоновые задания с помощью следующих триггеров:

Триггеры, управляемые событиями

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

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

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

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

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

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

Заметка

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

Триггеры, управляемые событием

Таймер активирует управляемый расписанием вызов, который запускает фоновую задачу. Примеры триггеров, управляемых расписанием:

  • Фоновое задание запускается ежедневно или еженедельно и выполняет набор действий.

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

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

Результаты возврата

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

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

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

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

  • Настройте фоновую задачу так, чтобы она возвращала статус или обработанные данные обратно в пользовательский интерфейс.

Координация

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

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

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

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

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

Вопросы устойчивости

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

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

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

Замечания, связанные с масштабированием и быстродействием

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

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

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

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

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

Возможности в Power Platform

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

Power Automate

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

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

Снижайте риски с помощью планирования обработки ошибок.

Microsoft Dataverse

Вычисляемые столбцы и столбцы свертки Microsoft Dataverse:

  • Столбцы формул — это столбцы, которые отображают вычисленное значение в таблице Microsoft Dataverse.

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

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

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

Подключаемые модули — это настраиваемые обработчики событий, которые выполняются в ответ на определенное событие, возникающее во время обработки операции с данными Microsoft Dataverse.

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

Контрольный список надежности

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