Оқиға
AI бағдарламалары мен агенттерін құру
Mar 17, 9 PM - Mar 21, 10 AM
Нақты пайдалану жағдайлары негізінде масштабты ИСК шешімдерін құру үшін стипендиаттармен және сарапшылармен кездесу сериясына қосылыңыз.
Қазір тіркелуБұл браузерге бұдан былай қолдау көрсетілмейді.
Соңғы мүмкіндіктерді, қауіпсіздік жаңартуларын және техникалық қолдауды пайдалану үшін Microsoft Edge браузеріне жаңартыңыз.
Центр задач в Устойчивых функциях — это представление текущего состояния приложения в хранилище, включая все ожидающие задания. Во время работы приложения-функции ход выполнения оркестрации, действий и функций сущностей постоянно сохраняется в центре задач. Это гарантирует, что приложение сможет возобновить обработку с того места, в котором оно было остановлено, если его потребуется перезапустить после временной остановки или прерывания работы по любой причине. Кроме того, это позволяет приложению-функции динамически масштабировать рабочие роли вычислений.
Фактически в центре задач хранятся следующие сведения:
Разница между сообщениями о действиях и сообщениями экземпляров заключается в том, что сообщения о действиях представляют собой сообщения без отслеживания состояния и поэтому могут обрабатываться в любом месте, а сообщения экземпляров должны быть доставлены в определенный экземпляр с отслеживанием состояния (оркестрация или сущность), определяемый по идентификатору экземпляра.
Внутри каждого поставщика хранилища может использоваться собственная организация для представления состояний и сообщений экземпляра. Например, в очередях службы хранилища Azure сообщения сохраняются поставщиком службы хранилища Azure, а в реляционных таблицах сообщения сохраняются поставщиком MSSQL. Эти различия не имеют значения для структуры приложения, но некоторые из них могут повлиять на характеристики производительности. Мы обсудим их в разделе Представление в хранилище ниже.
Сообщения о действиях и сообщения экземпляров в центре задач представляют задачи, которые должно обработать приложение-функция. Приложение-функция непрерывно извлекает рабочие элементы из центра задач во время своей работы. Каждый рабочий элемент обрабатывает одно или несколько сообщений. Различаются два типа рабочих элементов:
Рабочие роли могут одновременно обрабатывать несколько рабочих элементов в соответствии с настроенными ограничениями параллелизма для каждой рабочей роли.
Когда рабочая роль завершает обработку рабочего элемента, она отправляет результаты обратно в центр задач. Эти результаты зависят от типа выполняемой функции:
Для оркестрации каждый рабочий элемент представляет один из эпизодов выполнения оркестрации. Эпизод начинается, когда имеются новые сообщения для обработки оркестратором. Такое сообщение может указывать на то, что откестрация должна начаться, или на то, что действие, вызов сущности, таймер или подокрестрация завершены, либо может представлять внешнее событие. Сообщение активирует рабочий элемент, позволяющий оркестратору обрабатывать результат и продолжать работу со следующим эпизодом. Этот эпизод заканчивается, когда оркестратор либо завершается, либо достигает точки, в которой он должен ожидать новых сообщений.
Рассмотрим оркестрацию развертывания и объединения, которая запускает два действия в параллельном режиме и ожидает завершения обоих действий:
[FunctionName("Example")]
public static async Task Run([OrchestrationTrigger] IDurableOrchestrationContext context)
{
Task t1 = context.CallActivityAsync<int>("MyActivity", 1);
Task t2 = context.CallActivityAsync<int>("MyActivity", 2);
await Task.WhenAll(t1, t2);
}
После того как эта оркестрация инициируется клиентом, она обрабатывается приложением-функцией в виде последовательности рабочих элементов. Каждый завершенный рабочий элемент обновляет состояние центра задач при фиксации данных. Шаги описаны ниже.
Клиент запрашивает запуск новой оркестрации с идентификатором экземпляра "123". После завершения этого запроса клиент содержит заполнитель состояния оркестрации и сообщение экземпляра:
Метка ExecutionStarted
является одним из нескольких типов событий журнала, которые определяют различные типы сообщений и событий, участвующих в журнале оркестрации.
Рабочая роль выполняет рабочий элемент оркестратора для обработки сообщения ExecutionStarted
. Она вызывает функцию оркестратора, которая начинает выполнение кода оркестрации. Этот код планирует два действия, а затем останавливает выполнение при ожидании результатов. После того как рабочая роль фиксирует этот рабочий элемент, центр задач содержит следующее:
Теперь среда выполнения находится в состоянии Running
, добавлены два новых сообщения TaskScheduled
, а журнал содержит пять событий: OrchestratorStarted
, ExecutionStarted
, TaskScheduled
, TaskScheduled
, OrchestratorCompleted
. Эти события представляют собой первый эпизод выполнения оркестрации.
Рабочая роль выполняет рабочий элемент действия для обработки одного из сообщений TaskScheduled
. Она вызывает функцию действия с входными данными "2". После завершения функции действия она создает сообщение TaskCompleted
, содержащее результат. После того как рабочая роль фиксирует этот рабочий элемент, центр задач содержит следующее:
Рабочая роль выполняет рабочий элемент оркестратора для обработки сообщения TaskCompleted
. Если оркестрация по-прежнему находится в кэше в памяти, она может просто возобновить выполнение. В противном случае рабочая роль сначала воспроизводит журнал, чтобы восстановить текущее состояние оркестрации. Затем она продолжает оркестрацию, предоставляя результат действия. После получения этого результата оркестрация по-прежнему ожидает результата другого действия, поэтому она еще раз останавливает выполнение. После того как рабочая роль фиксирует этот рабочий элемент, центр задач содержит следующее:
Журнал оркестрации теперь содержит еще три события: OrchestratorStarted
, TaskCompleted
, OrchestratorCompleted
. Эти события представляют собой второй эпизод выполнения оркестрации.
Рабочая роль выполняет рабочий элемент действия для обработки оставшегося сообщения TaskScheduled
. Она вызывает функцию действия с входными данными "1". После того как рабочая роль фиксирует этот рабочий элемент, центр задач содержит следующее:
Рабочая роль выполняет другой рабочий элемент оркестратора для обработки сообщения TaskCompleted
. После получения второго результата оркестрация завершается. После того как рабочая роль фиксирует этот рабочий элемент, центр задач содержит следующее:
Теперь среда выполнения находится в состоянии Completed
, а журнал оркестрации содержит еще четыре события: OrchestratorStarted
, TaskCompleted
, ExecutionCompleted
, OrchestratorCompleted
. Эти события представляют собой третий и последний эпизод выполнения оркестрации.
Последний журнал этого выполнения оркестрации содержит 12 событий: OrchestratorStarted
, ExecutionStarted
, TaskScheduled
, TaskScheduled
, OrchestratorCompleted
, OrchestratorStarted
, TaskCompleted
, OrchestratorCompleted
, OrchestratorStarted
, TaskCompleted
, ExecutionCompleted
, OrchestratorCompleted
.
Ескерім
Показанное расписание не является единственным: существует несколько различных возможных расписаний. Например, если второе действие завершается раньше, то оба сообщения экземпляров TaskCompleted
могут обрабатываться одним рабочим элементом. В этом случае журнал выполнения немного короче, поскольку существует только два эпизода, и он содержит следующие 10 событий: OrchestratorStarted
, ExecutionStarted
, TaskScheduled
, TaskScheduled
, OrchestratorCompleted
, OrchestratorStarted
, TaskCompleted
, TaskCompleted
, ExecutionCompleted
, OrchestratorCompleted
.
Теперь давайте рассмотрим, как создаются или удаляются центры задач, как правильно использовать центры задач при выполнении нескольких приложений-функций и как можно проверить содержимое центров задач.
Пустой центр задач со всеми необходимыми ресурсами автоматически создается в хранилище при первом запуске приложения-функции.
Если используется поставщик службы хранилища Azure по умолчанию, дополнительная настройка не требуется. В противном случае выполните инструкции по настройке поставщиков хранилища, чтобы убедиться в том, что поставщик хранилища может правильно подготовить ресурсы хранилища, необходимые для центра задач, и получить доступ к этим ресурсам.
Ескерім
Центр задач не удаляется автоматически при остановке или удалении приложения-функции. Если вы больше не хотите хранить эти данные, необходимо удалить центр задач, его содержимое или содержащую его учетную запись хранения вручную.
Шайпұл
В сценарии разработки часто может потребоваться перезапуск из чистого состояния. Чтобы сделать это быстро, можно просто изменить настроенное имя центра задач. Это приведет к принудительному созданию нового пустого центра задач при перезапуске приложения. Помните, что старые данные в этом случае не удаляются.
Если несколько приложений-функций совместно используют учетную запись хранения, то каждому приложению-функции необходимо предоставить отдельное имя центра задач. Это требование также применяется к промежуточным слотам, каждый из которых должен быть настроен с уникальным именем центра задач. Одна учетная запись хранения может содержать несколько центров задач. Это ограничение обычно касается других поставщиков хранилища.
На следующей схеме изображен один центр задач для каждого приложения-функции в общей и выделенной учетных записях службы хранилища Azure.
Ескерім
Исключением из правила общего доступа к концентратору задач является настройка приложения для регионального аварийного восстановления. Дополнительные сведения см. в статье об аварийном восстановлении и географическом распределении.
Существует несколько распространенных способов проверки содержимого центра задач:
Для некоторых поставщиков хранилища также можно проверить центр задач, перейдя непосредственно в базовое хранилище:
Каждый поставщик хранилища использует собственную внутреннюю организацию для представления центров задач в хранилище. Понимание этой организации не требуется, но оно может быть полезно при устранении неполадок с приложением-функцией или при попытке обеспечить производительность, масштабируемость или целевые показатели затрат. Поэтому ниже мы кратко объясним, как данные организованы в хранилище для каждого поставщика хранилища. Дополнительные сведения о параметрах различных поставщиков хранилищ и их сравнении см. в разделе Поставщики хранилищ для приложения "Устойчивые функции".
Поставщик службы хранилища Azure представляет центр задач в хранилище с помощью следующих компонентов:
Например, центр задач с именем xyz
с PartitionCount = 4
содержит следующие очереди и таблицы:
Ниже мы подробно опишем эти компоненты и их роль.
Дополнительные сведения о том, как центры задач представляются поставщиком службы хранилища Azure, см. в документации по поставщику службы хранилища Azure.
Netherite разделяет все состояние центра задач на указанное количество секций. В хранилище используются следующие ресурсы:
Например, центр задач с именем mytaskhub
с PartitionCount = 32
представлен в хранилище следующим образом:
Ескерім
Все состояние центра задач хранится в контейнере BLOB-объектов x-storage
. Таблица DurableTaskPartitions
и пространство имен Центров событий содержат избыточные данные: если их содержимое утеряно, данные можно восстановить автоматически. Поэтому не нужно настраивать пространство имен Центров событий Azure для хранения сообщений после истечения срока действия по умолчанию.
Netherite использует механизм источника событий, основанный на журналах и контрольных точках, для представления текущего состояния секции. Используются как блочные, так и страничные BLOB-объекты. Данные в этом формате невозможно прочитать из хранилища напрямую, поэтому при запросе к хранилищу экземпляров необходимо запускать приложение-функцию.
Дополнительные сведения о центрах задач для поставщика хранилища Netherite см. в разделе Информация о центрах задач для поставщика хранилища Netherite.
Все данные центров задач хранятся в одной реляционной базе данных с использованием нескольких таблиц:
dt.Instances
и dt.History
, в которых хранятся состояния экземпляров;dt.NewEvents
, в которой хранятся сообщения экземпляров;dt.NewTasks
, в которой хранятся сообщения о действиях.
Чтобы обеспечить независимое сосуществование нескольких центров задач в одной базе данных, каждая таблица содержит столбец TaskHub
, который используется в составе первичного ключа этой таблицы. В отличие от двух других поставщиков, в поставщике MSSQL не используются секции.
Дополнительные сведения о центрах задач для поставщика хранилища MSSQL см. в разделе Информация о центрах задач для поставщика хранилища Microsoft SQL (MSSQL).
Центры задач идентифицируются по имени, которое должно соответствовать следующим правилам:
Имя центра задач объявляется в файле host.json, как показано в следующем примере:
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "MyTaskHub"
}
}
}
{
"durableTask": {
"hubName": "MyTaskHub"
}
}
Центры задач также можно настроить с помощью параметров приложения, как показано на примере файла host.json
:
{
"durableTask": {
"hubName": "%MyTaskHub%"
}
}
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "%MyTaskHub%"
}
}
}
Для имени центра задач будет установлено значение параметра приложения MyTaskHub
. В следующем файле local.settings.json
показано, как определить параметр MyTaskHub
как samplehubname
:
{
"IsEncrypted": false,
"Values": {
"MyTaskHub" : "samplehubname"
}
}
Ескерім
При использовании слотов развертывания рекомендуется настроить имя центра задач с помощью параметров приложения. Если вы хотите убедиться, что определенный слот всегда использует определенный центр задач, используйте связанные со слотом параметры приложения.
Кроме файла host.json, имена центра задач могут быть также настроены в метаданных привязки клиента оркестрации. Это необходимо, если требуется получить доступ к оркестрации или сущностям, которые находятся в отдельном приложении-функции. В следующем коде показано, как написать функцию, которая использует привязку клиента оркестрации для работы с центром задач, настроенным в качестве параметра приложения:
[FunctionName("HttpStart")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[DurableClient(TaskHub = "%MyTaskHub%")] IDurableOrchestrationClient starter,
string functionName,
ILogger log)
{
// Function input comes from the request content.
object eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync(functionName, eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
Ескерім
Предыдущий пример предназначен для Устойчивые функции 2.x. Для расширения "Устойчивые функции" версии 1.x необходимо использовать DurableOrchestrationContext
вместо IDurableOrchestrationContext
. Дополнительные сведения о различиях между версиями см. в статье Версии устойчивых функций.
Ескерім
Настройка имен центра задач в метаданных привязки клиента необходима только в случаях, если одно приложение-функция используется для доступа к оркестрации и сущностям в другом приложении-функции. Если функции клиента определены в том же приложении-функции, что и оркестрации и сущности, то следует избегать указания имен центров задач в метаданных привязки. По умолчанию все привязки клиента получают метаданные центра задач из параметров файла host.js.
Имена центров задач должны начинаться с буквы и содержать только буквы и цифры. Если имя не указано, будет использоваться имя центра задач по умолчанию, как показано в следующей таблице:
Версия устойчивых функций | Имя центра задач по умолчанию |
---|---|
2.x | При развертывании в Azure имя центра задач создается на основе имени приложения-функции. При выполнении за пределами Azure имя центра задач по умолчанию — TestHubName . |
1.x | Имя центра задач по умолчанию для всех сред — DurableFunctionsHub . |
Дополнительные сведения о различиях между версиями расширения см. в статье Версии устойчивых функций.
Ескерім
Имя —это то, что отличает один центр задач от другого, если в общей учетной записи хранения таких центров несколько. Если общую учетную запись хранения используют несколько приложений-функций, вам нужно задать разные имена для каждого центра задач в файлах host.json. В противном случае несколько приложений-функций будут конкурировать друг с другом за сообщения, что может привести к неопределенному поведению, включая оркестрации, приводящие к неожиданному "зависанию" в состоянии Pending
или Running
.
Оқиға
AI бағдарламалары мен агенттерін құру
Mar 17, 9 PM - Mar 21, 10 AM
Нақты пайдалану жағдайлары негізінде масштабты ИСК шешімдерін құру үшін стипендиаттармен және сарапшылармен кездесу сериясына қосылыңыз.
Қазір тіркелуОқыту
Оқыту бағдарламасы
Запуск приложений для высокопроизводительных вычислений (HPC) в Azure - Training
Azure HPC — это специально разработанная облачная возможность для рабочей нагрузки HPC и ИИ, использующая современные отраслевые процессоры и обмен данными по сети InfiniBand для обеспечения максимальной производительности, масштабируемости и ценности приложений. Azure HPC позволяет реализовывать инновации, повышать продуктивность и развивать гибкость бизнеса за счет высокодоступного набора технологий HPC и ИИ с возможностью их динамического распределения в соответствии с изменением коммерческих и техническ